diff --git a/src/ini/ms2/2.886.ini b/src/ini/ms2/2.886.ini
deleted file mode 120000
index 733f201..0000000
--- a/src/ini/ms2/2.886.ini
+++ /dev/null
@@ -1 +0,0 @@
-2.889.ini
\ No newline at end of file
diff --git a/src/ini/ms2/2.886.ini b/src/ini/ms2/2.886.ini
new file mode 100755
index 0000000..7af85f9
--- /dev/null
+++ b/src/ini/ms2/2.886.ini
@@ -0,0 +1,1863 @@
+;-------------------------------------------------------------------------------
+
+; #alert "alert text goes here - if uncommented, it will be displayed in a pop-up dialog whever a project using this INI is opened"
+; INI date: May30/08 12:52PM PDT
+
+#unset n2o
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+ signature = "MSII Rev 2.88600 " ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+;-------------------------------------------------------------------------------
+;
+; PREAMBLE
+;
+; There are several main sections (with brackets around the [section] heading) in this INI file:
+;
+; - Constants - this is divided into two pages (for recent MS-II code versions,
+; at least). Page 1 is based on the source code inpram structure
+; Page 2 is based on the source code in2ram structure. All of the
+; values are inputs sent from MegaTune to the MegaSquirt-II
+; - Menu (& User Defined) - these define most of the mennus in MegaTune (except
+; those that are 'built-in' like the accel wizrd, etc.)
+; - Curve Editor and Table Editor
+; - Gauge Configuration
+; - Front Page & RuntTime & Tuning Config
+; - Burst Mode Config
+; - Output Channels - this mirrors the OUTPC structure from the source code. All
+; of the values are sent from MegaSquirt-II to MegaTune on the PC.
+; - Datalog - select output channels to log to the PC hard drive
+;
+; Note:
+; - To add an input variable to MegaTune, you need to add it to the inpram (or in2ram)
+; structure in the MegaSquirt source code noting the correct offset (and recompile,
+; of course), to the Constants section, and to one of the menus.
+; - To add an output variable to MegaTune (for monitoring, logging, or switching purposes),
+; you need to add it to the outpc structure in the source code, to the OuptChannels, and
+; to the datalog section (and/or the gauge configurations, if you wish to see it directly
+; in MegaTune).
+;
+; In general, the respective notation for variables from the source code to the INI are:
+;
+; signed unsigned bytes
+; ------ -------- -----
+; - char = S08 U08 1
+; - int = S16 U16 2
+; - long = S32 U32 4
+;
+; Where the maximum range is:
+;
+; signed unsigned
+; ------ --------
+; - char = -128 to 127 0 to 255
+; - int = -32768 to 32767 0 to 65535
+; - long = -2147483648 0 to 4294967295
+; to 2147483647
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; I've got no good way to handle a few of these things yet.
+ ;
+ ; Temperatures are fine, check out the Fielding IAC example (fastIdleTemp).
+ ;
+ ; The TPS stuff is a problem, because we have to modify the INI file for
+ ; each TPS installation and again whenever we move the TPS...
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is laid
+ ; out as follows:
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+ pageActivationDelay = 50 ; Milliseconds delay after burn command.
+ blockReadTimeout = 200 ; Milliseconds total timeout for reading page.
+
+ endianness = big
+ nPages = 2
+ pageSize = 994, 946
+ pageIdentifier = "\x00\x04", "\x00\x05"
+ burnCommand = "b%2i", "b%2i"
+ pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c"
+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits , U08, 0, [0:3], "INVALID" ; *
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits , U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ ICCrankTrigger = bits , U08, 2, [1:2], "Calculated", "Trigger Return", "Trigger Rise", "INVALID" ; *
+ ICIgnOption = bits , U08, 2, [4:5], "Standard Coil Charge", "EDIS", "EDIS Multispark", "INVALID" ; *
+ spkout_hi_lo = bits , U08, 3, [0:0], "Going Low (Normal)", "Going High (Inverted)" ; *
+ max_coil_dur = scalar, U08, 4, "msec", 0.10000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellVolts = array , S08, 7, [ 5], "V", 0.10000, 0.00000,-12.80, 12.70, 1 ; * ( 5 bytes)
+ dwellDuration = array , S08, 12, [ 5], "msec", 0.10000, 0.00000,-12.80, 12.70, 1 ; * ( 5 bytes)
+ RevLimOption = bits , U08, 17, [0:1], "None", "Spark Retard", "Fuel Cut", "INVALID" ; * ( 1 byte)
+ RevLimMaxRtd = scalar, U08, 18, "deg", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "Alpha-Beta-Gamma Filter", "INVALID", "INVALID" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 0.00, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000,-359.0, 359.00, 2 ; * ( 2 bytes)
+ RevLimRpm1 = scalar, S16, 44, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ RevLimRpm2 = scalar, S16, 46, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 9.00, 20.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 9.00, 20.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+ ipwmTable = array , S16, 354, [ 10], "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ frpm_table = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ srpm_table = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ fmap_table = array , S16, 422, [ 12], "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ smap_table = array , S16, 446, [ 12], "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,-40.00, 100.00, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+#else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,-40.00, 200.00, 1
+#endif
+ taeRates = array , S16, 490, [ 4], "%/sec", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/sec", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+ map0 = scalar, S16, 506, "kPa", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "kPa", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:2], "None", "Solenoid", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "INVALID", "INVALID" ; *
+ IACtstep = scalar, U08, 548, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ IACaccstep = scalar, U08, 549, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ IACpwm_step = scalar, U08, 551, "Hz", 80.00000, 0.00000, 80.00, 800.00, 0 ; * ( 1 byte)
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, -320.000, -40.0, 150.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, -40.0, 300.0, 1
+#endif
+ IACcrankpos = scalar, S16, 556, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcrankxt = scalar, S16, 558, "sec", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ IACcoldtmp = scalar, S16, 560, "°C", 0.05555, -320.000, -40.0, 150.0, 1 ; * ( 2 bytes)
+#else
+ IACcoldtmp = scalar, S16, 560, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ IACcoldpos = scalar, S16, 562, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcoldxt = scalar, S16, 564, "sec", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ primePulseCold = scalar, S16, 566, "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 2 bytes)
+ primePulseHot = scalar, S16, 568, "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 2 bytes)
+ crankCold = scalar, S16, 570, "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 1 byte)
+ crankHot = scalar, S16, 572, "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 1 byte)
+ asePctCold = scalar, S16, 574, "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ asePctHot = scalar, S16, 576, "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCountCold = scalar, S16, 578, "cycles", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ aseCountHot = scalar, S16, 580, "cycles", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ taeColdA = scalar, U08, 582, "msec", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ tpsThresh = scalar, U08, 584, "%/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapThresh = scalar, U08, 585, "kPa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) threshold for MAE
+ taeTime = scalar, U08, 586, "sec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; *
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if NARROW_BAND_EGO
+ egoTarget = scalar, U08, 598, "v", 0.01000, 0.00000, 0.00, 2.00, 4 ; * ( 1 byte)
+#elif LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/IAT Tables in °F", "Coolant/IAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [0:1], "No MAF", "MAF Only", "MAF/MAP blend", "INVALID", ; *
+ MAFpin = bits , U08, 600, [4:5], "MAF on MAP pin", "MAF on Baro Pin", "MAF on Knock Pin", "INVALID" ; *
+ DualSpkOptn = bits , U08, 601, [0:3], "No Dual Spark", "Dual Tach Inputs", "Falling Cam Sync with Tach or Wheel", "Rising Cam Sync with Tach or Wheel", "Single Crank Wheel Input", "Single Cam Wheel Input", "Dual Inputs, Timing from 1 cam tooth", "M-0 Wheel w/ Falling Crank Sync", "M-0 Wheel w/ Rising Crank Sync", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * (1 byte)
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ reqFuel = scalar, U16, 608, "msec", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ injOpen = scalar, U08, 612, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ injPwmT = scalar, U08, 613, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "µsec", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ battFac = scalar, U08, 616, "ms/v", 0.0166667, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:0], "Four-stroke", "Two-stroke" ; *
+ injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID" ; *
+ OddAng = scalar, S16, 620, "degrees", 0.10000, 0.00000,-350.0, 350.00, 1
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ AMCOption = bits, U08, 628, [0:1], "Disabled", "RAM Update", "FLASH Update", "INVALID" ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; *
+ algorithm = bits, U08, 630, [0:1], "Speed Density", "Blend SD/Alpha-N", "Pure Alpha-N", "INVALID" ; *
+ an_direction = bits, U08, 630, [4:5], "Blend SD (hi_rpm)/Alpha-N (lo_rpm)","Blend SD (lo_rpm)/Alpha-N (hi_rpm)". "INVALID", "INVALID";
+ IgnAlpha = scalar, U08, 631, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ AfrAlpha = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ AFRStoich = scalar, U08, 633, "AFR", 0.10000, 0.00000, 0.00, 20.00, 1 ; * ( 1 byte)
+ AFRStoichWB = scalar, U08, 633, "AFR", 0.10000, 0.00000, 0.00, 20.00, 1 ; * ( 1 byte)
+ AFRStoichNB = scalar, U08, 633, "Volts", 0.01000, 0.00000, 0.00, 7.00, 3 ; * (1 byte)
+ alpha_lorpm = scalar, S16, 634, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ alpha_hirpm = scalar, S16, 636, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ alphaMAPtable = array , S16, 638, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes)
+ amap_tps = array , S16, 710, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ amap_rpm = array , U16, 722, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = scalar, U08, 740, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mycan_id = scalar, U08, 741, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ fet_delay = scalar, U08, 742, "µsec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ vr_delay = scalar, U08, 743, "µsec/1000rpm", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ ECUType = scalar, U08, 744, "1=MS-II, 2=MicroSquirt", 1.00000, 0.00000, 0.00, 9.00, 0 ; * ( 1 byte)
+
+ MapThreshXTD2 = scalar, U08, 745, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+
+#if n2o
+ n2oEnrich = scalar, U08, 746, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#else
+ pwImpulse = scalar, U08, 746, "msec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+#endif
+
+ impulseSec = scalar, U08, 747, "sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ nImpulse = scalar, U08, 748, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapdotSample = scalar, U08, 749, "msec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ tpsdotSample = scalar, U08, 750, "msec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ ASEHot = bits, U08, 751, [0:0], "Disable ASE on Hot Start", "Enable ASE on Hot Start"
+ InjStart = scalar, U08, 752, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ MapThreshXTD = scalar, U08, 753, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ MapThreshXTA = scalar, U08, 754, "kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ trendmapLimit = scalar, U08, 755, "kpa", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0.00, 1.00, 0 ; * ( 2 bytes)
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psThreshold = array , U16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ psHysteresis = array , U16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ aeTaperTime = scalar, U08, 896, "sec", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ AFRMult = bits, U08, 897, [0:1], "Use Combined VE/AFR table", "Separate VE & AFR table w/ NB EGO", "Separate VE & AFR table w/ WB EGO", "INVALID" ; * ( 1 byte)
+ aeEndPW = scalar, S16, 898, "msec", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "Transport Delay", "PID/Smith Predictor", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "msec", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ prime_delay = scalar, U08, 909, "sec", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ fuelFreq = array , U08, 910, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 911, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 912, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 913, "%", 1.00000, 0.00000, 0.00, 255, 0
+ AMCstep = scalar, U08, 914, "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ AMCdve = scalar, U08, 915, "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ AMCve_rpm = scalar, U16, 916, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ AMCve_map = scalar, U16, 918, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ AMCramve_dt = scalar, U16, 920, "sec", 1.0, 0.0, 0.0, 300.0, 0 ; * ( 2 bytes)
+ AMCT_thresh = scalar, U16, 922, "sec", 1.0, 0.0, 0.0, 1800.0, 0 ; * ( 2 bytes)
+ AMCupdate_thresh= scalar, U16, 924, "events", 1.0, 0.0, 0.0, 30000.0, 0 ; * ( 2 bytes)
+ CWOption = bits , U08, 926, [0:0], "Two-Point", "Table" ; * ( 1 byte )
+ knkOption = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Below threshold", "Above threshold" ; *
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "sec", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "sec", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ ;pad = scalar, U08, 935,
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+ knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 0.0, 512, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ No_Skip_Teeth = scalar, U08, 969, "teeth", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ Delay_Teeth = scalar, U08, 970, "teeth", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ ICISR_tmask = scalar, U08, 971, "msec", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 200, 0 ; * ( 1 byte )
+ injTestMode = bits , U08, 973, [0:1], "Normal Mode", "Test Mode", "Repeat Test", "INVALID" ; ( 1 byte )
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ injTestSqrts = scalar, U16, 982, "squirts", 1, 0, 0, 65000, 0 ; ( 2 bytes)
+ injTestPW = scalar, U16, 984, "msec", 0.001, 0, 0, 65, 3 ; ( 2 bytes)
+ injTestOffTime = scalar, U16, 986, "msec", 0.1, 0, 0, 6500, 1 ; ( 2 bytes)
+ CID = scalar, U16, 988, "cu.in.", 1, 0, 0, 700, 1 ; ( 2 bytes)
+ alpha = scalar, U08, 990, "%", 1.0, 0.0, 50, 150, 0 ; * ( 1 byte )
+ beta = scalar, U08, 991, "%", 1.0, 0.0, 0.0, 100, 0 ; * ( 1 byte )
+ gamma = scalar, U08, 992, "%", 1.0, 0.0, 0.0, 50, 0 ; * ( 1 byte )
+ acc_synchk = bits, U08, 993, [0:1], "Check Only at Steady Speed", "Check Accel and Steady Speed", "Check Decel and Steady Speed", "Check Always" ; (1 byte)
+
+; pageSize = 994
+
+ page = 2
+ veTable1 = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ advanceTable = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ AMCNBurns = scalar, U16, 576, "burns", 1, 0, 0, 65000, 0 ; x ( 2 bytes)
+ primePWTable = array , S16, 578, [ 10], "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPWTable = array , S16, 598, [ 10], "msec", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ asePctTable = array , S16, 618, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 638, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 658, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 658, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 670, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ xTauOption = bits , U08, 676, [0:1], "Off", "Accel/Decel Only", "Warm-up + Accel/Decel", "INVALID" ; * ( 1 byte )
+ spkN2O = scalar, U08, 677, "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 bytes)
+ XAccTable = array, U16, 678, [ 5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauAccTable = array, U16, 688, [ 5],"msec", 1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XDecTable = array, U16, 698, [ 5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauDecTable = array, U16, 708, [ 5],"msec", 1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XTrpms = array, U16, 718, [ 5], "rpm", 1.00000, 0.00000, 0.00, 10000, 0 ; * ( 10 bytes)
+ XClt = array, U16, 728, [ 10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ TauClt = array, U16, 748, [ 10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ ipada = array, S16, 768, [ 48], "", 1.00000, 0.00000, 0.00, 300, 0 ; * ( 96 bytes)
+ ; Supplemental corrections for barometer and IAT.
+ baroCorrVals = array , S16, 864, [ 6], "kPa", 0.10000, 0.00000, 80.0, 120.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 876, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 876, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S08, 888, [ 6], "%", 1.00000, 0.00000,-100.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta = array , S08, 894, [ 6], "%", 1.00000, 0.00000,-100.0, 120.0, 1 ; * ( 6 bytes)
+ MAFFlow = array , U16, 900, [ 12], "gram/sec", 0.01000, 0.00000, 0.00, 650.0, 1 ; * ( 24 bytes)
+ MAFCor = array , U08, 924, [ 12], "%", 1.00000, 0.00000, 0.00, 255.0, 0 ; * ( 12 bytes)
+ MAFRPM1 = scalar, U16, 936, "rpm", 1.00000, 0.00000, 0.00, 10000, 0 ; * ( 2 bytes)
+ MAFRPM2 = scalar, U16, 938, "rpm", 1.00000, 0.00000, 0.00, 10000, 0 ; * ( 2 bytes)
+ MAFDir = bits , U08, 940, [0:0], "Use Above", "Invert Above" ; * ( 1 byte )
+ VEIXOptn = bits , U08, 941, [0:0], "Use MAP only", "Adjust MAP for Baro" ; * ( 1 byte )
+ MatRtdRPMHi = scalar, U16, 942, "rpm", 1.00000, 0.00000, 0.00, 10000, 0 ; * ( 2 bytes)
+ MatRtdRPMLo = scalar, U16, 944, "rpm", 1.00000, 0.00000, 0.00, 10000, 0 ; * ( 2 bytes)
+
+; pageSize = 946
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Fuel &Set-Up"
+ subMenu = generalSettings, "&General"
+ subMenu = idleControl, "I&dle Control", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_port_edit, "Spare &Port Settings", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_separator, ;----------------------------------------------
+ subMenu = injChars, "I&njector Characteristics", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_injection, "Injection &Control", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = revLimiter, "&Rev Limiter", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = aseSettings, "After&Start Enrichment" , 0, { ECUType == 1 || ECUType == 2}
+ subMenu = accSettings, "Acce&l Enrichment Config", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = otherFuel, "&Other Fuel Settings", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = baroCorrection, "2-Point &Barometric Correction", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = flexFuelSettings,"&Flex Fuel", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = egoControl, "&EGO Control", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = amcSettings, "Automatic &Mixture Control", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = alphaNOptions, "&Alpha-N Blending", 0, { algorithm > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = MAFSettings, "MAP vrs. MAF &Usage", 0, { ECUType == 1 || ECUType == 2}
+
+ menuDialog = main
+ menu = "&Ignition Set-Up"
+ subMenu = ignitionOptions, "&Base Ignition Settings", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = dwellSettings, "D&well Settings", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = AdvncdignitionOptions, "&Advanced Ignition Options",0, { ECUType == 1 || ECUType == 2}
+ subMenu = knockThreshold, "&Knock Threshold", 0, { ECUType == 1 || ECUType == 2}
+
+ menuDialog = knockThreshold
+ menu = "&Settings"
+ subMenu = knockSettings, "&Knock Sensor Settings", 0, { ECUType == 1 || ECUType == 2}
+
+ menuDialog = main
+ menu = "B&asic Tables"
+
+#if MAPbaro
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = veTable1Tbl, "&VE Table 1 (MAP/Baro)", 0, { MAFOption != 1 && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable1Tbl, "&AFR Table 1 (MAP/Baro)", 0, { egoType >= 3 && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = veTable2Tbl, "V&E Table 2 (MAP/baro)", 0, { MAFOption != 1 && dualTable && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable2Tbl, "AFR &Table 2 (MAP/Baro)", 0, { egoType >= 3 && dualTable && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = ignitionTbl, "&Spark Advance Table (MAP/Baro)",0, { VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+
+#else
+ subMenu = veTable1Tbl, "VE Table &1 (MAP)", 0, { MAFOption != 1 && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable1Tbl, "A&FR Table 1 (MAP)", 0, { egoType >= 3 && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = veTable2Tbl, "VE Table &2 (MAP)", 0, { MAFOption != 1 && dualTable && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable2Tbl, "AF&R Table 2 (MAP)", 0, { egoType >= 3 && dualTable && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = ignitionTbl, "S&park Advance Table (MAP)", 0, { VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+#endif
+
+ menuDialog = main
+ menu = "Othe&r Tables"
+ subMenu = tempTableBins, "&Temperature Table Values", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = alphaMAPTbl, "&Alpha-N MAP Table", 0, { algorithm > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = barometerCorr, "Barometric &Correction", 0, { CWOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = primingPW, "Pri&ming Pulse", 0, { CWOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = crankingPW, "Cra&nking Pulse", 0, { CWOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = asePct, "A&SE Percentage", 0, { CWOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = aseTaper, "AS&E Taper", 0, { CWOption > 0 && (ECUType == 1 || ECUType == 2)}
+
+ menuDialog = veTable1Tbl
+ menu = "&Edit Bins"
+ subMenu = fmapTableBins, "Edit Fuel &MAP Bins"
+ subMenu = frpmTableBins, "Edit Fuel &RPM Bins"
+
+ menuDialog = veTable2Tbl
+ menu = "&Edit Bins"
+ subMenu = fmapTableBins, "Edit Fuel &MAP Bins"
+ subMenu = frpmTableBins, "Edit Fuel &RPM Bins"
+
+
+ menuDialog = ignitionTbl
+ menu = "&Edit Bins"
+ subMenu = smapTableBins, "Edit Spark &MAP Bins"
+ subMenu = srpmTableBins, "Edit Spark &RPM Bins"
+
+ menuDialog = main
+ menu = "&Tuning"
+ subMenu = std_realtime, "&Realtime Display", 0, { ECUType == 1 || ECUType == 2}
+
+#if MAPbaro
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = veTable1Map, "VE &Table 1 (MAP/Baro)", 0, { MAFOption != 1 && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = veTable2Map, "VE T&able 2 (MAP/Baro)", 0, { MAFOption != 1 && dualTable && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable1Map, "A&FR Ta&ble 1 (MAP/Baro)", 0, { egoType >= 3 && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable2Map, "A&FR Tabl&e 2 (MAP/Baro)", 0, { egoType >= 3 && dualTable && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = ignitionMap, "I&gnition Advance Table (MAP/Baro)", 0, { VEIXOptn > 0 && VEIXOptn > 0 && (ECUType == 1 || ECUType == 2)}
+
+#else
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = veTable1Map, "VE Table &1 (MAP)", 0, { MAFOption != 1 && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = veTable2Map, "VE Table &2 (MAP)", 0, { MAFOption != 1 && dualTable && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable1Map, "A&FR Table 1 (MAP)", 0, { egoType >= 3 && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = afrTable2Map, "AF&R Table 2 (MAP)", 0, { egoType >= 3 && dualTable && VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = ignitionMap, "&Spark Advance Table (MAP)", 0, { VEIXOptn == 0 && (ECUType == 1 || ECUType == 2)}
+#endif
+
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = std_warmup, "&Warmup Wizard", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_accel, "Acce&leration Wizard", 0, { ECUType == 1 || ECUType == 2}
+
+ menuDialog = main
+ menu = "X-Ta&u Tuning"
+ subMenu = XAccTable, "Puddling Factors (&accel)", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = XDecTable, "Puddling Factors (&decel)", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = TauAccTable, "Time Factors (a&ccel)", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = TauDecTable, "Time Factors (d&ecel)", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = xTauSettings, "&MAPdot Settings", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = XTrpmsdial, "&RPM Values", 0, { xTauOption > 0 && (ECUType == 1 || ECUType == 2)}
+
+ menuDialog = main
+ menu = "Oth&er Tuning"
+ subMenu = coldAdvance, "&Cold Advance", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = manifoldTempCorr,"I&AT-Based Fuel Correction", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = matBasedRetard, "IAT-&Based Timing Retard", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = iacSteps, "I&dle Steps", 0, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 && (ECUType == 1 || ECUType == 2)}
+ subMenu = ipwBins, "Idle &PWM Dutycycle", 0, { IdleCtl == 4 }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = alphaMAPMap, "Alpha-&N MAP Table", 0, { algorithm > 0 && (ECUType == 1 || ECUType == 2)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = MAFtable1, "&MAF Correction Table", 0, { MAFOption > 0 && (ECUType == 1 || ECUType == 2)}
+
+ menuDialog = main
+ menu = "Tools"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables...",0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table...", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = sensorCal, "&Sensor Calibration...", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = std_trigwiz, "Tri&gger Wizard...", 0, { ECUType == 1 || ECUType == 2}
+ subMenu = injector_test, "&Injector Test Mode", 0, { ECUType == 1 || ECUType == 2}
+
+ menu = "Help"
+ subMenu = helpGeneral, "&MS-II Info"
+ subMenu = sensorHelp, "&Sensor Calibration"
+ subMenu = burnHelp, "&Burning Values to ECU"
+
+;-------------------------------------------------------------------------------
+
+# unset TUNERSTUDIO
+#if TUNERSTUDIO
+
+[ReferenceTables]
+
+ tableWriteCommand = "t" ;
+
+
+
+ ; valid table Generator types:
+ ; thermGenerator - as used for temp sensor calibration
+ ; linearGenerator - as used for linear generic WB sensors
+
+ referenceTable = std_ms2gentherm, "Calibrate Thermistor Tables..."
+ topicHelp = "http://www.megamanual.com/mt28.htm#oh"
+ tableIdentifier = "\000", "Coolant Temperature Sensor", "\001", "Air Temperature Sensor"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using shorts
+ ;tableGenerator = Generator type, Label
+ tableGenerator = thermGenerator, "Thermistor Mesurements"
+ ; thermOption = name, resistor bias, tempPoint1(°C), resPoint1, tempPoint2, resPoint2, tempPoint3, resPoint3
+ thermOption = "GM", 2490, -40, 100700, 30, 2238, 99, 177
+ thermOption = "Ford", 10000, -40, 404418, 21, 13655, 99, 743
+ thermOption = "Mazda", 50000, -40, 2022088, 21, 68273, 99, 3715
+
+
+; adc will be replaced with the possible egoADC values 0-1023 in the MSII case.
+; using adc tables the values will be interpolated to fill all values.
+; adc*5/1024 will turn the adc to volts for a 0-5V, 1024 adc count
+
+ referenceTable = std_ms2geno2, "Calibrate AFR Table..."
+ topicHelp = "http://www.megamanual.com/mt28.htm#oa"
+ tableIdentifier = "\002", "AFR Table"
+ adcCount = 1024 ; length of the table
+ bytesPeradcValue = 2 ; using shorts
+ ;tableGenerator = Generator Type, Label, xUnits, yUnits, xLow, xHi, yLow, yHi ; lows and Hi's are just default values, they will be user editable
+ tableGenerator = linearGenerator, "Custom Linear WB", "AFR", "Volts", 9.7, 18.7, 1, 4
+ solutionsLabel = "EGO Sensor"
+ solution = "Narrowband", { adcValue > 92 ? 16.9 : 12.5 }
+ solution = "AEM Linear AEM-30-42xx", { 9.72 + (adcValue * 0.0096665)}
+ solution = "Daytona TwinTec", { 10 + (adcValue * 0.009804)}
+ solution = "DIY-WB", { table( adcValue/4, "WBlambda100MOT.inc")*14.7 / 100.0 }
+ solution = "DynoJet Wideband Commander", { adcValue * 0.00784325 + 10 }
+ solution = "FJO WB", { table(adcValue*5/1024 , "fjoWB.inc" ) }
+ solution = "Innovate 0.0-5.0", { 10 + (adcValue * 0.009804)}
+ solution = "Innovate 1.0-2.0", { adcValue * 0.049025}
+ solution = "LambdaBoy", { table(adcValue*5/1024 , "lambdaBoy.inc" ) }
+ solution = "TechEdge DIY Non-Linear", { table(adcValue*5/1024 , "TechEdge_DIYwbo2.inc") }
+ solution = "TechEdge Linear", { adcValue * 0.009804 + 9 }
+ solution = "Zeitronix", { table(adcValue*5/1024 , "zeitronix.inc") }
+
+ solution = "Custom Linear WB", linearGenerator
+
+#endif
+
+[UserDefined]
+
+ dialog = generalSettings, "General Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sg"
+ field = "ECU Type", ECUType
+ field = "!MUST set ECU Type before editting other values."
+ field = "Engine displacement", CID, { ECUType == 1 || ECUType == 2}
+ field = "Injection Timing Delay", InjStart, { ECUType == 1 || ECUType == 2}
+; field = "#System"
+; field = "Temperature Units", tempUnits, { ECUType == 1 || ECUType == 2}
+ field = "Dual Table Use", dualTable, { ECUType == 1 || ECUType == 2}
+ field = "Barometric Correction", baroCorr, { ECUType == 1 || ECUType == 2}
+ # set X_TAU_VISIBLE
+ #if X_TAU_VISIBLE
+ field = "X-Tau Usage", xTauOption, { ECUType == 1 || ECUType == 2}
+ #endif
+ field = "Prime, ASE, WUE & Baro Tables", CWOption, { ECUType == 1 || ECUType == 2}
+
+ field = "#Input Smoothing Factors"
+ field = "MAP/MAF Averaging Lag Factor", mapLF, { ECUType == 1 || ECUType == 2}
+ field = "RPM Averaging Lag Factor", rpmLF, { ECUType == 1 || ECUType == 2}
+ field = "TPS Averaging Lag Factor", tpsLF, { ECUType == 1 || ECUType == 2}
+ field = "Lambda Averaging Lag Factor", egoLF, { ECUType == 1 || ECUType == 2}
+ field = "CLT/IAT/Battery Lag Factor", adcLF, { ECUType == 1 || ECUType == 2}
+ field = "Knock Averaging Lag Factor", knkLF, { ECUType == 1 || ECUType == 2}
+
+ field = "#Sampling Rates"
+ field = "TPS Sample Rate", tpsdotSample, { ECUType == 1 || ECUType == 2}
+ field = "MAP Sample Rate", mapdotSample, { ECUType == 1 || ECUType == 2}
+
+ dialog = revLimiter, "Rev Limiter"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sr"
+ field = "Algorithm", RevLimOption
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption == 1 }
+ field = "Lower Rev Limit", RevLimRpm1
+ field = "Upper Rev Limit", RevLimRpm2
+
+ dialog = flexFuelSettings, "Flex Fuel Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sf"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Frequency (low)", fuelFreq0, { flexFuel > 0 }
+ field = "Fuel Correction (low)", fuelCorr0, { flexFuel > 0 }
+ field = "Timing Correction (low)", fuelSpkDel0, { flexFuel > 0 }
+ field = "Frequency (high)", fuelFreq1, { flexFuel > 0 }
+ field = "Fuel Correction (high)", fuelCorr1, { flexFuel > 0 }
+ field = "Timing Correction (high)", fuelSpkDel1, { flexFuel > 0 }
+
+ dialog = otherFuel, "Other Fuel Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#so"
+ field = "#Engine Start Up"
+ field = "Max. Cranking Speed", crankingRPM, { 1 }
+ field = "#VE Table Adjustments"
+ field = "(May have to save MSQ and reload to get to stick)"
+ field = "Use MAP/baro for tables", VEIXOptn, { 1 }
+ field = " - Must also set/unset MAPbaro in settings.ini -"
+ field = "AFR Table Fuel Calc Usage", AFRMult, { 1 }
+ field = "AFR Stioch. Ratio", AFRStoichNB, { AFRMult == 1 }
+ field = "AFR Stioch. Ratio", AFRStoichWB, { AFRMult == 2 }
+ field = "#Two-Point Prime"
+ field = "Prime Pulse Cold PW", primePulseCold, { CWOption == 0 }
+ field = "Prime Pulse Hot PW", primePulseHot, { CWOption == 0 }
+ field = "Prime Delay", prime_delay
+ field = "#Additional Fuel (switched by E0 low or cyclic)"
+
+#if n2o
+ field = "Nitrous Oxide Enrichment", n2oEnrich
+ field = "Spark Retard When N2O Active", spkN2O
+#else
+ field = "Fuel Added to Base PW", pwImpulse
+ field = "#Additional Fuel (cyclic only)"
+ field = "Time Between Added Fuel", impulseSec
+ field = "Number of Cycles", nImpulse
+#endif
+
+ dialog = aseSettings, "AfterStart Enrichment Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ss"
+ field = "#Hot AfterStart Enrichment"
+ field = "ASE Hot Start Enable", ASEHot
+
+ field = "#Two-Point AfterStart Enrich"
+ field = "ASE Cold Percent", asePctCold, { CWOption == 0 }
+ field = "ASE Hot Percent", asePctHot, { CWOption == 0 }
+ field = "ASE Cold Count", aseCountCold, { CWOption == 0 }
+ field = "ASE Hot Count", aseCountHot, { CWOption == 0 }
+
+ dialog = accSettings, "Accel Enrichment Configuration"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sl"
+ field = "#AE RPM Scaling (for non-XTau accel)"
+ field = "Low RPM Threshold", ae_lorpm,
+ field = "High RPM Threshold", ae_hirpm,
+
+ dialog = baroCorrection, "2-Point Barometric Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sb"
+ field = "#Barometric Correction"
+ field = "At total vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = xTauSettings, "X-Tau MAPdot Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#um"
+ field = "#MAPdot Thresholds for transition to X, Tau Decel Tables"
+ field = "Start Transition", MapThreshXTD
+ field = "Finish Transition", MapThreshXTD2
+ field = "#"
+ field = "#MAPdot trending threshhold is the start of"
+ field = "#Map Trending for faster AE/ XTau enrichment"
+ field = "MAPdot Trending Threshhold", MapThreshXTA
+ field = "Max. MAP added per sample", trendmapLimit
+
+ dialog = injChars, "Injector Characteristics"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sn"
+ field = "Injector Open Time", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "PWM Current Limit", injPwmP
+ field = "PWM Time Threshold", injPwmT
+ field = "!Injector PWM Period", injPwmPd ; !
+ field = "!Red settings require an MS-II reboot!"
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "http://www.megamanual.com/mt28.htm#se"
+ field = "EGO Sensor Type", egoType
+ #if NARROW_BAND_EGO
+ field = "NB Voltage Target", egoTarget, { egoType == 1 || egoType == 2}
+ #elif LAMBDA
+ field = "NB Lambda Target", AFRTarget, { egoType == 1 || egoType == 2}
+ #else
+ field = "NB AFR Target", AFRTarget, { egoType == 1 || egoType == 2}
+ #endif
+ field = "Ignition Events per Step", egoCount, { egoType == 1 || egoType == 2 || egoType > 2 && egoAlgorithm == 0}
+
+ field = "Controller Step Size", egoDelta, { egoType == 1 || egoType == 2}
+ field = "Controller Authority ±", egoLimit, { egoType > 0 }
+ field = "Active Above Coolant Temp", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 2 }
+ field = "PID Proportional Gain", egoKP, { egoType > 2 }
+ field = "Transport Delay 1", egoKdelay1, { egoType > 2 && egoAlgorithm > 0 }
+ field = "Transport Delay 2", egoKdelay2, { egoType > 2 && egoAlgorithm > 0 }
+ field = "PID Integral", egoKI, { egoType > 2 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 2 && egoAlgorithm > 1 }
+
+ dialog = amcSettings, "Automatic Mixture Control"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sm"
+ field = "!Must have EGO correction enabled for AMC to operate!"
+ field = "Automatic Mixture Control", AMCOption, { egoType > 0 }
+ field = "Step size", AMCstep, { AMCOption > 0 }
+ field = "Minimum VE Change", AMCdve, { AMCOption > 0 }
+ field = "Vertex Tolerance", AMCve_rpm, { AMCOption > 0 }
+ field = "Vertex Tolerance", AMCve_map, { AMCOption > 0 }
+ field = "Table Change Interval", AMCramve_dt, { AMCOption > 0 }
+ field = "Flash Update Interval", AMCT_thresh, { AMCOption > 1 }
+ field = "Update After", AMCupdate_thresh, { AMCOption > 1 }
+
+ dialog = alphaNOptions, "Alpha-N Blending"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sa"
+ field = "Alpha-N Usage", an_direction, {algorithm == 1}
+ field = "Pure AN to Blend Threshold", alpha_lorpm
+ field = "Blend to SD Threshold", alpha_hirpm
+
+ dialog = ignitionOptions, "Base Ignition Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ib"
+ field = "#General Ignition"
+ field = "Trigger Offset", triggerOffset
+ field = "Skip Pulses", no_skip_pulses
+ field = "#Prediction Settings",
+ field = "Predictor Algorithm", PredOpt
+ field = "Alpha", alpha, { PredOpt == 1 }
+ field = "Beta", beta, { PredOpt == 1 }
+ field = "Gamma", gamma, { PredOpt == 1 }
+ field = "#Tach Signal Masking"
+ field = "Time Mask", ICISR_tmask
+ field = "Percentage Mask", ICISR_pmask
+ field = "#Next-Pulse Tolerance"
+ field = " Cranking", crankTolerance
+ field = " After-start", asTolerance
+ field = " Normal Running", pulseTolerance
+ field = "Check Tach Sync Options", acc_synchk, { triggerTeeth == 0 }
+ field = "!Ignition Input Capture", ICIgnCapture, { ICIgnOption != 2 && ICIgnOption != 3 } ; !
+ field = "!Cranking Trigger", ICCrankTrigger, { ICIgnOption != 2 && ICIgnOption != 3 } ; !
+ field = "!Coil Charging Scheme", ICIgnOption ; !
+ field = "!Spark Output", spkout_hi_lo ; !
+
+
+ dialog = AdvncdignitionOptions, "Advanced Ignition Options"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ia"
+ field = "#Trigger Wheel Only (0 is no trigger wheel)"
+ field = "#Set only with ENGINE OFF"
+ field = "!Trigger Wheel Teeth", triggerTeeth
+ field = "!Missing Teeth", No_Miss_Teeth, { triggerTeeth > 0 }
+ field = "!Skip Teeth", No_Skip_Teeth, { triggerTeeth > 0 }
+ field = "!Delay Teeth", Delay_Teeth, { triggerTeeth > 0 }
+ field = "#Dual Spark Ignition Options"
+ field = "!Dual Spark Options", DualSpkOptn
+ field = "Offset (advance) for Output #2", OddAng
+ field = "#IAT-based Spark Retard Limiting Options"
+ field = "Start IAT Retard ", MatRtdRPMLo
+ field = "Full IAT Retard ", MatRtdRPMHi
+ field = "#Signal Delay Parameters"
+ field = "FET Ouput Delay", fet_delay
+ field = "VR Input Delay", vr_delay
+ field = "!Red settings require an MS-II reboot!"
+
+ dialog = dwellSettings, "Dwell Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#iw"
+ field = "Maximum Dwell Duration", max_coil_dur
+ field = "Maximum Spark Duration", max_spk_dur
+ field = "Acceleration Compensation", dwellAcc
+ field = "#Battery Voltage Compensation"
+ ; Make this an array2D when available.
+ array1D = "", "Voltage %INDEX% ", dwellVolts
+ array1D = "", "Duration at Voltage %INDEX% ", dwellDuration
+
+ dialog = idleControl, "Idle Control"
+ topicHelp = "http://www.megamanual.com/mt28.htm#sd"
+ field = "Algorithm", IdleCtl
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Time Step Size", IACtstep, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
+ field = "Acceleration Step Size", IACaccstep, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
+ field = "Minimum # steps to move", IACminstep, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
+ field = "!PWM Frequency", IACpwm_step, { IdleCtl == 4 }
+ field = "!Start Value (retract)", IACStart, { IdleCtl > 1 } ; !
+ field = "Cranking Position (extend)", IACcrankpos, { IdleCtl > 1 }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { IdleCtl > 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl > 1 }
+ field = "#Time-Based After Start (extended warm-up)"
+ field = " Cold Temperature", IACcoldtmp, { IdleCtl > 1 }
+ field = " Cold Position", IACcoldpos, { IdleCtl > 1 }
+ field = " Cold Taper Time", IACcoldxt, { IdleCtl > 1 }
+
+ dialog = sensorCal, "Sensor Calibration"
+ topicHelp = sensorHelp
+ field = "#MAP Sensor (F1 for common values)"
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+ field = "#Barometer Sensor (usually identical to MAP)"
+ field = "Value at 0.0 volts", baro0
+ field = "Value at 5.0 volts", baromax
+
+ dialog = knockSettings, "Knock Sensor Settings"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ik"
+ field = "Knock Control", knkOption
+ field = "#Detection"
+ field = "Threshold Direction", knkDirection, { knkOption > 0 }
+ field = "Threshold", knock0
+ field = "Peak", knockmax
+ field = "Knock Count", knk_ndet, { knkOption > 0 }
+ field = "No Knock Above MAP", knk_maxmap, { knkOption > 0 }
+ field = "No Knock Below RPM", knk_lorpm, { knkOption > 0 }
+ field = "No Knock Above RPM", knk_hirpm, { knkOption > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knkOption > 0 }
+ field = "Retard Check Time", knk_trtd, { knkOption > 0 }
+ field = "Retard Step Size", knk_step1, { knkOption > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knkOption > 0 }
+ field = "Advance Step Size", knk_step2, { knkOption > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knkOption > 1 }
+
+ dialog = injector_test, "Injector Test Mode"
+ topicHelp = "http://www.megamanual.com/mt28.htm#oi"
+ field = "!Injector test mode", injTestMode ; !
+ field = "Injector test squirts", injTestSqrts, { injTestMode > 0 }
+ field = "Injector test PW", injTestPW, { injTestMode > 0 }
+ field = "Injector test offtime", injTestOffTime, { injTestMode > 0 }
+ field = "!Reboot to test, set to 'Normal Mode' to reset"
+
+ dialog = frpmTableBins, "RPM Table Bins for Fuel Tables"
+ topicHelp="http://www.megamanual.com/mt28.htm#"
+ array1D = "", "Fuel RPM %INDEX% ", frpm_table
+ field = "#Close and re-open Table(s) to see changes"
+
+ dialog = fmapTableBins, "MAP Table Bins for Fuel Table(s)"
+ topicHelp="http://www.megamanual.com/mt28.htm#"
+ array1D = "", "Fuel MAP %INDEX% ", fmap_table
+ field = "#Close and re-open Table(s) to see changes"
+
+ dialog = srpmTableBins, "RPM Table Bins for Spark Table"
+ topicHelp="http://www.megamanual.com/mt28.htm#"
+ array1D = "", "Spark RPM %INDEX% ", srpm_table
+ field = "#Close and re-open Table(s) to see changes"
+
+ dialog = smapTableBins, "MAP Table Bins for Spark Table"
+ topicHelp="http://www.megamanual.com/mt28.htm#"
+ array1D = "", "Spark MAP %INDEX% ", smap_table
+ field = "#Close and re-open Table(s) to see changes"
+
+ dialog = tempTableBins, "Temperature Table Values"
+ topicHelp="http://www.megamanual.com/mt28.htm#at"
+ array1D = "", "Temperature %INDEX% ", tempTable
+
+ dialog = XtempTableBins, "X Temperature Correction Values"
+ topicHelp="http://www.megamanual.com/mt28.htm#at"
+ field = "#Temperature Correction for X Enrichments"
+ array1D = "", "Correction %INDEX% ", XClt
+
+ dialog = TtempTableBins, "Tau Temperature Correction Values"
+ topicHelp="http://www.megamanual.com/mt28.htm#at"
+ array1D = "", "Correction %INDEX% ", TauClt
+
+
+ dialog = XTrpmsdial, "X-Tau RPM Values"
+ topicHelp="http://www.megamanual.com/mt28.htm#ur"
+ field = "#RPM Bins for X-Tau Enrichments"
+ array1D = "", "X-Tau RPM %INDEX% ", XTrpms
+
+ dialog = MAFSettings, "MAF vrs. MAP Usage"
+ topicHelp = "http://www.megamanual.com/mt28.htm#su"
+ field = "#See Tables for MAF flow setting"
+ field = "Enable MAF Use", MAFOption
+ field = "MAF Hardware Configuration", MAFpin, { MAFOption > 0 }
+ field = "Note: MAF must NOT be on MAP pin for MAF/MAP blend."
+ field = "#MAP MAF Blend Settings"
+ field = "MAP Only Above RPM", MAFRPM1, { MAFOption > 1 }
+ field = "MAF Only Below RPM", MAFRPM2, { MAFOption > 1 }
+ field = "Invert above MAP/MAF settings", MAFDir, { MAFOption > 1 }
+ field = "#Viewing MAF in Real Time"
+ field = "You can set one of the gauges on the front page to mafGauge"
+ field = "to see the MAF in real time. Right click on any gauge and"
+ field = "select mafGuage "
+
+ help = burnHelp, "Burning Values to ECU"
+ webHelp = "http://www.megamanual.com/mt28.htm"
+ text = "Occassionally, you may have trouble getting values to 'stick'"
+ text = "in MegaTune. There are a few things you can try if this happens:
"
+ text = "\tHit TAB after entering the value. This forces MegaTune to"
+ text = "recognize the changed value.
"
+ text = "\tThen 'Burn to ECU'
"
+ text = "If that doesn't work:
"
+ text = "\tChange the value (as above) and immediately save the MSQ file ('File/Save').
"
+ text = "\tThen reload the file you just saved, and burn it when prompted.
"
+ text = "This forces all the values to be burned to both flash and RAM memory, and"
+ text = "should solve the problem."
+
+
+ help = sensorHelp, "Sensor Calibration"
+ webHelp = "http://www.megamanual.com/mt28.htm#os"
+ text = "MAP Sensor Calibration
"
+ text = "
"
+ text = "For the\tMPX4115 use\t10.6 and \t121.7
"
+ text = "\tMPX4250\t\t10.0\t260.0
"
+ text = "\tMPXH6300\t1.1\t315.5
"
+ text = "\tGM 3-BAR\t1.1\t315.5
"
+ text = "\tMPXH6400\t3.5\t416.5
"
+ text = "
"
+ text = "(GM 3-bar data from Dave Hartnell, http://www.not2fast.com/electronics/component_docs/MAP_12223861.pdf)
"
+ text = "
"
+ text = "\tSensor type\tvLo\tpLo\tvHi\tpHi\tvRef
"
+ text = "\tMPX4115 \t0.204 v\t15 kPa\t4.794 v\t115 kPa\t5.100 v
"
+ text = "\tMPX4250 \t0.204 v\t20 kPa\t4.896 v\t250 kPa\t5.100 v
"
+ text = "\tMPXH6300\t0.306 v\t20 kPa\t4.913 v\t304 kPa\t5.100 v
"
+ text = "\tGM 3-BAR\t0.631 v\t40 kPa\t4.914 v\t304 kPa\t5.100 v
"
+ text = "\tMPXH6400\t0.200 v\t20 kPa\t4.800 v\t400 kPa\t5.000 v
"
+ text = "
"
+ text = "In general, use values derived from these equations:
"
+ text = "
"
+ text = "\tm = (pHi-pLo)/(vHi-vLo)
"
+ text = "\tpv1 = pLo - m * vLo
"
+ text = "\tpv2 = pv1 + m * vRef
"
+ text = "
"
+ text = "References:
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4250A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6300A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6400A.pdf
"
+ text = "
"
+ text = "Barometer Sensor Calibration
"
+ text = "
"
+ text = "If your system has an external barometer sensor, separate from the MAP"
+ text = "sensor, then use these values to calibrate it properly. If you have"
+ text = "a standard MS installation, then copy your MAP sensor values here.
"
+ text = "
"
+ text = "Barometric Correction Calibration
"
+ text = "
"
+ text = "Correction for barometric effects is performed using the linear function below.
"
+ text = "
"
+ text = "\tcorrection = correction_0 + (rate * barometer) / 100
"
+ text = "
"
+ text = "'At total vacuum' contains the total correction at a barometer reading"
+ text = "of 0 kPa (you are on the moon). The 'Rate' contains the percentage per 100"
+ text = "kPa to scale the barometer value. Using the default values of 147 and -47,"
+ text = "we see that for a barometer of 100 kPa, we have 100% correction.
"
+ text = "
"
+ text = "\tcorrection = 147 + (-47*100) / 100 = 100%"
+
+
+ help = helpGeneral, "MS-II General Help"
+ webHelp = "http://www.megamanual.com/mt28.htm"
+ text = "Al Grippo and Bruce Bowling have created MegaSquirt-II, which"
+ text = "is a plug-in daughter card that replaces the 8-bit MC68HC908GP32"
+ text = "with a 16-bit MC9S12C64 processor. MegaSquirt-II is an intermediate"
+ text = "step from the original MegaSquirt towards UltraMegaSquirt.
"
+ text = "
"
+ text = "It is basically a plug-in processor card that has the MC9S12C64"
+ text = "processor plus support hardware as well as a stepper motor chip,"
+ text = "and an ignition module controller. The embedded code is written"
+ text = "in C, rather than assembly language, so it should be more accessible"
+ text = "to more programmers (Stephane Carrez has ported GCC to the HC12"
+ text = "processor so, although it doesn't use the full 9S12 instruction"
+ text = "set, we are able to use his version to write code for the MS-II).
"
+ text = "
"
+ text = "For current documentation, click the Web Help button below, or for"
+ text = "support questions visit http://www.msefi.com/."
+
+;-------------------------------------------------------------------------------
+
+[CurveEditor]
+ curve = coldAdvance, "Cold Ignition Advance Offset"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ec"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, 200, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacSteps, "IAC Steps"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ed"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, 200, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Duty Cycle"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ep"
+ columnLabel = "Coolant", "Idle PWM"
+ xAxis = -40, 200, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulsewidth"
+ topicHelp = "http://www.megamanual.com/mt28.htm#rm"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, 200, 9
+ yAxis = 0, 20, 5
+ xBins = tempTable, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulsewidth"
+ topicHelp = "http://www.megamanual.com/mt28.htm#rn"
+ columnLabel = "Coolant", "Cranking PW"
+ xAxis = -40, 200, 9
+ yAxis = 0, 20, 5
+ xBins = tempTable, coolant
+ yBins = crankPWTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+ topicHelp = "http://www.megamanual.com/mt28.htm#rs"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, 200, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment Taper"
+ topicHelp = "http://www.megamanual.com/mt28.htm#re"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, 200, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "IAT-Based Spark Timing Retard"
+ topicHelp = "http://www.megamanual.com/mt28.htm#eb"
+ columnLabel = "IAT", "Retard"
+ xAxis = 100, 300, 9
+ yAxis = 0, 15, 7
+ xBins = matTemps, mat
+ yBins = matRetard
+ gauge = matGauge
+
+ curve = knockThreshold, "Knock Threshold"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ik"
+ columnLabel = "RPM", "Threshold"
+ xAxis = 0, 6000, 7
+ yAxis = 0, 5.0, 6
+ xBins = knk_rpm, rpm
+ yBins = knk_thresh
+ gauge = tachometer
+
+ curve = barometerCorr, "Non-Linear Barometric Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#rc"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = -30, 30, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = manifoldTempCorr, "Non-Linear IAT (intake air temperature) Fuel Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ea"
+ columnLabel = "IAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = XAccTable, "X Accel Fuel Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ua"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, 8000, 4
+ yAxis = 0, 120, 4
+ xBins = XTrpms, rpm
+ yBins = XAccTable
+ gauge = xTauGauge1
+
+ curve = XDecTable, "X Decel Fuel Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ud"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, 8000, 9
+ yAxis = 0, 120, 9
+ xBins = XTrpms, rpm
+ yBins = XDecTable
+ gauge = xTauGauge1
+
+ curve = TauAccTable, "Tau Accel Fuel Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#uc"
+ columnLabel = "RPM", "time"
+ xAxis = 0, 8000, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauAccTable
+ gauge = xTauGauge1
+
+ curve = TauDecTable, "Tau Decel Correction"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ue"
+ columnLabel = "RPM", "time"
+ xAxis = 0, 8000, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauDecTable
+ gauge = xTauGauge1
+
+ curve = XCltTable, "X (Puddling) Temp. Correction Factors"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ux"
+ columnLabel = "Temperature", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 0, 600, 9
+ xBins = tempTable
+ yBins = XClt
+ gauge = cltGauge
+
+ curve = TCltTable, "Tau (Time) Temp. Correction Factors"
+ topicHelp = "http://www.megamanual.com/mt28.htm#ut"
+ columnLabel = "Temperature", "time"
+ xAxis = -40, 200, 9
+ yAxis = 0, 600, 9
+ xBins = tempTable
+ yBins = TauClt
+ gauge = cltGauge
+
+
+ curve = MAFtable1, "MAF Correction Table (to alter default MAF curve)"
+ topicHelp = "http://www.megamanual.com/mt28.htm#em"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+
+[TableEditor]
+
+#if MAPbaro
+
+ table = veTable1Tbl, veTable1Map, "VE Table 1 (MAP/baro)", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#a1"
+ ; constant, variable
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, kpaix, readonly
+ zBins = veTable1
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "VE Table 2", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#a1"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, kpaix, readonly
+ zBins = veTable2
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+
+#else
+
+ ; table_id, map3d_id, "title", page
+ table = veTable1Tbl, veTable1Map, "VE Table 1 (MAP)", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#a1"
+ ; constant, variable
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, calcMAP, readonly
+ zBins = veTable1
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+ table = veTable2Tbl, veTable2Map, "VE Table 2", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#a1"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, calcMAP, readonly
+ zBins = veTable2
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+#endif
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+ gridHeight = 3.0
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+ gridHeight = 1.0
+#endif
+ topicHelp = "http://www.megamanual.com/mt28.htm#af"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, calcMAP, readonly
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable1Tblix, afrTable1MapIX, "Lambda Table 1", 1
+ gridHeight = 3.0
+#else
+ table = afrTable1Tblix, afrTable1MapIX, "AFR Table 1", 1
+ gridHeight = 1.0
+#endif
+ topicHelp = "http://www.megamanual.com/mt28.htm#af"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, kpaix, readonly
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+ gridHeight = 3.0
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+ gridHeight = 1.0
+#endif
+ topicHelp = "http://www.megamanual.com/mt28.htm#af"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, calcMAP, readonly
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tblix, afrTable2MapIX, "Lambda Table 2", 1
+ gridHeight = 3.0
+#else
+ table = afrTable2Tblix, afrTable2MapIX, "AFR Table 2", 1
+ gridHeight = 1.0
+#endif
+ topicHelp = "http://www.megamanual.com/mt28.htm#af"
+ xBins = frpm_table, rpm, readonly
+ yBins = fmap_table, kpaix, readonly
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if MAPbaro
+
+ table = ignitionTbl, ignitionMap, "Spark Advance Table", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#ap"
+ xBins = srpm_table, rpm, readonly
+ yBins = smap_table, kpaix, readonly
+ zBins = advanceTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+#else
+
+ table = ignitionTbl, ignitionMap, "Spark Advance Table", 2
+ topicHelp = "http://www.megamanual.com/mt28.htm#ap"
+ xBins = srpm_table, rpm, readonly
+ yBins = smap_table, calcMAP, readonly
+ zBins = advanceTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+#endif
+
+ table = alphaMAPTbl, alphaMAPMap, "Alpha-N MAP Table", 1
+ topicHelp = "http://www.megamanual.com/mt28.htm#en"
+ xBins = amap_rpm, rpm
+ yBins = amap_tps, tps
+ zBins = alphaMAPtable
+ upDownLabel = "UP", "DOWN"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 5, 50, -1, -1, 999, 999, 1, 1
+
+ IACgauge = iacstep, "IAC position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 0, 0
+
+ accelEnrichGauge = accDecEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ afr1Gauge = afr1, "Air:Fuel Ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ clockGauge = seconds, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 0, 0
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 0, 0
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 0, 0
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ kpabaroGauge = kpaix, "Engine MAP/baro", "kPa", 0, 255, 0, 20, 200, 245, 1, 0
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ lambda1Gauge = lambda1, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+ gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 1, 0
+ mafGauge = maf, "MAF Air flow", "g/sec", 0, 650, 0, 200, 480, 550, 0, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ calcMapGauge = calcMAP, "Estimated MAP", "kPa", 0, 255, 0, 20, 200, 245, 1, 0
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 500, 5000, 6000, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 0, 0
+; timmingErrGauge = timingErr, "Timing Error", "degrees",-10, 10, -10, -5, 5, 10, 1, 1
+ deltaTGauge = deltaT, "Timing Delta", "uS", 0, 25000, 0, 0,25000, 25000, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge = veCurr1, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ voltMeter = batteryVoltage, "Battery Voltage", "volts", 7, 21, 9, 10, 16, 17, 2, 2
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+; Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+ xTauGauge1 = xTauFuelCorr1, "X-Tau Correction1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ xTauGauge2 = xTauFuelCorr2, "X-Tau Correction2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "C", -40, 120, -15, 0, 95, 105, 0, 0
+ matGauge = mat, "Intake Air Temp", "C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, 250, 0, 30, 200, 220, 0, 0
+ matGauge = mat, "Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+
+ e85Gauge = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0
+ ethanolGas = fuelComposition, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 0, 0
+ triggers± = trig_fix, "Triggers add/sub", "", -200, 200, -100, -10, 10, 100, 0, 0
+ tachCount = tachCount, "Number Tach Pulses", "", 0, 1000, -1, -1, 1000, 1000, 0, 0
+
+;-------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+#if NARROW_BAND_EGO
+ gauge4 = egoGauge
+#elif LAMBDA
+ gauge4 = lambda1Gauge
+#else
+ gauge4 = afr1Gauge
+#endif
+ gauge5 = mapGauge
+#if IAC_GAUGE
+ gauge6 = IACgauge
+#elif PWM_GAUGE
+ gauge6 = PWMIdlegauge
+#else ; FIDLE_GAUGE
+ gauge6 = matGauge
+#endif
+ gauge6 = xTauGauge1
+ gauge7 = advdegGauge
+ gauge8 = dwellGauge
+
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ ; Look in the new colorScheme.ini for the basic ones, add more or tell me what to add.
+
+ indicator = { ECUType == 1 || ECUType == 2 }, "SET ECU!!", "ECU Set", red, black, white, green
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, black, white
+ indicator = { startw }, "ASE off", "ASE ON", white, black, cyan, black
+ indicator = { warmup }, "WUE off", "WUE ON", white, black, blue, white
+ indicator = { tpsaen }, "Accel Enrich", "Accel Enrich", white, black, green, black
+ indicator = { tpsden }, "Decel Cut", "Decel Cut", white, black, green, black
+ indicator = { tps > floodClear && crank }, "Flood clear off", "FLOOD CLEAR ON", white, black, red, black
+ indicator = { batteryVoltage < 10.5 }, "Battery OK", "Battery LOW", green, black, red, black
+ indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+ coolantBar = -40, 100
+ matBar = -40, 100
+#else
+ coolantBar = -40, 215
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 100
+ mapDotBar = 0, 200
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+ getCommand = "a\x00\x06"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 112
+ ochGetCommand = "a\x00\x06" ; Lower case so we don't get confused.
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "s", 0.001, 0.0
+ pulseWidth2 = scalar, U16, 4, "s", 0.001, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ; mapaen: equ 6 ; 0 = not in MAP acceleration mode 1 = MAP deaceeleration mode; not implemented
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaen = bits, U08, 11, [4:4]
+ tpsden = bits, U08, 11, [5:5]
+ mapaen = bits, U08, 11, [6:6]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.100, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.100, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+ tpsADC = { tps*10.23 }, "ADC" ; Fake for calibrator and file indexing.
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, S16, 32, "v", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 1.000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 1.000, 0.0
+ airCorrection = scalar, S16, 38, "%", 1.000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ fuelComposition = { (fuelCorrection - 100)*1.587 }, % ; works with default sensor values
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "msec", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 1.000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 1.000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 1.000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = { iacstep } ; Close enough.
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ tpsDOT = scalar, S16, 58, "%/sec", 1.000, 0.0
+ mapDOT = scalar, S16, 60, "kPa/sec", 1.000, 0.0
+ dwell = scalar, S16, 62, "msec", 0.100, 0.0
+ maf = scalar, S16, 64, "g/sec", 0.010, 0.0
+ calcMAP = scalar, S16, 66, "kPa", 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.100, 0.0
+ xTauFuelCorr1 = scalar, S16, 72, "%", 1.000, 0.0
+ egoV1 = scalar, S16, 74, "Volts", 0.010, 0.0
+ egoV2 = scalar, S16, 76, "Volts", 0.010, 0.0
+ amcUpdates = scalar, S16, 78, "", 1.000, 0.0
+ kpaix = scalar, S16, 80, "kPa", 0.100, 0.0
+ xTauFuelCorr2 = scalar, S16, 82, "%", 1.000, 0.0
+ spare1 = scalar, S16, 84, "", 1.000, 0.0
+ spare2 = scalar, S16, 86, "", 1.000, 0.0
+ trig_fix = scalar, S16, 88, "", 1.000, 0.0
+ spare4 = scalar, S16, 90, "", 1.000, 0.0
+ spare5 = scalar, S16, 92, "", 1.000, 0.0
+ spare6 = scalar, S16, 94, "", 1.000, 0.0
+ spare7 = scalar, S16, 96, "", 1.000, 0.0
+ spare8 = scalar, S16, 98, "", 1.000, 0.0
+ spare9 = scalar, S16, 100, "", 1.000, 0.0
+ spare10 = scalar, S16, 102, "", 1.000, 0.0
+ tachCount = scalar, U16, 104, "", 1.000, 0.0
+ ospare = scalar, U08, 106, "", 1.000, 0.0
+ cksum = scalar, U08, 107, "", 1.000, 0.0
+ deltaT = scalar, U32, 108, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth.
+
+
+ accDecEnrich = { accelEnrich + (tpsden ? tpsfuelcut : 100) }, "%"
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-twoStroke) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-twoStroke) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV1 }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+; pageSize = 112
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = kpaix, "MAP/baro", float, "%.1f"
+ entry = maf, "MAF", float, "%d"
+ entry = throttle, "TP", int, "%d"
+ entry = batteryVoltage, "vBatt", float, "%.2f"
+
+#if NARROW_BAND_EGO
+ entry = egoVoltage, "O2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+#endif
+ entry = mat, "IAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+
+ entry = egoCorrection, "Gego", int, "%d"
+ entry = airCorrection, "Gair", int, "%d"
+ entry = warmupEnrich, "Gwarm", int, "%d"
+ entry = baroCorrection, "Gbaro", int, "%d"
+ entry = gammaEnrich, "Gammae", int, "%d"
+ entry = accDecEnrich, "AccelEnrich", int, "%d"
+
+ entry = veCurr1, "Gve", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "Gve2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SparkAdv", float, "%.1f"
+ entry = knockRetard, "knockRet", float, "%.1f"
+ entry = coldAdvDeg, "ColdAdv", float, "%.1f"
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = tpsDOT, "tpsDOT", int, "%d"
+ entry = mapDOT, "mapDOT", int, "%d"
+ entry = iacstep, "IAC", int, "%d"
+ entry = deltaT, "deltaT", float, "%.0f"
+ entry = trig_fix, "Trigger±", int, "%d"
+ entry = tachCount, "tachCount", int, "%d"
+ entry = xTauFuelCorr1 "XTau1", int, "%d"
+ entry = xTauFuelCorr2 "XTau2", int, "%d"
+ entry = fuelCorrection, "E85fuelCorr", int, "%d"
+ entry = fuelComposition, "Ethanol%", int, "%d"
+ entry = afrtgt1, "AFRtrgt1", float, "%.2f"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/Serial310.ini b/src/ini/ms2extra/Serial310.ini
new file mode 100755
index 0000000..7e6c15d
--- /dev/null
+++ b/src/ini/ms2extra/Serial310.ini
@@ -0,0 +1,3324 @@
+;-------------------------------------------------------------------------------
+; $Id: megasquirt-ii.ms2extra.ini,v 1.33 2011-01-13 13:01:02 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
+#unset CAN_COMMANDS
+
+#unset EXPANDED_CLT_TEMP ; change this line to SET if you want to use the extended range
+
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+
+#unset MICROSQUIRT_FULL
+#unset MICROSQUIRT_MODULE
+#unset USE_CRC_DATA_CHECK
+
+;#if INI_VERSION_2
+;; ok
+;#else
+;#error Megatune cannot be used with MS2/Extra 3.0.x - please upgrade to TunerStudio
+;#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\x00\x0e\x00\x00\x00\x3c" ; Title bar
+ queryCommand = "r\x00\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ signature = "MS2Extra Serial310 " ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "t" ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ ;topicHelp = "http://www.megamanual.com/mt28.htm#??"
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ ;tableGenerator = Generator Type, Label, xUnits, yUnits, xLow, xHi, yLow, yHi ; lows and Hi's are just default values, they will be user editable
+ ;tableGenerator = linearGenerator, "Custom Linear WB", "Volts","AFR", 1, 4, 9.7, 18.7
+ solutionsLabel = "MAF Sensor"
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+; solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; I've got no good way to handle a few of these things yet.
+ ;
+ ; Temperatures are fine, check out the Fielding IAC example (fastIdleTemp).
+ ;
+ ; The TPS stuff is a problem, because we have to modify the ini file for
+ ; each TPS installation and again whenever we move the TPS... I figured
+ ; out a moderately palatable solution to presenting the frequency
+ ; divider in the boost control values, turn it into a bit field and then
+ ; enumerate the resulting frequencies.
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+ pageActivationDelay = 50 ; Milliseconds delay after burn command.
+ blockReadTimeout = 100 ; Milliseconds total timeout for reading page.
+ writeBlocks = off ; from Lance
+ interWriteDelay = 5 ; 5 from Lance
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 6
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\x00\x04", "\x00\x05", "\x00\x0a", "\x00\x08", "\x00\x09", "\x00\x0b"
+ burnCommand = "b\x00\x04", "b\x00\x05", "b\x00\x0a", "b\x00\x08", "b\x00\x09", "b\x00\x0b"
+ pageReadCommand = "r\x00\x04%2o%2c", "r\x00\x05%2o%2c", "r\x00\x0a%2o%2c", "r\x00\x08%2o%2c", "r\x00\x09%2o%2c", "r\x00\x0b%2o%2c"
+ pageValueWrite = "w\x00\x04%2o%2c%v", "w\x00\x05%2o%2c%v", "w\x00\x0a%2o%2c%v", "w\x00\x08%2o%2c%v", "w\x00\x09%2o%2c%v", "w\x00\x0b%2o%2c%v"
+#if CAN_COMMANDS
+; ignore writing chunks
+#else
+ pageChunkWrite = "w\x00\x04%2o%2c%v", "w\x00\x05%2o%2c%v", "w\x00\x0a%2o%2c%v", "w\x00\x08%2o%2c%v", "w\x00\x09%2o%2c%v", "w\x00\x0b%2o%2c%v"
+#endif
+#if USE_CRC_DATA_CHECK
+ crc32CheckCommand = "k\x00\x04\x00\x00\x00\x04", "k\x00\x05\x00\x00\x00\x04", "k\x00\x0a\x00\x00\x00\x04", "k\x00\x08\x00\x00\x00\x04", "k\x00\x09\x00\x00\x00\x04", "k\x00\x0b\x00\x00\x00\x04"
+#endif
+; The following experiment 'page activation' is not fully supported in the firmware
+; pageActivate = "p\x00\x04", "p\x00\x05", "p\x00\x0a", "p\x00\x08", "p\x00\x09", "p\x00\x0b"
+
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+; spare spkout_hi_lo = bits , U08, 3, [0:0], "Going Low (Normal)", "Going High (Inverted)" ; *
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte)
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 0.00, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 100, 1 ; * ( 2 bytes)
+ RevLimRpm2 = scalar, S16, 46, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 9.00, 20.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 9.00, 20.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ amap_table2 = array , S16, 446, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,-40.00, 230.00, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #endif
+ #else
+ #if EXPANDED_CLT_TEMP
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ #endif
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if MICROSQUIRT_FULL
+ IdleCtl = bits , U08, 547, [0:3], "None", "On/Off valve", "INVALID", "INVALID", "PWM Warmup", "INVALID", "PWM Closed-loop", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+#else
+ IdleCtl = bits , U08, 547, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+#endif
+ IACtstep = scalar, U08, 548, "ms", 0.128, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step = scalar, U08, 549, "ms", 0.128, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, -40.0, 230.0, 1 ; * ( 2 bytes)
+ #else
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, -40.0, 150.0, 1 ; * ( 2 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, -40.0, 450.0, 1
+ #else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, -40.0, 300.0, 1
+ #endif
+#endif
+ IACcrankxt = scalar, S16, 558, "sec", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ IACcoldtmp = scalar, S16, 560, "°C", 0.05555, -320.000, -40.0, 230.0, 1 ; * ( 2 bytes)
+ #else
+ IACcoldtmp = scalar, S16, 560, "°C", 0.05555, -320.000, -40.0, 150.0, 1 ; * ( 2 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ IACcoldtmp = scalar, S16, 560, "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ #else
+ IACcoldtmp = scalar, S16, 560, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ #endif
+#endif
+ IACcoldpos = scalar, S16, 562, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcoldxt = scalar, S16, 564, "sec", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, 1000, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+ overboostcutx = scalar, U08, 575, "", 1, 0, 0, 255, 0
+ overboostcuty = scalar, U08, 576, "", 1, 0, 0, 255, 0
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; *
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "AD7", "AD6", "INVALID" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,-40.00, 230.00, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,-40.00, 230.00, 1 ; * ( 2 bytes)
+ #else
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 2 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ #else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ #endif
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:0], "Four-stroke", "Two-stroke" ; *
+ injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:3], "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ AMCOption = bits, U08, 628, [0:1], "Disabled", "RAM Update", "FLASH Update", "INVALID" ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; *
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAFMAP", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAFMAP", "MAF", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAFMAP", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAFMAP", "INVALID", "ITB", "INVALID"
+ AfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+ RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ ; spare 645
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ;
+ RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, 16000, 0 ;
+ RevLimNormal1 = scalar, S16, 654, "RPM", 1.00000, 0.00000, 0.00, 16000, 0 ;
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, 16500, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [2:2], "Disable", "Enable"
+ poll_tableADC = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC = scalar, S16, 668, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 670, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 672, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 674, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 674, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 674, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 674, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 675, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ CID = scalar, U16, 676, "ci", 1.00000, 0.00000, 0, 1000, 0
+
+ remotePWMfreq = scalar, U08, 678, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 679, "", 1.00000, 0.00000, 1, 255, 0
+
+ ; dummys 56 bytes
+ hw_latency = scalar, U08, 732, "usec", 0.66667, 0.00000, 0.00, 170, 0
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+
+
+
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 50, 0
+ can_poll = bits, U08, 751, [0:3], "Disabled", "GPIO", "MS2/Extra slave", "Generic Board" ; can add other types here and write firmware to poll them
+ can_poll_id = bits, U08, 752, [0:3], "Disabled", "1", "2", "3", "4", "5", "6", "7"
+ can_poll_slave = bits, U08, 752, [7:7], "Master", "Slave"
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0.00, 1.00, 0 ; * ( 2 bytes)
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ psThreshold = array , U16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ psHysteresis = array , U16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ ;pad = scalar, U08, 897,
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexFuelRemote = bits , U08, 908, [1:1], "Local", "Remote" ; * ( 1 byte)
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+
+ AMCstep = scalar, U08, 914, "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ AMCdve = scalar, U08, 915, "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ AMCve_rpm = scalar, U16, 916, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ AMCve_map = scalar, U16, 918, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ AMCramve_dt = scalar, U16, 920, "sec", 1.0, 0.0, 0.0, 300.0, 0 ; * ( 2 bytes)
+ AMCT_thresh = scalar, U16, 922, "sec", 1.0, 0.0, 0.0, 300.0, 0 ; * ( 2 bytes)
+ AMCupdate_thresh= scalar, U16, 924, "events", 1.0, 0.0, 0.0, 30000.0, 0 ; * ( 2 bytes)
+
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkport = bits, U08, 927, [2:2], "MS2 AD7/JS4", "MS2 AD6/JS5"
+ knk_remote = bits, U08, 927, [3:3], "Local", "Remote"
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "sec", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "sec", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "ON", "INVALID", "ON with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 0.0, 512, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport_remote = bits, U08, 973, [0:2], "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, 10000, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAFMAP", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAFMAP", "INVALID", "ITB", "INVALID"
+; 2 spare
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on D16"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:4], "Alternate", "Paired"
+ spk_conf2_ngc = bits , U08, 987, [6:6], "Off", "Alternate"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+;spk_config
+ spk_config_spka = bits , U08, 988, [0:0], "JS10", "D14" ; ( 1 byte )
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Rising and falling"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3 = bits, U08, 989, [6:7], "Single coil", "Wasted spark", "Coil on plug", "Dual dizzy" ; (1 byte )
+
+; userlevel byte 990 . Use top type bits now so can add finer grained control if required
+ userlevel = scalar, U08, 990, "level", 1, 0, 0, 255,0
+ userlevelbits = bits, U08, 990, [6:7], "Fuel only", "Fuel+Spark", "Extended", "Advanced" ; (1 byte )
+#if MICROSQUIRT_FULL
+ rtbaroport = bits, U08, 991, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "INVALID", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "INVALID", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ flexport = bits, U08, 994, [0:0], "FLEX", "INVALID"; (1 byte )
+#else
+#if MICROSQUIRT_MODULE
+ rtbaroport = bits, U08, 991, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ flexport = bits, U08, 994, [0:0], "FLEX", "PA0"; (1 byte )
+#else
+
+ rtbaroport = bits, U08, 991, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ flexport = bits, U08, 994, [0:0], "PE0/JS7", "JS11"; (1 byte )
+#endif
+#endif
+ flexportRemote = bits, U08, 994, [1:2], "PWM0", "PWM1", "PWM2", "PWM3"; (1 byte )
+ RevLimcutx = scalar, U08, 995, "", 1, 0, 0, 255, 0
+ RevLimcuty = scalar, U08, 996, "", 1, 0, 0, 255, 0
+; feature4_0ftrig = bits, U08, 997, [0:0], "Simple", "Advanced"
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0maxdwl = bits, U08, 997, [3:3], "Off", "On"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ feature4_0mindwl = bits, U08, 997, [6:6], "Off", "On"
+ feature4_0vanos = bits, U08, 997, [7:7], "Off", "Logged"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.39063, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,-40.00, 230.00, 1 ;
+ #else
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ;
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ #else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ #endif
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "sec", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.39063, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.39063, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "sec", 1, 0.00000, 2, 10, 0
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.39063, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, 32000, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.39063, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, U16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, U16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = scalar, U08, 54, "", 1, 0.00000, 0, 15, 0
+ pwmidle_min_rpm = scalar, U16, 55, "rpm", 1, 0.00000, 0, 2000, 0
+ pwmidle_max_rpm = scalar, U16, 57, "rpm", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "sec", 1, 0.00000, 2, 10, 0
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+#if MICROSQUIRT_FULL
+ boost_ctl_pins = bits, U08, 68, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Fidle", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID"
+#else
+#if MICROSQUIRT_MODULE
+ boost_ctl_pins = bits, U08, 68, [0:3], "INVALID", "PT7", "PT6", "INVALID", "PA0", "INVALID", "INVALID", "INVALID", "Fidle", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID"
+#else
+ boost_ctl_pins = bits, U08, 68, [0:3], "INVALID", "IAC1", "IAC2", "INVALID", "JS11", "INVALID", "INVALID", "INVALID", "Fidle", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID"
+#endif
+#endif
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, 25500, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, 25500, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.39063, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,-40.00, 230.00, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,-40.00, 150.00, 1
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,-40.00, 450.00, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ #endif
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, 25500, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, 25500, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], "kpa", 0.10000, 0.00000,0, 255, 0 ; * (24 bytes)
+ EAESOCKPAbins = array, U16, 614, [ 12], "kpa", 0.10000, 0.00000,0, 255, 0 ; * (24 bytes)
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for barometer and MAT.
+ baroCorrVals = array , S16, 710, [ 6], "kPa", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 722, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 722, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S08, 734, [ 6], "%", 1.00000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta = array , S08, 740, [ 6], "%", 1.00000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, -40.00, 230.00, 0
+ #else
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, -40.00, 150.00, 0
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,-40.00, 450.00, 1
+ #else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,-40.00, 300.00, 1
+ #endif
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, 15000, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, 400, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, 15000, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, 400, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, -40.00, 230.00, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, -40.00, 230.00, 0
+ #else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, -40.00, 150.00, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, -40.00, 150.00, 0
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,-40.00, 450.00, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,-40.00, 450.00, 1
+ #else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,-40.00, 300.00, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,-40.00, 300.00, 1
+ #endif
+#endif
+
+ airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ tsf_remote = bits , U08, 827, [0:0], "Local", "Remote"
+ tsf_remote_port = bits , U08, 827, [1:3], "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ tss_remote = bits , U08, 827, [4:4], "Local", "Remote"
+ tss_remote_port = bits , U08, 827, [5:7], "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On" ; * ( 1 byte)
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+;until we redfine the pin on MICROSQUIRT then hardware table switching cannot be used
+#if MICROSQUIRT_FULL
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "INVALID", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "INVALID", "rpm", "kPa", "TPS"
+#else ; including the microsquirt_module
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+#endif
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+
+ pwmidlecranktaper= scalar, U08, 831, "s", 1.00000, 0.00000, 0.00, 100.00, 0
+ pwmidleset_hz = bits, U08, 832, [0:0], "78Hz", "156Hz"
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, 15000, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, 400, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, -40.0, 230.0, 1 ; * ( 2 bytes)
+ #else
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, -40.0, 150.0, 1 ; * ( 2 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, -40.0, 450.0, 1
+ #else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, -40.0, 300.0, 1
+ #endif
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+#if MICROSQUIRT_FULL
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+#else
+#if MICROSQUIRT_MODULE
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+#else
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+#endif
+#endif
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, 65535, 0
+ fc_ego_delay = scalar, U08, 848, "seconds", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, 15000, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, 15000, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "sec", 1, 0, 0, 10, 0
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0.00, 1.00, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000,-128.00, 127.00, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , U16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , U16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ smap_table2 = array , S16, 648, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+; feature3_0 = bits, U08, 672, [0:0], "C", "ASM"
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+#if MICROSQUIRT_FULL
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "INVALID", "INVALID", "INVALID", "SPAREADC", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+#else
+#if MICROSQUIRT_MODULE
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "PE1", "INVALID", "PA0", "SPAREADC", "SPAREADC2", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+#else
+ launch_opt_pins = bits, U08, 673, [0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+#endif
+#endif
+ launch_sft_lim = scalar, S16, 674, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, S16, 678, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+ launchcutx = scalar, U08, 683, "", 1, 0, 0, 255, 0
+ launchcuty = scalar, U08, 684, "", 1, 0, 0, 255, 0
+ flats_arm = scalar, S16, 685, "RPM", 1.00000, 0.00000, 0.00, 5000.0, 0
+ flats_sft = scalar, S16, 687, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, S16, 691, "RPM", 1.00000, 0.00000, 0.00, 15000.0, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+#if MICROSQUIRT_FULL
+ N2Oopt_pins = bits, U08, 707,[4:6], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "INVALID", "INVALID" "INVALID"
+ N2Oopt_pins2 = bits, U08, 707,[7:7], "INVALID", "FIDLE+WLED"
+#else
+#if MICROSQUIRT_MODULE
+ N2Oopt_pins = bits, U08, 707,[4:6], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID"
+ N2Oopt_pins2 = bits, U08, 707,[7:7], "PT7+6", "FIDLE+WLED"
+#else
+ N2Oopt_pins = bits, U08, 707,[4:6], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID"
+ N2Oopt_pins2 = bits, U08, 707,[7:7], "IAC1+2", "FIDLE+D15"
+#endif
+#endif
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, 25000, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, 25000, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, -40.0, 230.0, 1 ; * ( 2 bytes)
+ #else
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, -40.0, 150.0, 1 ; * ( 2 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, -40.0, 450.0, 1
+ #else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, -40.0, 300.0, 1
+ #endif
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, 25000, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, 25000, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, 16000, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N20remote_input = bits, U08, 803, [0:0], "Local", "Remote"
+ N20remote_output = bits, U08, 803, [1:1], "Local", "Remote"
+ N20remote_inport = bits, U08, 803, [2:4], "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N20remote_outport = bits, U08, 803, [5:7], "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+
+;doubt the "anti-lag" nitrous will be implemented
+
+;gaps
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], "%", 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, 65535, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+ RotarySplitModeRX8 = bits, U08, 967, [2:2], "Disabled", "RX8 mode"
+ RotarySplitModeOn = bits, U08, 967, [5:5], "Rotary off", "Rotary on"
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, 65535, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+#if INI_VERSION_2
+ testmodelock = scalar, U16, 0, "", 1,0,0,65535,0, noLocalUpdate
+#else
+ testmodelock = scalar, U16, 0, "", 1,0,0,65535,0
+#endif
+#if MICROSQUIRT_FULL
+ testop_coil = bits, U08, 2, [0:2], "CoilA", "CoilB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+#else
+#if MICROSQUIRT_MODULE
+ testop_coil = bits, U08, 2, [0:2], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+#else
+ testop_coil = bits, U08, 2, [0:2], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "INVALID", "INVALID"
+#endif
+#endif
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+ testop_inj = bits, U08, 2, [5:6], "Neither", "Inj1", "Inj2", "Both"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,0
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testmode = bits, U08, 6, [0:1], "Off", "Coils", "Injectors", "INVALID"
+ test_addinj = bits, U08, 6, [4:5], "Neither", "Inj3", "Inj4", "Both"
+ testpw = scalar, U16, 7, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 9, "", 1,0,0,65535,0
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,-40.00, 230.00, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 16 bytes)
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,-40.00, 450.00, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,-40.00, 300.00, 1 ; * ( 16 bytes)
+ #endif
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,65535,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ iactest = bits, U08, 386, [0:0], "run", "home" ; // home the valve
+ iactestlock = bits, U08, 386, [1:1], "Off", "On" ; // Enable
+ idleadvance_on = bits, U08, 387, [0:0], "Off", "On" ;
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, S16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, -40, 230.00, 1
+ #else
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, -40, 150.00, 1
+ #endif
+#else
+ #if EXPANDED_CLT_TEMP
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, -40, 450, 1
+ #else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, -40, 300, 1
+ #endif
+#endif
+ idleadvance_delay = scalar, U08, 396, "sec", 1, 0, 0, 5, 0
+ idleadvance_curve = array, S16, 397, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1
+ idleadvance_loads = array, S16, 405, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+; seq_inj = bits, U08, 415, [0:1], "Untimed injection", "INVALID", "Semi-sequential Siamese", "INVALID" ;
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+; seq_inj = bits, U08, 415, [0:1], "Untimed injection", "INVALID", "Semi-sequential Siamese", "Sequential Siamese" ;
+#if MICROSQUIRT_FULL
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "INVALID" ;
+#else ;inckuding the Microsquirt module
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+#endif
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+
+ ; The following is presently only used by TunerStudio
+
+ ; Used to store sensor calibration settings last written to the controller
+ sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+ sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+ sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+ sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+ sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+
+ ; The index of the selected EGO sensor as defined in the solutions section of the
+ ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+ ; file found in the inc dir of your TunerStudio installation.
+ ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+ ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+ ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 5.0, 25.0, 1 ; (3 bytes)
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ fmap_table1 = array , S16, 864, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_table2 = array , S16, 896, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_table3 = array , S16, 928, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_table2doz = array , S16, 888, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_table3doz = array , S16, 912, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], "%", 0.10000, 0.00000, 0.00, 400.00, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, 16000, 0
+
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "&Basic setup"
+ subMenu = std_injection, "Engine constants"
+ subMenu = secondaryLoad, "More Engine constants"
+ subMenu = ITB_load_switchpoint_curve, "ITB load switchpoints", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = ITB_load_loadvals_curve, "ITB loads at switchpoints", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = injChars, "I&njector Characteristics"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionOptions, "Tach input/&Ignition settings", 0
+ subMenu = moreIgnitionOptions, "More Ignition Settings", 0, { spk_mode0 != 31 }
+ subMenu = advign, "Noise Filtering - EDIS", 0, { spk_mode0 < 2 }
+ subMenu = noisefiltering, "Noise Filtering", 0, {spk_mode0 > 1}
+ subMenu = NoiseFiltercurve, "Noise Filter Curve", 0, { NoiseFilterOpts & 1 }
+ subMenu = triggerWheel, "&Trigger Wheel Settings", 0, { (userlevel > 127) && (spk_mode0 == 4) }
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { RotarySplitModeOn && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { feature4_0VEtblsize }
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = ignitionTbl1, "&Ignition Table1", 0, { (userlevel > 63) && (spk_mode0 != 31) }
+
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { ((dualTable && userlevel > 127) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2", 0, { ((dualTable && userlevel > 127) || (algorithm2 != 0)) && (feature4_0VEtblsize) }
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable && userlevel > 127}
+ subMenu = ignitionTbl2, "Ignition Table2", 0, { (userlevel > 127) && (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = generalSettings, "&General, lags"
+ subMenu = revlimiter, "Rev Limiter"
+ subMenu = revlimiterBins, "CLT-Based Rev Limit", 0, { (RevLimCLTbased & 1) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = egoControl, "&EGO Control"
+ subMenu = userlevel, "Basic/Advanced user"
+
+ menu = "&Startup/idle"
+ subMenu = crsettings, "Cranking settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse", 0
+ subMenu = asePct, "A&SE Percentage", 0
+ subMenu = aseTaper, "AS&E Taper", 0
+ subMenu = idleControl, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_dutycurve, "PWM idle cranking duty", 0, {IdleCtl == 4 || IdleCtl == 6}
+ subMenu = pwmidle_crank_dutyorsteps_stepscurve, "IAC idle cranking steps", 0, {IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 || IdleCtl == 7 || IdleCtl == 8}
+ subMenu = iacBins, "I&dle Steps", 0, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 }
+ subMenu = ipwset, "Idle &PWM Settings", 0, { IdleCtl == 4 || IdleCtl == 6 }
+ subMenu = ipwBins, "I&dle PWM duty Table",0, { IdleCtl == 4 }
+ subMenu = pwmidle_closedloop, "Closed-loop idle valve settings", 0, { IdleCtl == 6 || IdleCtl == 7 || IdleCtl == 8 }
+ subMenu = pwmidle_PID, "Closed-loop idle PID settings", 0, { IdleCtl == 6 || IdleCtl == 7 || IdleCtl == 8 }
+ subMenu = pwmidle_target_curve, "Closed-loop idle target rpm curve", 0, { IdleCtl == 6 || IdleCtl == 7 || IdleCtl == 8 }
+ subMenu = warmup_curve, "&Warmup Enrichment", 0
+
+
+ menu = "Accel Enrich", { userlevel > 127 }
+ subMenu = accelsettings, "Accel Enrich settings"
+ subMenu = std_accel, "&Acceleration Wizard", 0
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls constant", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls constant", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls rpm correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls rpm correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE lag compensation settings", 0, {EAEOption == 3}
+
+ menu = "&Extended", { userlevel > 127 }
+ subMenu = std_port_edit, "&Output port Settings"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = manifoldTempCorr,"MAT Correction table", 0
+ subMenu = MATCorrval, "MAT Correction value", 0
+ subMenu = flexFuelSettings,"&Flex Fuel"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = overrun, "Over Run Fuel cut"
+ subMenu = staging, "Staged Injection"
+ subMenu = stagedTable, "Staged Injection Table", 0, { ((staged_first_param & 0x7) == 5) }
+ subMenu = tacho, "Tacho output"
+ subMenu = launch, "Launch Control"
+ subMenu = tablesw, "Table Switching control"
+ subMenu = veTable3Tbl, "Fuel VE Table 3", 0, {(feature4_0VEtblsize==0) && ((f5_0_tsf>0) || (seq_inj == 3)) && (userlevel > 127) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table 3", 0, {(feature4_0VEtblsize==1) && ((f5_0_tsf>0) || (seq_inj == 3)) && (userlevel > 127) }
+ subMenu = ignitionTbl3, "Ignition Table3", 0, {(f5_0_tss>0) && (userlevel > 127) && (spk_mode0 != 31)}
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = overboost, "Overboost Protection"
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_curve, "Idle Advance Timing", 0, { idleadvance_on }
+
+ menu = "&Advanced", {userlevel > 191 }
+ subMenu = dwellSettings, "D&well battery correction", 0, { spk_mode0 != 31 }
+; subMenu = amcSettings, "Automatic &Mixture Control", 0, { 1 == 0 } ; disabled
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = canparams, "CAN parameters"
+#if INI_VERSION_2
+ subMenu = rmt_port_edit, "Remote Output port Settings", 0, { (can_poll == 3) && (enable_pollports) && (ports_dir) && (port_generic) }
+#endif
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = experimental, "Experimental"
+ subMenu = outputtest, "Output test mode"
+ subMenu = iactest, "Idle valve test"
+ subMenu = injseq, "Injector Sequence"
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = mafdialog, "MAF Options", 0, { algorithm == 5 || algorithm2 == 5 }
+ subMenu = MAFtable1, "MAF correction curve", 0, { algorithm == 5 || algorithm2 == 5 }
+ subMenu = std_separator
+ subMenu = seq_injection, "Sequential injection"
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+#if INI_VERSION_2
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ (feature4_0VEtblsize==0) && usevetrim }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { feature4_0VEtblsize && usevetrim }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ (feature4_0VEtblsize==0) && usevetrim }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { feature4_0VEtblsize && usevetrim }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ (feature4_0VEtblsize==0) && usevetrim && extrainj }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { feature4_0VEtblsize && usevetrim && extrainj }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ (feature4_0VEtblsize==0) && usevetrim && extrainj }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { feature4_0VEtblsize && usevetrim && extrainj }
+#endif
+
+ menuDialog = main
+ menu = "&Tuning"
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = std_accel, "&Acceleration Wizard", 0
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1",0 { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable && (userlevel > 127)) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (userlevel > 127) && (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }
+#if INI_VERSION_2
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { (feature4_0VEtblsize==0) && usevetrim }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { (feature4_0VEtblsize==0) && usevetrim }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { (feature4_0VEtblsize==0) && usevetrim && extrainj }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { (feature4_0VEtblsize==0) && usevetrim && extrainj }
+#endif
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { ((dualTable && (userlevel > 127)) || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (userlevel > 127) && (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }
+#if INI_VERSION_2
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { (feature4_0VEtblsize==1) && usevetrim }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { (feature4_0VEtblsize==1) && usevetrim }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { (feature4_0VEtblsize==1) && usevetrim && extrainj }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { (feature4_0VEtblsize==1) && usevetrim && extrainj }
+#endif
+ subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType >= 3 }
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { egoType >= 3 && dualTable && (userlevel > 127) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Map1", 0, {(userlevel > 63) && (spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Map2", 0, {(userlevel > 127) && (IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Map3", 0, {(userlevel > 127) && (f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Map", 0, {RotarySplitModeOn && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Map", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Map", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Map 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Map 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Map 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menuDialog = main
+ menu = "Tools"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables..."
+ subMenu = std_ms2geno2, "Calibrate &AFR Table..."
+ subMenu = mafTableBurner, "Calibrate &MAF Table..."
+ subMenu = sensorCal, "&Sensor Calibration..."
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_trigwiz, "Tri&gger Wizard...", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt baud rate", 0, { userlevel > 191}
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS-II Info"
+ subMenu = sensorHelp, "Sensor Calibration"
+
+
+;-------------------------------------------------------------------------------
+
+[UserDefined]
+ dialog = battcalib, "Battery Voltage Calibration"
+ field = "Supply voltage at zero ADC count", batt0
+ field = "Supply voltage at max ADC count", battmax
+ field = ""
+ field = "Typical values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings"
+ field = "MAF port", MAFOption
+ field = "Engine size", CID
+
+ dialog = MATCorrval, "MAT correction value"
+ field = "This value allows you to scale down the built in air"
+ field = "density (MAT) correction. "
+ field = "100% means that the PV=nRT ideal gas law is followed."
+ field = "Lower values give less aggressive correction."
+ field = "0% is not allowed as it ignores the physics completely."
+ field = "(0% is interpreted as 100% for backwards compatability)"
+ field = "This value and the table are used at the same time"
+ field = "MAT correction scaling", airden_scaling
+
+ dialog = N2OSystem, "Nitrous System"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O on when above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Input location", N20remote_input, { N2Oopt_2 }
+ field = "Enable input on:", N2Oopt_pins, { N2Oopt_2 && !N20remote_input }
+ field = "Enable input on:", N20remote_inport, { N2Oopt_2 && N20remote_input }
+ field = "Output location", N20remote_output, { N2Oopt_2 }
+ field = "Output pins for stage 1+2", N2Oopt_pins2, { N2Oopt_2 && !N20remote_output }
+ field = "Output pins for stage 1+2", N20remote_outport, { N2Oopt_2 && N20remote_output }
+ ; field = ""
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich which bank in DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ ; field = ""
+ field = "If ST2 off Retard Ignition by" N2OAngle, { N2Oopt_2}
+ ; field = ""
+ field = "Nitrous delay after launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous delay after flat shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+;not yet implemented field = "Nitrous fuel hold on", N2Oholdon, { N2Oopt_2 }
+ field = ""
+
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous System stage 2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "delay after stage1", N2O2delay
+ field = "Retard Ignition by", N2O2Angle
+ field = "Additional Fuel PW @ N2O min rpm", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = boostctlSettings, "Boost Control Settings"
+ field = "Boost control Enabled", boost_ctl_settings_on
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { (boost_ctl_settings_on) && (can_poll == 3) && (enable_pollports) && (ports_dir) }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output polarity", boost_ctl_settings_invert, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_cl}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_cl}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_cl}
+
+ dialog = canparams, "CAN Parameters"
+ topicHelp = canhelp
+ field = "See F1 help"
+ field = "Board Type (not used)", board_type
+ field = "My CAN ID", mycan_id
+ field = "(See help)"
+ field = "Poll remote:", can_poll, {(mycan_id == 0) && (board_type == 1)}
+ field = "Remote CAN ID", can_poll_id, {(mycan_id == 0) && (board_type == 1) && (can_poll > 0)}
+ field = "CAN Polling Master/Slave", can_poll_slave, {(mycan_id == 0) && (board_type == 1) && (can_poll > 0)}
+ field = "Enable ADC polling", enable_pollADC, { (can_poll == 3) }
+ field = "Remote table number for ADC data", poll_tableADC, { (can_poll == 3) && (enable_pollADC) && !(can_poll_slave) }
+ field = "Remote table offset for ADC data", poll_offsetADC, { (can_poll == 3) && (enable_pollADC) && !(can_poll_slave) }
+ field = "Enable PWM polling", enable_pollPWM, { (can_poll == 3) }
+ field = "Remote table number for PWM data", poll_tablePWM, { (can_poll == 3) && (enable_pollPWM) && !(can_poll_slave) }
+ field = "Remote table offset for PWM data", poll_offsetPWM, { (can_poll == 3) && (enable_pollPWM) && !(can_poll_slave) }
+ field = "Remote PWM clock frequency", remotePWMfreq, { (can_poll == 3) && (enable_pollPWM) }
+ field = "Remote PWM clock prescale", remotePWMprescale, { (can_poll == 3) && (enable_pollPWM) }
+ field = "Enable ports polling", enable_pollports, { (can_poll == 3) }
+ field = "Remote table number for ports data", poll_tableports, { (can_poll == 3) && (enable_pollports) && !(can_poll_slave) }
+ field = "Remote table offset for ports data", poll_offsetports, { (can_poll == 3) && (enable_pollports) && !(can_poll_slave) }
+ field = "Remote ports direction", ports_dir, { (can_poll == 3) && (enable_pollports) }
+ field = "Remote port 1 type", port1_type, { (can_poll == 3) && (enable_pollports) }
+ field = "Remote port 2 type", port2_type, { (can_poll == 3) && (enable_pollports) }
+ field = "Remote port 3 type", port3_type, { (can_poll == 3) && (enable_pollports) }
+ field = "Use for generic remote spare port", port_generic, { (can_poll == 3) && (enable_pollports) && (ports_dir) }
+
+ dialog = injseq, "Injector Sequence"
+ field = "!FOR EXPERT USE ONLY"
+ field = ""
+ field = "Enable initial values", feature3_3
+ field = "Injector sequence start", trig_init, {feature3_3 }
+ field = "Injector time mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "!Sequential injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed timing or table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number of timing values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed injection timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed injection timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed injection timing 1 when staging on", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed injection timing 2 when staging on", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking injection timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking injection timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE trim tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = ""
+ field = "!Injector drivers", extrainj
+ field = "Bank 3"
+ field = "Injector3 Open Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Open Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+ field = ""
+ field = "!Sequential Siamese Hybrid Mode"
+ field = "!Single pulse activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "!Hysteresis on single pulse activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed injection timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed injection timing 3 when staging on", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch location", tsf_remote, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "Remote port", tsf_remote_port, { f5_0_tsf && !f5_0_tsf_opt && tsf_remote }
+ field = "rpm greater than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "kPa greater than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS greater than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch location", tss_remote, { f5_0_tss && !f5_0_tss_opt }
+ field = "Remote port", tss_remote_port, { f5_0_tss && !f5_0_tss_opt && tss_remote }
+ field = "rpm greater than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "kPa greater than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS greater than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = experimental, "Experimental settings"
+ field = "Vanos cam position debugging", feature4_0vanos
+ field = "Enable status4 for tooth"
+ field = "and status5 for time after tooth"
+
+ dialog = outputtest, "Output test modes"
+ field = "Enter 12345 and hit Burn", testmodelock
+ field = ""
+ field = "Fuel pump", testop_fp
+ field = "Test mode", testmode
+ field = "Output interval", testint
+ field = "Coil output to test", testop_coil, { testmode == 1 }
+ field = "Dwell", testdwell, { testmode == 1 }
+ field = "Injector channel to test", testop_inj, { testmode == 2 }
+ field = "Additional Injector channel to test", test_addinj, { (testmode == 2) && extrainj }
+ field = "Pulsewidth", testpw, { testmode == 2 }
+ field = "Injector PWM parameters", testop_pwm, { testmode == 2 && !extrainj}
+ field = "PWM Current Limit", testinjPwmP, { testmode == 2 && testop_pwm && !extrainj}
+ field = "PWM Time Threshold", testinjPwmT, { testmode == 2 && testop_pwm && !extrainj}
+ field = "Injector PWM Period", testinjPwmPd , { testmode == 2 && testop_pwm && !extrainj}
+ field = "Total number of injections (e.g. 65535)", testinjcnt
+ field = "Only Burn once. Turn off power when finished"
+
+ dialog = iactest, "Idle valve test"
+ field = "Idle testing enable", iactestlock
+ field = ""
+ field = "Move to home position", iactest, {iactestlock}
+ field = "iac home step", iachometest, {iactestlock}
+ field = "iac step", iacpostest
+ field = "Set the steps before enabling testing"
+ field = "For PWM valves enter 0-100, for stepper use 0-255"
+
+ dialog = EAElagcomp, "EAE lag compensation"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ field = "Enable Rotary Mode", RotarySplitModeOn
+ field = "See also Rotary Split Table"
+ field = "Output mode", RotarySplitModeFD, { RotarySplitModeOn }
+ field = "RX8 mode", RotarySplitModeRX8, { RotarySplitModeOn }
+ field = "Allow negative split?", RotarySplitModeNeg, { RotarySplitModeOn }
+
+ dialog = advign, "Noise filtering"
+;not used field = "Predictor Gain", Dtpred_Gain
+ field = "False trigger method", feature4_0ftrig, {(spk_mode0 < 4)}
+ field = "Time Mask", ICISR_tmask, {(feature4_0ftrig == 3) && (spk_mode0 < 4)}
+ field = "Percentage Mask", ICISR_pmask, {(feature4_0ftrig == 3) && (spk_mode0 < 4)}
+ field = "#Next-Pulse Tolerance"
+ field = " Cranking", crankTolerance, {spk_mode0 < 2}
+ field = " After-start", asTolerance, {spk_mode0 < 2}
+ field = " Normal Running", pulseTolerance, {spk_mode0 < 2}
+
+ dialog = noisefiltering, "Noise filtering"
+ field = "See the web help for more information about noise filtering"
+; note that use of this depends on whether the wheel is single/double edged
+ field = "!PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach period rejection", NoiseFilterOpts1
+ field = "Tach interrupt masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Polarity checking", NoiseFilterOpts3, {NoiseFilterOpts == 0}
+
+; note that use of this depends on whether the wheel uses a cam and/or if it is single/double edged
+ field = "!SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach period rejection", secondtrigopts1
+ field = "Tach interrupt masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Polarity checking", secondtrigopts3, { secondtrigopts == 0 }
+
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+
+ dialog = launch, "Launch Control"
+ field = "Launch control option:", launch_opt_on
+ field = ""
+ field = "Input on:", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch retard above", launch_sft_lim, {launch_opt_on >0}
+ field = "Retard to", launch_sft_deg, {launch_opt_on >0}
+ field = "Enable Launch when TPS above ", launch_tps, { launch_opt_on >0}
+ field = "Launch hard limit", launch_hrd_lim, { launch_opt_on >0}
+ field = "Limiter method", launchlimopt, { launch_opt_on >0}
+ field = "Cut X sparks", launchcutx, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "from Y events", launchcuty, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "Flat shift arming rpm", flats_arm, { launch_opt_on >1 }
+ field = "Flat shift mode retard above", flats_sft, { launch_opt_on >1 }
+ field = "Retard to : ", flats_deg, { launch_opt_on >1 }
+ field = "Flat shift hard rev limit", flats_hrd, { launch_opt_on >1 }
+
+ dialog = tacho, "Tachometer output"
+ topicHelp = tachohelp
+ field = "Tacho output enabled", tacho_opt80
+ field = ""
+ field = "Output on:", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+ field = ""
+ field = "Caution.. be sure nothing else is using this output"
+ field = "Press F1 for more pin information"
+
+ dialog = overrun, "Over Run Fuel Cut"
+ topicHelp = Chelp8
+ field = "Over Run Fuel Cut", OvrRunC
+ field = "Cut fuel when:"
+ field = "RPM greater than:", fc_rpm, { OvrRunC }
+ field = "and KPa lower than: ", fc_kpa, { OvrRunC }
+ field = "and TPS lower than: ", fc_tps, { OvrRunC }
+ field = "and coolant greater than:", fc_clt, { OvrRunC }
+ field = "after delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO after fuel return:", fc_ego_delay, { OvrRunC }
+ field = "Return fuel when RPM less than:", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, "Staged Injection"
+ field = "!Staged injection first parameter", staged_first_param
+ field = "!Primary injector size", staged_pri_size, { staged_first_param }
+ field = "!Secondary injector size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging gradual transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging transition events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging primary reduction delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging secondary enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary staging threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary staging hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged injection second parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary staging threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary staging hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary staging logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary load parameters"
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP", loadMult
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR table load", afrload
+ field = "EAE curve load", eaeload
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = ""
+ field = "Cut X sparks", overboostcutx, { OverBoostOption > 1 }
+ field = "From Y events", overboostcuty, { OverBoostOption > 1 }
+
+
+ dialog = ipwset, "PWM idle settings"
+ field = "Warmup only mode"
+ field = "Set duty vs. temp in the duty table"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl != 6 && IdleCtl != 7 }
+ field = ""
+ field = "Valve mode", pwmidleset_inv
+ field = "PWM idle port", pwmidle_port
+ field = "Valve frequency 30.5 Hz * this setting", pwmidle_freq, { !pwmidle_port }
+ field = "@ 156Hz the valve works in 2% steps"
+
+ dialog = userlevel, "Basic/ Intermediate/ Extended/ Advanced user"
+ field = "User level", userlevelbits
+ field = ""
+ field = "Use this to enable or disable more advanced features"
+ field = "New users are advised to start with basic as the more"
+ field = "complex features will be turned off, protecting you"
+ field = "from potential mistaken settings"
+
+ dialog = crsettings, "Cranking settings"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking fuel pulse rate ", altcrank
+ field = ""
+ field = "Engines with lots of cylinders such as V12 may find"
+ field = "that the injecting fuel on every tach event gives"
+ field = "difficult hot starting. This option allows the fuel"
+ field = "to be injected on alternate events (with twice the"
+ field = "pulse width)"
+
+
+ dialog = generalSettings, "General Settings"
+; topicHelp = "http://www.megasquirt.info/megatune.htm#sg"
+ field = "Dual Table Use", dualTable
+ field = "Barometric Correction", baroCorr
+ field = "Realtime baro port", rtbaroport, {baroCorr == 2}
+ field = "Upper limit", baro_upper, {baroCorr == 1}
+ field = "Lower limit", baro_lower, {baroCorr == 1}
+ field = "Default baro", baro_default, {baroCorr < 2}
+
+ field = "#Input Smoothing Lag Factors"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery Lag Factor", adcLF
+ field = ""
+
+ field = "MAP sample window", mapsample_window
+ field = "MAP sample angle", mapsample_angle
+ field = "No. sample events", mapsample_opt1
+
+ field = ""
+ field = "Fuel table size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = revlimiter, "Rev Limiter"
+ field = "Algorithm", RevLimOption
+ field = "Rev Limiter CLT based", RevLimCLTbased
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption & 1 }
+ field = "Soft Rev Limit", RevLimNormal1, { RevLimCLTbased == 0 }
+ field = "Hard Rev Limit", RevLimNormal2, { RevLimCLTbased == 0 }
+ field = "Rev Limit Adder", RevLimRpm2, { RevLimCLTbased & 1 }
+ field = "Rev Limit TPS bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "RPM when in TPS bypass", RevLimTPSbypassRPM, { RevLimCLTbased & 1 }
+ field = "Cut X sparks", RevLimcutx, { RevLimOption & 4 }
+ field = "from Y events", RevLimcuty, { RevLimOption & 4 }
+
+ dialog = flexFuelSettings, "Flex Fuel Settings"
+ topicHelp = "http://www.megasquirt.info/flexfuel.htm"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Flex Fuel port location", flexFuelRemote, { can_poll && enable_pollPWM }
+ field = "Sensor port", flexport, { (flexFuel > 0) && !flexFuelRemote }
+ field = "Remote sensor port", flexportRemote, { (flexFuel > 0) && flexFuelRemote }
+ field = "Frequency (low)", fuelFreq0, { flexFuel > 0 }
+ field = "Fuel Correction (low)", fuelCorr0, { flexFuel > 0 }
+ field = "Timing Correction (low)", fuelSpkDel0, { flexFuel > 0 }
+ field = "Frequency (high)", fuelFreq1, { flexFuel > 0 }
+ field = "Fuel Correction (high)", fuelCorr1, { flexFuel > 0 }
+ field = "Timing Correction (high)", fuelSpkDel1, { flexFuel > 0 }
+
+
+ dialog = accelsettings, "Accel enrich settings"
+ field = "#AE RPM Scaling"
+ field = "Low RPM Threshold", ae_lorpm
+ field = "High RPM Threshold", ae_hirpm
+ field = ""
+ field = "Enhanced Accel Enrichment", EAEOption
+
+ dialog = injChars, "Injector Characteristics"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#sn"
+ field = "Bank 1"
+ field = "Injector Open Time", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "PWM Current Limit", injPwmP, { !extrainj }
+ field = "PWM Time Threshold", injPwmT, { !extrainj }
+ field = "Injector PWM Period", injPwmPd, { !extrainj }
+ field = "Bank 2"
+ field = "Specific bank 2 setting", injctl
+ field = "Injector2 Open Time", injOpen2, { injctl } ; crashes Megatune
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "PWM Current Limit", injPwmP2, { injctl && !extrainj }
+ field = "PWM Time Threshold", injPwmT2, { injctl && !extrainj }
+ field = "Injector PWM Period", injPwmPd2, { injctl && !extrainj }
+
+ dialog = egoControl, "EGO Control"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Ignition Events per Step", egoCount, { egoType > 0 }
+;these seem to break MT
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above Coolant", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, "Ignition Options"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#si"
+ field = "#General Ignition"
+ field = "!Spark mode(dizzy, EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ ;, {spk_mode0 ==2 || spk_mode0 ==3 || spk_mode0 ==12 || spk_mode0 ==14}
+ field = "Angle between main and return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire small angle", OddFireang, { (engineType == 1)};
+ field = "GM HEI/DIS options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "420A/NGC alternate cam", spk_conf2_ngc, {(spk_mode0==6) && (nCylinders==4)}
+ field = "Use cam signal if available*", spk_conf2_cam, {spk_mode0 > 4}
+ field = "Oddfire phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "!Ignition Input Capture", ICIgnCapture ; !
+ field = "!Spark Output", spkout_hi_lo, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+#if MICROSQUIRT_FULL
+#else
+#if MICROSQUIRT_MODULE
+#else
+ field = "Spark A output pin (D14 preferred)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+#endif
+#endif
+ dialog = moreIgnitionOptions, "More Ignition Options"
+ field = "Fixed Advance", timing_flags
+; field = "Use Prediction", use_prediction, {spk_mode0 == 2} ; only works for dizzy
+ field = "Use Prediction", use_prediction
+ field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell type", dwellmode
+ field = "Maximum Dwell Duration", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Acceleration Compensation", dwellAcc, {(spk_mode0 >1) && (dwellmode==0)}
+ field = "Maximum Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Overdwell protection", feature4_0maxdwl
+ field = "Underdwell protection", feature4_0mindwl
+
+ dialog = triggerWheel, "Trigger Wheel Settings"
+ topicHelp = trighelp
+ field = "Trigger wheel arrangement", spk_config_trig2
+ field = "!Trigger Wheel Teeth", triggerTeeth
+ field = "!Missing Teeth", No_Miss_Teeth, {spk_config_trig2 != 2}
+ field = "!Tooth #1 Angle", Miss_ang
+ field = "!Wheel speed", spk_config_camcrank
+ field = "!Second trigger active on", spk_config_trig2l, {spk_config_trig2 & 0x2}
+
+ field = "!and every rotation of..", spk_config_resetcam, {(spk_config_trig2 & 0x3) == 0x2}
+ field = "(see F1 help)"
+ field = "!Red settings require an MS-II reboot!"
+
+ dialog = idleControl, "Idle Control"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#sd"
+ field = "Algorithm", IdleCtl
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Time Step Size", IACtstep, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 || IdleCtl == 7 || IdleCtl == 8 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 2 || IdleCtl == 7 }
+ field = "Minimum # steps to move", IACminstep, { IdleCtl == 2 || IdleCtl == 3 || IdleCtl == 5 || IdleCtl == 7 || IdleCtl == 8 }
+ field = "!Start Value", IACStart, { IdleCtl > 1 && IdleCtl != 4 && IdleCtl != 6} ; !
+ field = "Crank-to-Run Taper Time", IACcrankxt, { IdleCtl > 1 && IdleCtl != 4 && IdleCtl != 6 && IdleCtl != 7 && IdleCtl != 8 }
+ field = "Hysteresis", IdleHyst, { IdleCtl > 0 && IdleCtl != 4 && IdleCtl != 6 && IdleCtl != 7 && IdleCtl != 8 }
+ field = "#Time-Based After Start"
+ field = " Cold Temperature", IACcoldtmp, { IdleCtl > 1 && IdleCtl != 4 && IdleCtl != 6 && IdleCtl != 7 && IdleCtl != 8 }
+ field = " Cold Position", IACcoldpos, { IdleCtl > 1 && IdleCtl != 4 && IdleCtl != 6 && IdleCtl != 7 && IdleCtl != 8 }
+ field = " Cold Taper Time", IACcoldxt, { IdleCtl > 1 && IdleCtl != 4 && IdleCtl != 6 && IdleCtl != 7 && IdleCtl != 8 }
+ field = "!Red settings require an MS-II reboot!"
+
+ dialog = pwmidle_closedloop, "Closed Loop Idle Valve Settings"
+ field = "Idle Open Duty", pwmidle_open_duty, { IdleCtl == 6 }
+ field = "Idle Open Steps", pwmidle_open_steps, { IdleCtl == 7 || IdleCtl == 8 }
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty, { IdleCtl == 6 }
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps, { IdleCtl == 7 || IdleCtl == 8 }
+ field = "Idle Activation RPM adder", pwmidle_engage_rpm_adder
+ field = "Idle Activation TPS threshold", pwmidle_tps_threshold
+ field = "Dashpot adder", pwmidle_dp_adder, { IdleCtl == 6 }
+ field = "Dashpot adder", pwmidle_dp_adder_steps, { IdleCtl == 7 || IdleCtl == 8 }
+ field = "NOTE: Close delay of 0 means do not close"
+ field = "Close delay", pwmidle_close_delay
+ field = "Leave valve closed above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For this number of seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+
+ dialog = pwmidle_PID, "Closed Loop Idle PID Settings"
+ field = "Min Duty for PID", pwmidle_min_duty, { IdleCtl == 6 }
+ field = "Min Steps for PID", pwmidle_min_steps, { IdleCtl == 7 || IdleCtl == 8 }
+ field = "RPM with valve closed", pwmidle_min_rpm
+ field = "RPM with valve open", pwmidle_max_rpm
+ field = "PID delay", pwmidle_pid_wait_timer
+ field = "Crank to run taper", pwmidlecranktaper
+ field = "PID ramp to target time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = ""
+ field = "PID Controller Gains"
+ field = "Proportional Gain", pwmidle_Kp
+ field = "Integral Gain", pwmidle_Ki
+ field = "Derivative Gain", pwmidle_Kd
+ field = ""
+ field = "PID lockout detection"
+ field = "PID lockout rpmDOT threshold", pwmidle_rpmdot_threshold
+ field = "PID lockout max decel load", pwmidle_decelload_threshold
+ field = ""
+ field = "PID disable params"
+ field = "Use so that engaging clutch without throttle"
+ field = "Does not leave PID running"
+ field = "PID disable RPMdot", pwmidle_rpmdot_disablepid
+
+ dialog = sensorCal, "Sensor Calibration"
+ topicHelp = sensorHelp
+#if INI_VERSION_2
+ settingSelector = "Common Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7, baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260, baro0=10, baromax=260
+ settingOption = "MPXH6300", map0=1.1, mapmax=315.5, baro0=1.1, baromax=315.5
+ settingOption = "GM 3-BAR", map0=1.1, mapmax=315.5, baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5, baro0=3.5, baromax=416.5
+#endif
+ field = "#MAP Sensor (F1 for common values)"
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+ field = "#Barometer Sensor (usually identical to MAP)"
+ field = "Value at 0.0 volts", baro0
+ field = "Value at 5.0 volts", baromax
+ field = "#Barometric Correction"
+ field = "At total vacuum ", bcor0
+ field = "Rate", bcormult
+
+
+ dialog = knockSettings, "Knock Sensor Settings"
+ field = "Knock Control", knk_option
+ field = "Knock input location", knk_remote, { knk_option && enable_pollports }
+ field = "Knock input pin", knkport, { (knk_option >0) && !knk_remote }
+ field = "Remote Knock input", knkport_remote, { (knk_option >0) && knk_remote }
+ field = "#Detection"
+ field = "Knock indicated by:", knkDirection, { knk_option > 0 }
+ field = "Pullup/down on input", knkpull, { knk_option > 0 }
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM window low", knk_lorpm, { knk_option > 0 }
+ field = "RPM window high", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ field = "Idle advance on", idleadvance_on
+ field = "Go to idle advance when:"
+ field = "TPS is below:", idleadvance_tps, { idleadvance_on }
+ field = "and RPM is below:", idleadvance_rpm, { idleadvance_on }
+ field = "and load is above:", idleadvance_load, { idleadvance_on }
+ field = "and CLT is above:", idleadvance_clt, { idleadvance_on }
+ field = "and after delay:", idleadvance_delay, { idleadvance_on }
+
+dialog = setbaud, "Megasquirt baud rate"
+ field = "#Advanced users only."
+ field = "Adjust MT rate to match and reset MS."
+ field = "Megasquirt baud rate", baud
+
+dialog = userdefined, "user defined menu"
+ field = "Feature enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+
+ help = trighelp, "Trigger wheel settings"
+ text = "Choose from a"
+ text = "
-single wheel with missing teeth"
+ text = "
-a wheel with missing teeth and a cam wheel"
+ text = "
Dual wheel -a non missing main wheel and a second wheel"
+ text = "
"
+ text = "For missing tooth wheels, the trigger wheel teeth is the number of theoretical teeth"
+ text = "i.e. a wheel called '60-2' has 60 theoretical teeth although it physically has two missing and you"
+ text = "will count 58"
+ text = "
For non-missing tooth wheels count every tooth (whether on crank or cam)"
+ text = "
e.g. Nippondenso wheels have 24 teeth, as does LS1"
+ text = "
Tooth #1 Angle is necessary to achieve correct timing."
+ text = "
Wheel speed is related to how you wheel is physically mounted on the engine."
+ text = "A typical CAS (like the Nippondenso one) runs at cam speed. A normal single wheel like 60-2 will almost always be mounted to the"
+ text = "front pulley/damper assembly and run at crank speed"
+ text = "
The second trigger active on setting refers to the electrical wiring of your input. For VR type sensors this must correspond to the"
+ text = "zero crossing point of your input. LS1 type engines can use 'rising and falling' as the cam signal changes polarity on each crank rotation"
+ text = "The next setting specifies how often the second trigger signal happens (if used). On Nippondenso CAS and LS1 this is every crank rotation, on"
+ text = "Installs with a single pulse per cam rotation this will be set to 'cam'"
+
+
+ help = canhelp, "CAN parameters help"
+ text = "In a CAN setup each board must have a different CAN ID"
+ text = "
For simplicity consider that the serial cable, computer and Megatune are connected to the MS2"
+ text = "
"
+ text = "
Board type should be MS2 (this isn't actually used by the code)"
+ text = "
The master board is CAN ID 0"
+ text = "
Poll remote determines whether we should get data from a remote board or not."
+ text = "
Supported boards at this time are GPIO (1.041 doesn't return any data by default) or MS2/Extra in slave mode"
+ text = "
The first remote board is typically CAN ID 1, but you MUST set this on the remote board"
+ text = "
"
+ text = "
To set an MS2 running MS2/Extra to be in slave mode and transmit data to a master MS2"
+ text = "
Connect the serial cable to the slave board and set its CAN ID to 1."
+ text = "
(If you change the CAN id of the MS2 you will need to change your tuning software to match it. If you simply change the CANid"
+ text = "and then reboot the MS2 you will suddenly lose communications - this isn't a bug - fix your ini! A reflash the code is a lazy way of"
+ text = "returning the unit to standard"
+ text = "
Connect the serial cable to the master board, set its CAN ID to 0 and 'poll remote' to 'MS2/Extra slave'"
+ text = "
Make the physical CAN connection between the boards"
+ text = "
After a reset you can then see the ADC ports from the slave MS2 displayed in Megatune connected to the master MS2"
+ text = "via the gauges GPIOADCgauge etc."
+ text = "
"
+ text = "
Presently this can be used to log 8 additional ADC channels and/or to support realtime baro, knock and dual wideband."
+
+ help = tachohelp, "Tacho output pin info"
+ text = "V2.2 / V3.0 cross reference"
+ text = "
V2.2 - V3.0"
+ text = "
X2 - JS0"
+ text = "
X3 - JS1"
+ text = "
X4 - JS2"
+ text = "
X5 - JS3"
+ text = "
X6 - JS4"
+ text = "
X7 - JS5"
+ text = "
CPU Pin 6 - JS6"
+ text = "
CPU Pin 10 - JS7"
+ text = "
CPU Pin 11 - JS8"
+ text = "
JP1 Pin 6 - JS9"
+ text = "
JP1 Pin 5 - JS10"
+ text = "
JP1 Pin 4 - JS11"
+
+ help = sensorHelp, "Sensor Calibration"
+ webHelp = "http://www.megasquirt.info/megatune.htm#os"
+ text = "MAP Sensor Calibration
"
+ text = "
"
+ text = "For the\tMPX4115 use\t10.6 and \t121.7
"
+ text = "\tMPX4250\t\t10.0\t260.0
"
+ text = "\tMPXH6300\t1.1\t315.5
"
+ text = "\tGM 3-BAR\t1.1\t315.5
"
+ text = "\tMPXH6400\t3.5\t416.5
"
+ text = "
"
+ text = "(GM 3-bar data from Dave Hartnell, http://www.not2fast.com/electronics/component_docs/MAP_12223861.pdf)
"
+ text = "
"
+ text = "\tSensor type\tvLo\tpLo\tvHi\tpHi\tvRef
"
+ text = "\tMPX4115 \t0.204 v\t15 kPa\t4.794 v\t115 kPa\t5.100 v
"
+ text = "\tMPX4250 \t0.204 v\t20 kPa\t4.896 v\t250 kPa\t5.100 v
"
+ text = "\tMPXH6300\t0.306 v\t20 kPa\t4.913 v\t304 kPa\t5.100 v
"
+ text = "\tGM 3-BAR\t0.631 v\t40 kPa\t4.914 v\t304 kPa\t5.100 v
"
+ text = "\tMPXH6400\t0.200 v\t20 kPa\t4.800 v\t400 kPa\t5.000 v
"
+ text = "
"
+ text = "In general, use values derived from these equations:
"
+ text = "
"
+ text = "\tm = (pHi-pLo)/(vHi-vLo)
"
+ text = "\tpv1 = pLo - m * vLo
"
+ text = "\tpv2 = pv1 + m * vRef
"
+ text = "
"
+ text = "References:
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPX4250A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6300A.pdf
"
+ text = "\thttp://www.freescale.com/files/sensors/doc/data_sheet/MPXH6400A.pdf
"
+ text = "
"
+ text = "Barometer Sensor Calibration
"
+ text = "
"
+ text = "If your system has an external barometer sensor, separate from the MAP"
+ text = "sensor, then use these values to calibrate it properly. If you have"
+ text = "a standard MS installation, then copy your MAP sensor values here.
"
+ text = "
"
+ text = "Barometric Correction Calibration
"
+ text = "
"
+ text = "Correction for barometric effects is performed using the linear function below.
"
+ text = "
"
+ text = "\tcorrection = correction_0 + (rate * barometer) / 100
"
+ text = "
"
+ text = "'At total vacuum' contains the total correction at a barometer reading"
+ text = "of 0 kPa (you are on the moon). The 'Rate' contains the percentage per 100"
+ text = "kPa to scale the barometer value. Using the default values of 147 and -47,"
+ text = "we see that for a barometer of 100 kPa, we have 100% correction.
"
+ text = "
"
+ text = "\tcorrection = 147 + (-47*100) / 100 = 100%"
+
+
+ help = helpGeneral, "MS-II General Help"
+ webHelp = "http://www.megasquirt.info/ms2/"
+ text = "Al Grippo and Bruce Bowling have created MegaSquirt-II, which"
+ text = "is a plug-in daughter card that replaces the 8-bit MC68HC908GP32"
+ text = "with a 16-bit MC9S12C32 processor. MegaSquirt-II is an intermediate"
+ text = "step from the original MegaSquirt towards UltraMegaSquirt.
"
+ text = "
"
+ text = "It is basically a plug-in processor card that has the MC9S12C32"
+ text = "processor plus support hardware as well as a stepper motor chip,"
+ text = "and an ignition module controller. The embedded code is written"
+ text = "in C, rather than assembly language, so it should be more accessible"
+ text = "to more programmers (Stephane Carrez has ported GCC to the HC12"
+ text = "processor so, although it doesn't use the full 9S12 instruction"
+ text = "set, we are able to use his version to write code for the MS-II).
"
+ text = "
"
+ text = "For current documentation, click the Web Help button below, or for"
+ text = "support questions visit http://www.msefi.com/."
+
+;-------------------------------------------------------------------------------
+
+#if INI_VERSION_2
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote Output port Settings"
+; topicHelp = "http://www.megamanual.com/mt28.htm#sp"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+#endif
+;-------------------------------------------------------------------------------
+
+[CurveEditor]
+ curve = MAFtable1, "MAF Correction Table (to alter default MAF curve)"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Adjustment"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Ignition Advance Offset"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#ac"
+ columnLabel = "Coolant", "Offset"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "IAC Step Bins"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#ad"
+ columnLabel = "Coolant", "IAC Steps"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Duty Cycle"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#ap"
+ columnLabel = "Coolant", "Idle PWM duty"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulsewidth"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "Coolant", "Prime PW"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulsewidth%"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "Coolant", "Cranking PW%"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "Coolant", "Afterstart"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment Taper"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "Coolant", "Taper"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, mat
+ yBins = matRetard
+ gauge = matGauge
+
+; curve = knockThreshold, "Knock Threshold"
+;; topicHelp = "http://www.megasquirt.info/xxx"
+; columnLabel = "RPM", "Threshold"
+; xAxis = 0, 6000, 7
+; yAxis = 0, 5.0, 6
+; xBins = knk_rpm, rpm
+; yBins = knk_thresh
+; gauge = tachometer
+
+ curve = barometerCorr, "Non-Linear Barometric Correction"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = -30, 30, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = manifoldTempCorr, "Non-Linear MAT Correction"
+; topicHelp = "http://www.megasquirt.info/xxx"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "Enhanced Accel Enrichment Added-to-Walls constant"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "Enhanced Accel Enrichment Sucked-from-Walls constant"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "Enhanced Accel Enrichment AWC RPM %"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, 8000, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "Enhanced Accel Enrichment SOC RPM %"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, 8000, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "Enhanced Accel Enrichment SOW CLT %"
+ columnLabel = "CLT", "Correction"
+ #if EXPANDED_CLT_TEMP
+ xAxis = 0, 350, 12
+ #else
+ xAxis = 0, 220, 12
+ #endif
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "Enhanced Accel Enrichment AWW CLT %"
+ columnLabel = "CLT", "Correction"
+ #if EXPANDED_CLT_TEMP
+ xAxis = 0, 350, 12
+ #else
+ xAxis = 0, 220, 12
+ #endif
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise filter curve"
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, 10000, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+ columnLabel = "Coolant", "WUE %"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 9
+ #else
+ xAxis = -40, 220, 9
+ #endif
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_curve, "Idle Advance Timing"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 4
+ yAxis = -10, 90, 4
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed loop idle target rpms"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+ topicHelp = "http://www.megasquirt.info/megatune.htm#ap"
+ columnLabel = "Coolant", "Rev limit"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 8
+ #else
+ xAxis = -40, 220, 8
+ #endif
+ yAxis = 0, 8000, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-based crank duty"
+ columnLabel = "Coolant", "Duty %"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 4
+ #else
+ xAxis = -40, 220, 4
+ #endif
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-based crank steps"
+ columnLabel = "Coolant", "Steps"
+ #if EXPANDED_CLT_TEMP
+ xAxis = -40, 350, 4
+ #else
+ xAxis = -40, 220, 4
+ #endif
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB load at TPS switchpoint"
+ columnLabel = "RPM", "Load"
+ xAxis = 0, 9000, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB load TPS switchpoints"
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, 9000, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "VE Table 1", 5
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "VE Table 2", 5
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "VE Table 3", 5
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+
+ upDownLabel = "MORE", "LESS"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "VE Table 1", 5
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "VE Table 2", 5
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "VE Table 3", 5
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+ gridHeight = 3.0
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+ gridHeight = 1.0
+#endif
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+ gridHeight = 3.0
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+ gridHeight = 1.0
+#endif
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Spark Advance Table1", 3
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Spark Advance Table2", 3
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Spark Advance Table1", 4
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table1", 4
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table2", 4
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table3", 2
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridHeight = 3.0
+ gridOrient = 250, 0, 340
+
+;std 16x16
+#if INI_VERSION_2
+ table = veTrim1Tbl, veTrim1Map, "VE Trim Table 1", 4
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "VE Trim Table 2", 6
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "VE Trim Table 3", 6
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "VE Trim Table 4", 6
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "VE Trim Table 1", 4
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "VE Trim Table 2", 6
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "VE Trim Table 3", 6
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "VE Trim Table 4", 6
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+
+ upDownLabel = "RICHER", "LEANER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+#endif
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty", 2
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Targets", 2
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridHeight = 2.0
+ gridOrient = 250, 0, 340
+
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "IAC position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Gair/aircor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing pred err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+ rpmdot = rpmdot, "rpmdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ tpsdot = tpsDOT, "tpsdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ mapdot = mapDOT, "mapdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ cltGauge = coolant, "Coolant Temp", "°C", -40, 230, -100, -100, 170, 200, 0, 0
+ #else
+ cltGauge = coolant, "Coolant Temp", "°C", -40, 150, -100, -100, 95, 105, 0, 0
+ #endif
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ #if EXPANDED_CLT_TEMP
+ cltGauge = coolant, "Coolant Temp", "°F", -40, 450, -100, -100, 350, 400, 0, 0
+ #else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, 300, -100, -100, 200, 220, 0, 0
+ #endif
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 0, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ ignloadGauge = ignload, "Ign Load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ eaeloadGauge = eaeload1, "EAE load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ afrloadGauge = afrload1, "AFR load", "%", 0, 255, 0, 20, 200, 245, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, 650, 0, 200, 480, 550, 0, 0
+ mafMapGauge = mafmap, "MAFMAP", "kPa", 0, 400, -1, -1, 999, 999, 0, 0
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = pulseWidth2Gauge
+; gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+; gauge7 = dwellGauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+ gauge8 = injadv2Gauge
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ ; Look in the new colors24b.ini for the basic ones, add more or tell me what to add.
+
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, red, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, red, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 0b00000100}, "-", "Config Error", white, black, red, black
+ indicator = { status1 & 0b00000001}, "-", "Need Burn", white, black, red, black
+ indicator = { status1 & 0b00000010}, "-", "Lost Data", white, black, red, black
+ indicator = { status1 & 0b00001000}, "Not synced", "Synced", red, black, green, black
+;optional ones
+ indicator = { status2 & 0b10000000}, "-", "CL idle", white, black, green, black
+ indicator = { status1 & 0b00100000}, "-", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 0b01000000}, "-", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 0b00000001}, "-", "N2O 1", white, black, green, black
+ indicator = { status2 & 0b00000010}, "-", "N2O 2", white, black, green, black
+ indicator = { status2 & 0b00000100}, "-", "Hard limit", white, black, red, black
+ indicator = { status2 & 0b00001000}, "-", "Launch", white, black, green, black
+ indicator = { status2 & 0b00010000}, "-", "Flat shift", white, black, green, black
+ indicator = { status2 & 0b00100000}, "-", "Spark cut", white, black, red, black
+ indicator = { status2 & 0b01000000}, "-", "Over boost", white, black, red, black
+ indicator = { knock }, "-", "Knock", white, black, red, black
+ indicator = { status3 & 0b00000010}, "-", "T-log", white, black, red, black
+
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+ #if EXPANDED_CLT_TEMP
+ coolantBar = -40, 230
+ #else
+ coolantBar = -40, 150
+ #endif
+ matBar = -40, 100
+#else
+ #if EXPANDED_CLT_TEMP
+ coolantBar = -40, 450
+ #else
+ coolantBar = -40, 300
+ #endif
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\x00\x07\x00\x00\x00\xA9"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+; was one byte longer for checksum
+#endif
+ ochBlockSize = 169 ; without checksum byte
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "s", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "s", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+; tpsADC = { tps*10.23 }, "ADC" ; Fake for calibrator and file indexing.
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, S16, 32, "v", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 1.000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 1.000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.39063, 0.0
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ tpsDOT = scalar, S16, 58, "%/s", 0.100, 0.0
+ mapDOT = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafmap = scalar, S16, 64, "?", 1.000, 0.0
+ fuelload = scalar, S16, 66, "%", 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, "%", 0.100, 0.0
+ ignload = scalar, S16, 90, "%", 0.100, 0.0
+ ignload2 = scalar, S16, 92, "%", 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "s", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "s", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", 0.010, 0.0
+ eaeload1 = scalar, S16, 160, "%", 0.1, 0.0
+ afrload1 = scalar, S16, 162, "%", 0.1, 0.0
+ rpmdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 was 144
+
+; checksum scrapped for now to always enable speedup code for realtime data
+ accDecEnrich = { accelEnrich + (tpsaccden ? tpsfuelcut : 100) }, "%"
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-twoStroke) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-twoStroke) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = throttle, "TP", int, "%d"
+#if NARROW_BAND_EGO
+ entry = egoVoltage, "O2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+
+ entry = egoCorrection, "Gego", int, "%d"
+ entry = airCorrection, "Gair", int, "%d"
+ entry = warmupEnrich, "Gwarm", int, "%d"
+ entry = baroCorrection, "Gbaro", int, "%d"
+ entry = gammaEnrich, "Gammae", int, "%d"
+ entry = accDecEnrich, "TPSacc", int, "%d"
+
+ entry = veCurr1, "Gve", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "Gve2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SparkAdv", float, "%.1f"
+ entry = knockRetard, "knockRet", float, "%.1f"
+ entry = coldAdvDeg, "ColdAdv", float, "%.1f"
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = tpsDOT, "tpsDOT", float, "%.1f"
+ entry = mapDOT, "mapDOT", float, "%.1f"
+ entry = iacstep, "IACstep", int, "%d"
+
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = deltaT, "deltaT", float, "%.0f"
+ entry = wallfuel1, "WallFuel1", int, "%d"
+ entry = wallfuel2, "WallFuel2", int, "%d"
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d"
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d"
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f"
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = timing_err, "timing err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+ entry = boostduty, "Boost Duty", int, "%d"
+ entry = idleDC, "PWM Idle Duty", float, "%.1f"
+ entry = synccnt, "Lost sync count", int, "%d"
+ entry = syncreason, "Lost sync reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = rpmdot, "RPMdot", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms340t2.ini b/src/ini/ms2extra/comms340t2.ini
new file mode 100644
index 0000000..654140d
--- /dev/null
+++ b/src/ini/ms2extra/comms340t2.ini
@@ -0,0 +1,5682 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.180 2015/07/10 09:52:07 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms340t2" ; MS2
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Normal", "INVALID", "INVALID", "INVALID"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "MS2 AD7/JS4", "MS2 AD6/JS5", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 684, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "PE0/JS7", "JS11", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "MS2 AD7/JS4", "MS2 AD6/JS5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "JS10", "D14" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on D16"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "IAC1", "IAC2", "INVALID", "JS11", "INVALID", "INVALID", "INVALID", "Fidle", "D14", "D16", "D15", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "PE0", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "PE0", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "IAC1+2", "FIDLE+D15", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT2, PT4", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on LED D14, D16, D15, JS11, ADC6, ADC7", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: LED D14", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: LED D16", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: LED D15", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PT7 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PT6 - IAC2", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: JS11 (PA0)", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10
+ panel = outputtest12
+ panel = outputtest11
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+ panel = outputtest16
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "PWM Current Limiting", injctl2_1, { !extrainj }
+ field = "PWM Current Limit", injPwmP, { !extrainj && injctl2_1 }
+ field = "PWM Time Threshold", injPwmT, { !extrainj && injctl2_1 }
+ field = "Injector PWM Period", injPwmPd, { !extrainj && injctl2_1 }
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "PWM Current Limiting", injctl2_2, { injctl && !extrainj}
+ field = "PWM Current Limit", injPwmP2, { injctl && !extrainj && injctl2_2}
+ field = "PWM Time Threshold", injPwmT2, { injctl && !extrainj && injctl2_2}
+ field = "Injector PWM Period", injPwmPd2, { injctl && !extrainj && injctl2_2}
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (D14 Preferred)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "LED D14", "LED D16", "LED D15", "PT7 - IAC1", "PT6 - IAC2", "JS11 (PA0)"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 209 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms340tM.ini b/src/ini/ms2extra/comms340tM.ini
new file mode 100644
index 0000000..6052cca
--- /dev/null
+++ b/src/ini/ms2extra/comms340tM.ini
@@ -0,0 +1,5674 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.180 2015/07/10 09:52:07 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms340tM" ; Microsquirt-module
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "IACEN,PT6,PT7", "SPAREADC2,FIDLE,SPAREADC", "WLED,FIDLE,SPAREADC", "None,FIDLE,SPAREADC"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "SPAREADC2", "SPAREADC", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 684, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "FLEX", "PA0", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "SPAREADC2", "SPAREADC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "PT7", "PT6", "INVALID", "PA0", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "PE1", "INVALID", "PA0", "SPAREADC", "SPAREADC2", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "PT7+6", "FIDLE+WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT6, PT7", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: ALED", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: WLED", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PT6 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PT7 - IAC2", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: PA0", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11b
+ panel = outputtest12b
+ panel = outputtest13b
+ panel = outputtest14b
+ panel = outputtest15b
+ panel = outputtest16b
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "ALED", "WLED", "PT6 - IAC1", "PT7 - IAC2", "PA0"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 209 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms340tP.ini b/src/ini/ms2extra/comms340tP.ini
new file mode 100644
index 0000000..580526d
--- /dev/null
+++ b/src/ini/ms2extra/comms340tP.ini
@@ -0,0 +1,5674 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.180 2015/07/10 09:52:07 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms340tP" ; MSPNP2
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Normal", "INVALID", "INVALID", "INVALID"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "Knock", "Baro", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 684, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "LAUNCH", "INVALID", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "Knock", "Baro", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "InjectorD", "InjectorC", "INVALID", "BOOST", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "InjectorD+C", "FIDLE+Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT6, PT7", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Output 1", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Output 2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Injector C", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Injector D", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Boost", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11c
+ panel = outputtest12c
+ panel = outputtest13c
+ panel = outputtest14c
+ panel = outputtest15b
+ panel = outputtest16c
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "Output1", "Output2", "InjectorC", "InjectorD", "Boost"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 209 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms340tU.ini b/src/ini/ms2extra/comms340tU.ini
new file mode 100644
index 0000000..eb629dd
--- /dev/null
+++ b/src/ini/ms2extra/comms340tU.ini
@@ -0,0 +1,5667 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.180 2015/07/10 09:52:07 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms340tU" ; Microsquirt
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Off", "SPAREADC2,FIDLE,SPAREADC", "WLED,FIDLE,SPAREADC", "None,FIDLE,SPAREADC"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "SPAREADC2", "SPAREADC", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 684, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "FLEX", "INVALID", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "SPAREADC2", "SPAREADC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "INVALID", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "INVALID", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "INVALID", "FIDLE+WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "INVALID" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "INVALID", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: ALED", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: WLED", psEnabled[3], {psEnabled[3]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11b
+ panel = outputtest12b
+ panel = outputtest15b
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "ALED", "WLED", "INVALID", "INVALID", "INVALID"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 209 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms342a2.ini b/src/ini/ms2extra/comms342a2.ini
new file mode 100644
index 0000000..4ba47b4
--- /dev/null
+++ b/src/ini/ms2extra/comms342a2.ini
@@ -0,0 +1,5692 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.186 2016/03/01 18:51:39 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms342a2" ; MS2
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Normal", "INVALID", "INVALID", "INVALID"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "MS2 AD7/JS4", "MS2 AD6/JS5", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "PE0/JS7", "JS11", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "MS2 AD7/JS4", "MS2 AD6/JS5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "JS10", "D14" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on D16"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "Ski doo PTEC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "MS2 AD6/JS5", "MS2 AD7/JS4", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "IAC1", "IAC2", "INVALID", "JS11", "INVALID", "INVALID", "INVALID", "Fidle", "D14", "D16", "D15", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "PE0", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "PE0", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "IAC1+2", "FIDLE+D15", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "PE0/JS7", "PE1", "JS10", "JS11", "JS5", "JS4", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN (JS10)", "IAC1", "IAC2", "JS11", "FIDLE", "D14", "D16", "D15", "AD06/JS5", "AD07/JS4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT2, PT4", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on LED D14, D16, D15, JS11, ADC6, ADC7", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: LED D14", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: LED D16", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: LED D15", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PT7 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PT6 - IAC2", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: JS11 (PA0)", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10
+ panel = outputtest12
+ panel = outputtest11
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+ panel = outputtest16
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "PWM Current Limiting", injctl2_1, { !extrainj }
+ field = "PWM Current Limit", injPwmP, { !extrainj && injctl2_1 }
+ field = "PWM Time Threshold", injPwmT, { !extrainj && injctl2_1 }
+ field = "Injector PWM Period", injPwmPd, { !extrainj && injctl2_1 }
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "PWM Current Limiting", injctl2_2, { injctl && !extrainj}
+ field = "PWM Current Limit", injPwmP2, { injctl && !extrainj && injctl2_2}
+ field = "PWM Time Threshold", injPwmT2, { injctl && !extrainj && injctl2_2}
+ field = "Injector PWM Period", injPwmPd2, { injctl && !extrainj && injctl2_2}
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (D14 Preferred)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "LED D14", "LED D16", "LED D15", "PT7 - IAC1", "PT6 - IAC2", "JS11 (PA0)"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 212 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+ can_error_cnt = scalar, U08, 209, "", 1,0
+ can_error = scalar, U16, 210, "", 1,0
+; can_error_rxovr = bits, U08, 210, [0:0]
+; can_error_rxwrn = bits, U08, 210, [1:1]
+; can_error_rxerr = bits, U08, 210, [2:2]
+; can_error_txwrn = bits, U08, 210, [3:3]
+; can_error_txerr = bits, U08, 210, [4:4]
+; can_error_pass = bits, U08, 210, [5:5]]
+; can_error_oor = bits, U08, 210, [6:6]
+; can_error_pass2 = bits, U08, 210, [7:7]
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms342aM.ini b/src/ini/ms2extra/comms342aM.ini
new file mode 100644
index 0000000..eb664b9
--- /dev/null
+++ b/src/ini/ms2extra/comms342aM.ini
@@ -0,0 +1,5684 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.186 2016/03/01 18:51:39 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms342aM" ; Microsquirt-module
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "IACEN,PT6,PT7", "SPAREADC2,FIDLE,SPAREADC", "WLED,FIDLE,SPAREADC", "None,FIDLE,SPAREADC"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "SPAREADC2", "SPAREADC", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "FLEX", "PA0", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "SPAREADC2", "SPAREADC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "Ski doo PTEC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "PT7", "PT6", "INVALID", "PA0", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "PE1", "INVALID", "PA0", "SPAREADC", "SPAREADC2", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "PT7+6", "FIDLE+WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Flex", "PE1", "INVALID", "PA0", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "PT7", "PT6", "PA0", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT6, PT7", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: ALED", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: WLED", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PT6 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PT7 - IAC2", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: PA0", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11b
+ panel = outputtest12b
+ panel = outputtest13b
+ panel = outputtest14b
+ panel = outputtest15b
+ panel = outputtest16b
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "ALED", "WLED", "PT6 - IAC1", "PT7 - IAC2", "PA0"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 212 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+ can_error_cnt = scalar, U08, 209, "", 1,0
+ can_error = scalar, U16, 210, "", 1,0
+; can_error_rxovr = bits, U08, 210, [0:0]
+; can_error_rxwrn = bits, U08, 210, [1:1]
+; can_error_rxerr = bits, U08, 210, [2:2]
+; can_error_txwrn = bits, U08, 210, [3:3]
+; can_error_txerr = bits, U08, 210, [4:4]
+; can_error_pass = bits, U08, 210, [5:5]]
+; can_error_oor = bits, U08, 210, [6:6]
+; can_error_pass2 = bits, U08, 210, [7:7]
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms342aP.ini b/src/ini/ms2extra/comms342aP.ini
new file mode 100644
index 0000000..ee3c2ec
--- /dev/null
+++ b/src/ini/ms2extra/comms342aP.ini
@@ -0,0 +1,5684 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.186 2016/03/01 18:51:39 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms342aP" ; MSPNP2
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Normal", "INVALID", "INVALID", "INVALID"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "Knock", "Baro", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "LAUNCH", "INVALID", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "Knock", "Baro", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "Ski doo PTEC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "InjectorD", "InjectorC", "INVALID", "BOOST", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "InjectorD+C", "FIDLE+Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+ displayOnlyField = "Extra Fuel Outputs PT6, PT7", extrainj, {extrainj}
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Output 1", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Output 2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Injector C", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Injector D", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Boost", psEnabled[6], {psEnabled[6]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11c
+ panel = outputtest12c
+ panel = outputtest13c
+ panel = outputtest14c
+ panel = outputtest15b
+ panel = outputtest16c
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "Output1", "Output2", "InjectorC", "InjectorD", "Boost"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 212 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+ can_error_cnt = scalar, U08, 209, "", 1,0
+ can_error = scalar, U16, 210, "", 1,0
+; can_error_rxovr = bits, U08, 210, [0:0]
+; can_error_rxwrn = bits, U08, 210, [1:1]
+; can_error_rxerr = bits, U08, 210, [2:2]
+; can_error_txwrn = bits, U08, 210, [3:3]
+; can_error_txerr = bits, U08, 210, [4:4]
+; can_error_pass = bits, U08, 210, [5:5]]
+; can_error_oor = bits, U08, 210, [6:6]
+; can_error_pass2 = bits, U08, 210, [7:7]
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms2extra/comms342aU.ini b/src/ini/ms2extra/comms342aU.ini
new file mode 100644
index 0000000..26a30ce
--- /dev/null
+++ b/src/ini/ms2extra/comms342aU.ini
@@ -0,0 +1,5677 @@
+;-------------------------------------------------------------------------------
+; $Id: ms2extra.ini,v 1.186 2016/03/01 18:51:39 jsmcortina Exp $
+
+; configuration defines
+;Normally these next lines should be UNset
+;Use TunerStudio to fetch and view tooth/trigger logs
+
+; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
+; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
+#set CAN_COMMANDS
+#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+#if INI_VERSION_2
+; ok
+#else
+#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio 2.x or later.
+#endif
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ ; leave last letter alone
+ signature = "MS2Extra comms342aU" ; Microsquirt
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt II.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" ; might work now :)
+ tableBlockingFactor = 256 ;
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+ solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor"
+ settingOption = LAMBDA, "Lambda"
+ settingOption = DEFAULT, "WideBand" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+
+[LoggerDefinition]
+ ; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
+ stdLogger = stdMS2Composite
+ stdLogger = stdMS2SyncComposite
+ stdLogger = stdMS2Tooth
+ stdLogger = stdMS2Trigger
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = toothno, "Tooth No", 0, 13, 1, "tooth", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mapAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data //not used..
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 16, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 15, 1, 1, ""
+ recordField = PT6, "PTT6", 14, 1, 1, ""
+ recordField = PT5, "PTT5", 13, 1, 1, ""
+ recordField = PT4, "PTT4", 12, 1, 1, ""
+ recordField = PT3, "PTT3", 11, 1, 1, ""
+ recordField = PT2, "PTT2", 10, 1, 1, ""
+ recordField = PT1, "PTT1", 9, 1, 1, ""
+ recordField = PT0, "PTT0", 8, 1, 1, ""
+
+ recordField = PTAD7, "PTAD7", 7, 1, 1, ""
+ recordField = PTAD6, "PTAD6", 6, 1, 1, ""
+ recordField = PM5, "PTM5", 5, 1, 1, ""
+ recordField = PM4, "PTM4", 4, 1, 1, ""
+ recordField = PM3, "PTM3", 3, 1, 1, ""
+ recordField = PA0, "PTA0", 0, 1, 1, ""
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+ pageActivationDelay = 10 ; Milliseconds delay after burn command.
+ blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
+; writeBlocks = on
+ tsWriteBlocks = on
+ interWriteDelay = 1
+
+; note page 6, 0xf0 = tooth logger
+; page 7, 0xf1 = trigger logger
+
+ endianness = big
+ nPages = 7
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
+ burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
+ pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
+ pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
+ crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0
+ blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
+
+;Relationship between TS pages and MS2 pages
+; See also ms2_extra_main_decls.h
+;TS MS2 internal
+;MS2 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS2 internal pages 6,7 are outpc,txbuf
+;3 10
+;4 8
+;5 9
+;6 11
+;7 12
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 255.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+ injctl = bits, U08, 2, [5:5], "Off","On"
+ injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
+ injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
+ max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
+ dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
+ crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+ RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
+;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+ algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+ algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+ eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;back to normal
+#if LAMBDA
+ afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
+ taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+ maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
+
+ iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+
+ arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+#if CELSIUS
+ tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
+ #else
+ tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ #endif
+ taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+
+ map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
+ Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
+
+ IdleCtl_out = bits, U08, 547, [6:7], "Off", "SPAREADC2,FIDLE,SPAREADC", "WLED,FIDLE,SPAREADC", "None,FIDLE,SPAREADC"
+ IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
+ IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
+#else
+ IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
+#endif
+ IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
+;gaps
+ injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
+ OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
+ OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+;spare
+ secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
+ tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
+ taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
+ taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
+ TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
+ tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
+ egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
+ EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
+ egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+#if LAMBDA
+ AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
+#else
+ AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
+#endif
+ tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ MAFOption = bits , U08, 600, [4:5], "Off", "SPAREADC2", "SPAREADC", "MAP" ; ( 1 byte)
+ mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
+#if CELSIUS
+ fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+ egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+ reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
+ divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
+ injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
+; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
+ nInjectors = bits, U08, 619, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ OddFireang = scalar, U16, 620, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
+;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
+; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
+; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
+ xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
+; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
+ RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
+ injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ mapport = bits, U08, 645, [0:0], "Off", "MAP"
+ baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+ baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
+ stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
+ enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
+ enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
+ enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
+ poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
+ port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
+ port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
+ port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
+ port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
+
+ remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
+ remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
+
+ can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
+ can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 50, 1000,1
+
+ feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
+; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
+ maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
+ flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
+ flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
+ fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
+;pad 697
+ boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ ; spare 9 bytes
+ hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
+ ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
+;these are loadopts in firmware
+ loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
+ loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
+ baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
+ mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
+; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
+ mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
+ can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
+; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+
+ ; Port Settings constants
+ psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
+ psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
+ psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
+ psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
+ psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+ psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
+
+ aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+ primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
+ aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
+
+ egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "INVALID" ; * ( 1 byte)
+ egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+ egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 908, [1:3], "FLEX", "INVALID", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
+ fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
+
+ dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+
+;gap
+ knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
+ knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
+
+ knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
+ knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
+; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
+
+ triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+
+ ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+
+ knkport = bits, U08, 973, [0:3], "SPAREADC2", "SPAREADC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+
+ ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+
+ fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+
+ IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
+;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
+; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
+;spk_config_spka
+; WLED was incorrectly Tachout
+ spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
+ spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
+ spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
+ spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
+ spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
+ spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
+
+ spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used
+ spk_mode0 = bits , U08, 989, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-00", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "Ski doo PTEC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
+ spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
+ spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
+ rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
+ egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
+ kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
+;996 free
+ feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
+ feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
+ feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+ timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
+ crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+
+ page = 2
+ pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
+#else
+ pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
+ pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
+ pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
+ pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
+; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
+ pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
+ pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
+ pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
+; gap
+ pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
+ pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
+ pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
+ pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
+ pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
+ boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
+ boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
+; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
+ boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
+ boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
+ boost_ctl_pins = bits, U08, 68, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID","INVALID"
+ boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
+ boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
+ boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
+ boost_ctl_load_targets = array, S16, 76, [8x8], "%", 0.1, 0, 0, 400, 1
+ boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
+#else
+ pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
+#endif
+ injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+
+ primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+
+ asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+#if CELSIUS
+ matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0
+ EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ ; Supplemental corrections for MAT. (old version)
+#if CELSIUS
+ matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, {loadhigh}, 1
+; pad 10 bytes
+#if CELSIUS
+ temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+ tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
+#else
+ EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
+#endif
+
+; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
+ ts_port_f = bits , U08, 827, [0:3], "INVALID", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ ts_port_s = bits , U08, 827, [4:7], "INVALID", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+; feature5_0 828 was 1000
+ OvrRunC = bits , U08, 828, [0:0], "Off", "On"
+; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
+ f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
+ f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
+ pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
+ pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
+ pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
+
+ fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
+
+ tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
+ tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
+ tacho_opt3f = bits, U08, 842, [0:3], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
+ EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
+ EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, {rpmhigh}, 0
+ fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
+ fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
+;morepage5[15]
+ ; Port Settings constants
+ rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
+ rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
+ rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
+ rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+ rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
+
+page = 3
+ advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ feature3_1 = bits, U08, 672, [1:1], "Off", "On"
+ feature3_3 = bits, U08, 672, [3:3], "Off", "On"
+ feature3_matase = bits, U08, 672, [6:6], "Off", "On"
+ launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_opt_pins = bits, U08, 673, [0:3], "FLEX", "INVALID", "INVALID", "INVALID", "SPAREADC", "SPAREADC2", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
+ launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+; spare
+ flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+; spare
+ flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
+ staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
+ N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
+
+ N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+#if CELSIUS
+ N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
+#else
+ N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
+ N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
+
+;nitrous stage 2
+; Nitrous System
+ N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
+ N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+ N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
+ N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
+
+;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 736, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 740, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;end user defined
+ staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
+ staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
+ N2Oopt_pins = bits, U08, 803,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ N2Oopt_pins2 = bits, U08, 803,[4:7], "INVALID", "FIDLE+WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
+;2 gaps
+ dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
+ RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
+ RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
+ RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+ RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
+
+ NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
+
+ staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
+ VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ trig_init = scalar, U08, 1003, "", 1,0,0,255,0
+ inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
+
+page = 4
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+; testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,0,8388,1
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+ testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
+ testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
+ testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
+ advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+ srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+#if CELSIUS
+ RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#else
+ RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes)
+ iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
+ iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
+ flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
+ idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
+ idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
+ idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
+ idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
+ idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
+#else
+ idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
+; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
+; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
+
+ seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
+ extrainj = bits, U08, 415, [2:2], "Standard drivers", "INVALID" ;
+ injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
+ usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
+ injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
+ injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
+ injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
+ srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 12 bytes)
+ injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
+ hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+ injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
+ veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+ veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+;956
+
+; ; The following is available for use by TunerStudio but isn't presently.
+;
+; ; Used to store sensor calibration settings last written to the controller
+; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
+;
+; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
+; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
+; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
+;
+; ; The index of the selected EGO sensor as defined in the solutions section of the
+; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
+; ; file found in the inc dir of your TunerStudio installation.
+; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
+; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
+; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
+
+ can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
+ can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
+ can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
+ can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
+ can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
+ can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
+ can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
+ can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
+ can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
+ can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
+ can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
+ can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
+ can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
+ can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
+ can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
+ can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
+ can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
+ can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
+ can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
+ can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
+ can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
+ can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
+ can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
+ can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
+ can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
+ can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
+ can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
+ can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
+ can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
+ can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
+ can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
+ can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
+ can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
+;spare1
+;990
+
+page = 5
+ veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+
+ frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+;same tables again but smaller - start in different places to 16x16
+ veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
+ veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
+ MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+ matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
+
+page = 6
+ veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
+ veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+
+ frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 32 bytes)
+ fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+ fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 32 bytes)
+
+;same tables again but smaller - start in different places to 16x16
+ veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
+ veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
+ frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+
+page = 7
+ idle_up_options_input = bits, U08, 0,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "INVALID", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
+ ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
+ idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
+ idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
+ idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
+ ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
+ idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
+ ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
+ ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
+ pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
+ ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+
+ pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
+
+ idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
+ idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
+ idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+ idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
+
+ idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
+ idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
+
+ pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
+
+ mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
+
+ ; Supplemental corrections for barometer and MAT (new curves)
+ baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+ tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
+ knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
+ shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
+ shift_cut_in = bits, U08, 503,[0:3], "Flex", "INVALID", "INVALID", "INVALID", "SpareADC", "SPAREADC2", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
+ shift_cut_out = bits, U08, 504, [0:3], "IGN", "INVALID", "INVALID", "INVALID", "FIDLE", "TACHOUT", "ALED", "WLED", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
+;spare
+ shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
+ ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
+;spare at 517
+ boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "%", 0.10000, 0, 0, 600, 0
+ can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
+ dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 627
+
+; 8 outmsg
+ outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
+ outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = IACStart
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+ requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gm
+ requiresPowerCycle = spk_conf2_tfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_kick
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3a
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = mapport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = seq_inj
+ requiresPowerCycle = extrainj
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = egoport
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = hybrid_rpm
+ requiresPowerCycle = hybrid_hyst
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_pri_size
+ requiresPowerCycle = staged_sec_size
+ requiresPowerCycle = dualTable
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = secondtrigopts
+ requiresPowerCycle = boost_ctl_settings_on
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = idle_up_options_input
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins2
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = clt_exp, 0
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\n\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+ feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go.\nIncrease from the default of 1 if the valve moves unreliably."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valves may work in the opposite direction."
+ pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
+ pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ baud = "This should be set to 115200."
+; These tips for on/off outputs do not show up in TS 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc.\n\nPick an output in the left pane, then set its parameters in the right pane.\nOutputs show green when enabled."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on\nTwo independent sensors = use a second dedicated barometer sensor."
+ mapport = "The connection to the MAP sensor or 'Off' for installs not using MAP."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier fuel table (Spk2)\n\nAdvanced use only."
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If fuel cut is enabled, then the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection.\nRequires Sequential/Semi-Sequential."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+
+ MAFOption = "Selects the hardware input pin where the MAF is connected. Or 'Off' to disable MAF readings. "
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected - either locally or via an expansion board.\nExpansion boards will need configuring through 'CAN parameters'."
+ fuelFreq0 = "The low frequency generated by the sensor (e.g. 50Hz for the GM sensor)"
+ fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 100% for 0% ethanol gives 0% additional fuel."
+ fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees at low frequency."
+ fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
+ flex_pct0 = "The ethanol percentage corresponding to the low frequency."
+ flex_pct1 = "The ethanol percentage corresponding to the high frequency."
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
+ egoport = "Selects where the sensor is connected."
+ ego2port = "Selects where the sensor is connected."
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
+ spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
+ spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils.\nFor Microsquirt this is typically 'Going High'\nFor direct coil control on MS2 this is typically 'Going High'\nFor logic spark output on MS2 this is typically 'Going Low'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "how often are second trigger (e.g. cam) input pulses received."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl.\n\nThis setting requires:\n- 1 or 2 cyl.\n-Toothed wheel\n-Cam input = MAP sensor\n-Dual wheel with missing tooth"
+
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
+ pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "Approximately how long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
+ pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
+ pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
+ ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
+ pidrpm_window = "An RPM smoothing feature."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_ms = "Controls how often the boost control algorithm runs."
+ boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
+ boost_ctl_remote = "Selects where the solenoid is connected."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_settings_cl = "Controls whether open-loop or closed-loop control algorithm is used."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
+ OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ NoiseFilterOpts3 = "A method to reject very short false noise spikes."
+ secondtrigopts3 = "A method to reject very short false noise spikes."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ idleadvance_on = "Enables Idle-advance feature.\nLoad = Timing varies based on engine load only.\nRPMs = Timing varies based on engine RPM only.\nAdaptive = Timing changes are used to assist closed-loop idle."
+ idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
+ idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level"
+ knkport = "Selects where the sensor/module is connected. Local connections are advised for faster response.\n\nExpansion boards for on/off inputs will need configuring through 'CAN parameters'.\nAnalogue inputs from expansion board is not supported."
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value. (The negative of this threshold is also used as the threshold for decel-enleanment.)"
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm = "Below this RPM full enrichment is enabled."
+ ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
+ tpsProportion = "Weight (0-100) to be given to TPSdot over MAPdot for accel enrichment."
+
+ f5_0_tsf = "Enables fuel table switching.\nSwitches from VE1+2 to VE3 alone."
+ f5_0_tsf_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "MAP threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching.\nSwitches from Spk1+2 to Spk3 alone."
+ f5_0_tss_opt = "Hardware = Physical switch\nRPM,kPa,TPS allow switching above threshold set below."
+ ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "MAP threshold."
+ tss_tps = "TPS threshold."
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a ground signal at the CPU.)\nExpansion boards will need configuring through 'CAN parameters'."
+ N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll = "Enables fetching data from expansion board via CAN."
+ can_poll_id0 = "CANid of expansion board."
+ can_poll_id1 = "CANid of expansion board."
+ can_poll_id2 = "CANid of expansion board."
+ can_poll_id3 = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ enable_pollADC03= "Enables capturing analogue inputs from expansion board."
+ enable_pollADC47= "Enables capturing analogue inputs from expansion board."
+ poll_tableports = "Table number on expansion board."
+ poll_tableADC03 = "Table number on expansion board."
+ poll_tableADC47 = "Table number on expansion board."
+ poll_offsetADC03 = "Data offset on expansion board."
+ poll_offsetADC47 = "Data offset on expansion board."
+ remotePWMfreq = "Clock frequency on expansion board. See documentation."
+ remotePWMprescale = "Prescaler on expansion board. See documentation."
+ enable_pollports = "CANid of expansion board for digital inputs/outputs."
+ poll_offsetports = "Data offset on expansion board."
+ ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
+ port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
+ port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Is coil testing enabled?"
+ testsel_coil = "Which coil output to test.\n\nWith 2 rotor rotary mode: Coil A = leading 1, B = leading 2, C = trailing 1, D = trailing 2."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Is injector testing enabled?"
+ testsel_inj = "Which injector output to test."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
+ injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
+ injusetable = "Whether a injection single timing value or a mapped table of timing is used."
+ injdualvalue = "For siamese allows different timing for each 'half'."
+ injadv1 = "Fixed angle for first injection."
+ injadv2 = "Fixed angle for second injection."
+ injstagedadv1 = "Allows different angles when staging."
+ injstagedadv2 = "Allows different angles when staging."
+ injcrankadv1 = "Timing during cranking."
+ injcrankadv2 = "Timing during cranking."
+ usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
+ extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
+ hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
+ hybrid_hyst = "Deadband on that RPM."
+ injadv3 = "Injector timing in single-pulse mode."
+ injstagedadv3 = "Allows different angles when staging."
+ dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
+ feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
+
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ mapsample_window = "How many degrees to sample over."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ mapsample_angle = "The starting angle (BTDC) for MAP sampling."
+
+ injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd = "The PWM period aka. frequency."
+ injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
+ injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
+ battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
+ injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
+ injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
+ injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
+ injPwmPd2 = "The PWM period aka. frequency."
+ injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
+ injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+
+ ac_idleup_settings = "Enables feature."
+ ac_idleup_io_out = "Output to engage compressor."
+ idle_up_options_input = "Switch input."
+ idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps = "Additional idle steps to add when A/C is active."
+ idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
+
+;curves and tables
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load or RPM or Adaptive when Idle-Advance is active.\nLoad: Typically the curve will ramp from low advance at low load to more advance at higher loads to stablise idle.\nRPM: Typically the curve will ramp from higher advance at lower RPMs to less advance at higher RPMs to stablise idle.\nAdaptive: Typically the curve will ramp from higher advance at negative RPM deltas (below target) to lower advance at positive RPM deltas (above target) to help stablise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+; tables
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate ignition advance table (3). Can be used as a switched table from no.1. When Spk3 is active any secondary advance table is ignored."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
+ injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+ outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
+ outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
+ outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
+ outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
+ can_outpc_gp00 = "Enables broadcasting of this group of data."
+ can_outpc_gp17 = "Enables broadcasting of this group of data."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = barometerCorr, "Barometric Correction"
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Real-Time Display"
+ subMenu = iopinlist, "Feature List Showing I/O Pins"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injChars, "Injector Dead-Time/PWM"
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
+ subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
+ subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
+ subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options / Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = std_separator
+ subMenu = noisefiltering2, "Noise Filtering"
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, {(spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking / Startup settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse %", 0
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {(IdleCtl > 1) && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up"
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
+ subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
+ subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel Enrichment"
+ subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
+ subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
+
+ menu = "Boost/ Advanced"
+ subMenu = boostctlSettings, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
+ subMenu = std_separator
+ subMenu = tablesw, "Table Switching Control"
+ subMenu = std_separator
+ subMenu = launch, "Launch Control"
+ subMenu = N2OSystem, "&Nitrous System"
+ subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = std_separator
+ subMenu = std_port_edit, "Programmable On/Off Outputs"
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+;16x16
+ subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+ subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
+;12x12
+ subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
+ subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
+ subMenu = afrTable1Map, "A&FR Table 1"
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "&Ignition Table 2", 0, {(IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "&Ignition Table 3", 0, {(f5_0_tss>0) && (spk_mode0 != 31)}
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
+ subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
+ subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
+
+ menu = "C&AN bus/Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+ subMenu = outmsg5, "Outmsg 5"
+ subMenu = outmsg6, "Outmsg 6"
+ subMenu = outmsg7, "Outmsg 7"
+ subMenu = outmsg8, "Outmsg 8"
+#endif
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate"
+
+ menu = "Help"
+ subMenu = helpGeneral, "MS2/Extra Info"
+
+;-------------------------------------------------------------------------------
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
+; Requires 0.999.9h upwards
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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 dos 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.
+
+cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
+
+cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
+cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
+
+[UserDefined]
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+ field = "Broadcasting rate", can_outpc_gp00_int
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
+ field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "26: nitrous:addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2", can_outpc_gp29
+ field = "43: synccnt,reason,timing_err", can_outpc_gp43
+ field = "46: injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%", can_outpc_gp47
+ field = "51: PORTa,b,e,m,t", can_outpc_gp51
+ field = "52: CANport1,2,3,knockretard", can_outpc_gp52
+ field = "55: looptime", can_outpc_gp55
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3", can_outpc_gp58
+ field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
+ panel = asePct
+ panel = ase_note
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupEnrichGauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = flexcorGauge
+ gauge = afr1tgtGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = n2o_addfuelGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = vetrimGauge1
+ gauge = vetrimGauge2
+ gauge = vetrimGauge3
+ gauge = vetrimGauge4
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+ gauge = pulseWidth3Gauge
+ gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see http://www.msextra.com/doc/ms3/fuelcalc.html"
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retardGauge
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time", shift_cut_time, { shift_cut_on }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
+ field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = flash_unlock, "Un/Lock calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+ field = "Always re-lock after use"
+
+ dialog = airden_words
+ field = "For firmware 3.3.x this feature has changed."
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law'."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn Level", rpmwarn
+ field = "RPM - Danger Level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "Air-cooled Expanded CLT Range", clt_exp
+
+ dialog = iopinlist, "Feature list Showing I/O Pins"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
+ displayOnlyField = "Main Fuel Outputs PT1, PT3"
+
+ displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
+ displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: ALED", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: WLED", psEnabled[3], {psEnabled[3]}
+
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
+
+ displayOnlyField = "EGO 1 port", egoport, {egoType}
+ displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
+ displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+
+ displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
+ displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option }
+ displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
+ displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
+ displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+
+ ; idle up section --------------------------------------------------------------------
+
+ dialog = ac_idleup, "Air Conditioning Idle-up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
+ field = "A/C Idle-up", ac_idleup_settings
+ field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
+ field = "Idle-up Input Polarity", idle_up_options_inv, {ac_idleup_settings}
+ field = "Idle-up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor Delay Since Last On", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
+ field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
+ field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply Voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical Values are 0.0V and 29.7V"
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
+ field = "Voltage Input Port", MAFOption
+ field = "MAT Correction Curve", feature7_mafmat
+ field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
+ field = "MAF Sensor Range", maf_range
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
+
+ dialog = N2OSystem, "Nitrous System"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
+ field = "Nitrous Control", N2Oopt_2
+ field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
+ field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
+ field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
+ field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = ""
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+
+ dialog = N2OSystem2, "Nitrous Stage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
+ field = "Enable stage 2 above", N2O2Rpm
+ field = "Max RPM", N2O2RpmMax
+ field = "Delay After Stage 1", N2O2delay
+ field = "Retard Ignition By", N2O2Angle
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = flexboost, "Flex/Boost"
+ field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = boostctlSettingsr, ""
+ panel = overboost, North
+ panel = flexboost, South
+
+ dialog = boostctlSettingsl, ""
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
+ field = ""
+ field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
+ field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
+ field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
+ field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
+
+ dialog = boostctlSettings, "Boost Control Settings", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
+ panel = boostctlSettingsl, West
+ panel = boostctlSettingsr, East
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_poll
+ field = "Enable PWM Polling", enable_pollPWM, { can_poll }
+ field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
+ field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
+ field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
+ field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
+
+ dialog = caneast, ""
+ field = "Enable Ports Polling", enable_pollports, { can_poll }
+ field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
+ field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
+ field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
+ field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
+ field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
+ field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
+ field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
+
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC Group On/Off"
+ field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
+ field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
+ field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
+ field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
+
+ dialog = canadcs, "CAN ADC Selection", xAxis
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest
+ panel = caneast
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
+ panel = can_top, North
+ panel = canadcs, South
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable Sequenced Batch Fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+ field = "Injector Time Mask", inj_time_mask, {feature3_3 }
+
+ dialog = seq_injection, "Sequential Injection"
+ field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
+ field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
+ field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
+ field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
+ field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
+ field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
+ field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
+ field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
+ field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
+ field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
+ field = "Injector Drivers", extrainj
+ field = "#Sequential Siamese Hybrid Mode"
+ field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
+ field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
+ field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
+
+ dialog = tablesw, "Table Switching Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
+ field = "Fuel Table Switching", f5_0_tsf
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
+ field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
+ field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
+ field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
+ field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
+ field = ""
+ field = "Spark Table Switching", f5_0_tss
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
+ field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_l, "Output Test Modes", yAxis
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-On-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "batch fire outputs"
+ field = "Injector PWM Parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdfpoff, { status3 & 8 }
+ commandButton = "On", cmdfpon, { status3 & 8 }
+
+ dialog = outputtest10, "LED14/SpkA", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "LED16/SpkB", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "LED15/SpkC", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "IAC1", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "IAC2", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "JS10", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16, "JS11.PA0.SpD", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest17, "FIDLE", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtest10b, "TachOut", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11b, "ALED", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12b, "WLED", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13b, "PT6", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14b, "PT7", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15b, "IGN1", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest16b, "PA0", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest11c "Output1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12c, "Output2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13c, "InjectorC", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14c, "InjectorD", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest16c, "Boost", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "If the output is connected to an ignition coil you will damage it!"
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest10b
+ panel = outputtest11b
+ panel = outputtest12b
+ panel = outputtest15b
+ panel = outputtest17
+
+ dialog = outputtest_io, "Output Test Mode - I/O", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io_warning
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-512)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = EAElagcomp, "EAE Lag Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
+ field = "Source", EAElagsource
+ field = "Threshold", EAElagthresh
+ field = "Max RPM", EAElagRPMmax
+
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
+
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = "Note, a power cycle is required after enabling/disabling"
+ field = " the noise filters"
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launch, "Launch Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To", flats_deg, { launch_opt_on >1 }
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = ""
+ field = "Output Pin", tacho_opt3f, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 }
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut Fuel When:"
+ field = "RPM Greater Than", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than", fc_tps, { OvrRunC }
+ field = "And CLT Higher Than", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = ""
+ field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
+ field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
+
+ dialog = staging, ""
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = ""
+ field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
+ field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Staged Injection Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
+
+ dialog = secondaryLoad, "Secondary Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (Caution!)", loadMult
+ field = "99% of installs should use Multiply"
+ field = ""
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich, { loadStoich }
+ field = ""
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "NOTE: secondary ignition table is always additive"
+ field = ""
+ field = "AFR Table Load", afrload
+ field = "EAE Curve Load", eaeload
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Cranking Fuel Pulse Rate", altcrank
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro, {baroCorr}
+
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Input Port", mapport
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = ""
+ field = "Dual Table Use", dualTable
+ field = ""
+ field = "Fuel Table Size", feature4_0VEtblsize
+ field = "Note: Export your fuel tables before changing, then import"
+ field = "MegaView Temp. Units", tempUnits
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = map_sample_dialog, "MAP Sample Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
+ field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = revlimiter, ""
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback for sensor failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ panel = ff_fallback
+
+ ; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
+; field = "Use Time-Based or Accel-pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot Threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+; field = "Time or Ignition Events", feature7_aeevents
+; field = "Accel duration", tpsasync_events, { feature7_aeevents }
+; field = "Accel taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime ; , { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime ; , { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm ;, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm ;, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+ dialog = injChars, "Injector Dead-Time/PWM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
+ field = "Bank 1"
+ field = "Injector Dead Time @13.2V", injOpen
+ field = "Battery Voltage Correction", battFac
+ field = "Different Bank Settings", injctl
+ field = "Bank 2"
+ field = "Injector2 Dead Time", injOpen2, { injctl }
+ field = "Battery Voltage Corr.", battFac2, { injctl }
+ field = "Bank 3"
+ field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
+ field = "Bank 4"
+ field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
+ field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
+
+ dialog = egoControl, "EGO Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
+ field = "EGO Sensor Type", egoType
+ field = "1st EGO Sensor port", egoport, { egoType > 0 }
+ field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
+ field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
+ field = "Ignition Events Per Step", egoCount, { egoType > 0 }
+ field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
+ field = "Controller Auth +/-", egoLimit, { egoType > 0 }
+ field = "Active Above CLT", egoTemp, { egoType > 0 }
+ field = "Active Above RPM", egoRPM, { egoType > 0 }
+ field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
+ field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
+ field = "Active Above MAP", MAPOXMin, { egoType > 0 }
+ field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
+
+ field = "#WB Controller Settings"
+ field = "Algorithm", egoAlgorithm, { egoType > 0 }
+ field = "EGO Delay After Start", ego_startdelay, { egoType > 0 }
+ field = "PID Proportional Gain", egoKP, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Integral", egoKI, { egoType > 0 && egoAlgorithm > 1 }
+ field = "PID Derivative", egoKD, { egoType > 0 && egoAlgorithm > 1 }
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy,EDIS,wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 != 54)};
+ field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
+; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
+ field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number of coils", spk_mode3, { (spk_mode0 > 1) }
+ field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
+ field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Flip Polarity On Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing For Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell Type", dwellmode
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED Indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_conf2_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, {(spk_mode0 == 4) }
+ field = "Trigger Wheel Teeth", triggerTeeth, {(spk_mode0 == 4) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
+ field = "Wheel Speed", spk_config_camcrank, {(spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && (spk_mode0 == 4)}
+ field = "Level For Phase 1", spk_config_campol, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && (spk_mode0 == 4)}
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Duty", pwmidle_closed_duty
+ field = "Idle Valve Open Duty", pwmidle_open_duty
+ field = "Dashpot Adder", pwmidle_dp_adder
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Closed Steps", pwmidle_closed_steps
+ field = "Idle Valve Open Steps", pwmidle_open_steps
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 means do not close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
+ field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
+ slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
+ field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
+ field = "Load Threshold (Min)", pwmidle_decelload_threshold
+ field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
+ field = "PID Lockout On Switch Active", ClutchPIDEntry
+ field = "Sliding Window Smoothing"
+ field = "PID RPM Window Size (1=Off)", pidrpm_window
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value at 0.0 volts", map0
+ field = "Value at 5.0 volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings2, ""
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option }
+ field = "#Detection"
+ field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
+ field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
+
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Step Size", knk_step1, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step2, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ panel = knockSettings2, West
+ panel = knockthresh_curve, East, {knk_option_an}
+
+ dialog = idleAdvance, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Apply As:", idleadvance_adder, { idleadvance_on }
+ field = "Go To Idle Advance When:"
+ field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
+ field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
+ field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
+ field = "#Advanced users only."
+ field = "Changing this setting is not recommended."
+ field = "Megasquirt Baud Rate", baud
+ field = "Communications -> Settings -> Baud Rate must match."
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = base3, "", yAxis
+ field = ""
+ field = ""
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
+ panel = base2, West
+ panel = seq_injection, East
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Connection", IdleCtl_out, { IdleCtl == 3 }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
+ field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
+ field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = outmsg5_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg5_offset01
+ field = "02", outmsg5_offset02
+ field = "03", outmsg5_offset03
+ field = "04", outmsg5_offset04
+ field = "05", outmsg5_offset05
+ field = "06", outmsg5_offset06
+ field = "07", outmsg5_offset07
+ field = "08", outmsg5_offset08
+ field = "09", outmsg5_offset09
+ field = "10", outmsg5_offset10
+ field = "11", outmsg5_offset11
+ field = "12", outmsg5_offset12
+ field = "13", outmsg5_offset13
+ field = "14", outmsg5_offset14
+ field = "15", outmsg5_offset15
+ field = "16", outmsg5_offset16
+
+ dialog = outmsg5_size, "", yAxis
+ field = " Size"
+ field = "", outmsg5_size01
+ field = "", outmsg5_size02
+ field = "", outmsg5_size03
+ field = "", outmsg5_size04
+ field = "", outmsg5_size05
+ field = "", outmsg5_size06
+ field = "", outmsg5_size07
+ field = "", outmsg5_size08
+ field = "", outmsg5_size09
+ field = "", outmsg5_size10
+ field = "", outmsg5_size11
+ field = "", outmsg5_size12
+ field = "", outmsg5_size13
+ field = "", outmsg5_size14
+ field = "", outmsg5_size15
+ field = "", outmsg5_size16
+
+ dialog = outmsg5, "Outmsg 5", xAxis
+ panel = outmsg5_off
+ panel = outmsg5_size
+
+ dialog = outmsg6_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg6_offset01
+ field = "02", outmsg6_offset02
+ field = "03", outmsg6_offset03
+ field = "04", outmsg6_offset04
+ field = "05", outmsg6_offset05
+ field = "06", outmsg6_offset06
+ field = "07", outmsg6_offset07
+ field = "08", outmsg6_offset08
+ field = "09", outmsg6_offset09
+ field = "10", outmsg6_offset10
+ field = "11", outmsg6_offset11
+ field = "12", outmsg6_offset12
+ field = "13", outmsg6_offset13
+ field = "14", outmsg6_offset14
+ field = "15", outmsg6_offset15
+ field = "16", outmsg6_offset16
+
+ dialog = outmsg6_size, "", yAxis
+ field = " Size"
+ field = "", outmsg6_size01
+ field = "", outmsg6_size02
+ field = "", outmsg6_size03
+ field = "", outmsg6_size04
+ field = "", outmsg6_size05
+ field = "", outmsg6_size06
+ field = "", outmsg6_size07
+ field = "", outmsg6_size08
+ field = "", outmsg6_size09
+ field = "", outmsg6_size10
+ field = "", outmsg6_size11
+ field = "", outmsg6_size12
+ field = "", outmsg6_size13
+ field = "", outmsg6_size14
+ field = "", outmsg6_size15
+ field = "", outmsg6_size16
+
+ dialog = outmsg6, "Outmsg 6", xAxis
+ panel = outmsg6_off
+ panel = outmsg6_size
+
+ dialog = outmsg7_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg7_offset01
+ field = "02", outmsg7_offset02
+ field = "03", outmsg7_offset03
+ field = "04", outmsg7_offset04
+ field = "05", outmsg7_offset05
+ field = "06", outmsg7_offset06
+ field = "07", outmsg7_offset07
+ field = "08", outmsg7_offset08
+ field = "09", outmsg7_offset09
+ field = "10", outmsg7_offset10
+ field = "11", outmsg7_offset11
+ field = "12", outmsg7_offset12
+ field = "13", outmsg7_offset13
+ field = "14", outmsg7_offset14
+ field = "15", outmsg7_offset15
+ field = "16", outmsg7_offset16
+
+ dialog = outmsg7_size, "", yAxis
+ field = " Size"
+ field = "", outmsg7_size01
+ field = "", outmsg7_size02
+ field = "", outmsg7_size03
+ field = "", outmsg7_size04
+ field = "", outmsg7_size05
+ field = "", outmsg7_size06
+ field = "", outmsg7_size07
+ field = "", outmsg7_size08
+ field = "", outmsg7_size09
+ field = "", outmsg7_size10
+ field = "", outmsg7_size11
+ field = "", outmsg7_size12
+ field = "", outmsg7_size13
+ field = "", outmsg7_size14
+ field = "", outmsg7_size15
+ field = "", outmsg7_size16
+
+ dialog = outmsg7, "Outmsg 7", xAxis
+ panel = outmsg7_off
+ panel = outmsg7_size
+
+ dialog = outmsg8_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg8_offset01
+ field = "02", outmsg8_offset02
+ field = "03", outmsg8_offset03
+ field = "04", outmsg8_offset04
+ field = "05", outmsg8_offset05
+ field = "06", outmsg8_offset06
+ field = "07", outmsg8_offset07
+ field = "08", outmsg8_offset08
+ field = "09", outmsg8_offset09
+ field = "10", outmsg8_offset10
+ field = "11", outmsg8_offset11
+ field = "12", outmsg8_offset12
+ field = "13", outmsg8_offset13
+ field = "14", outmsg8_offset14
+ field = "15", outmsg8_offset15
+ field = "16", outmsg8_offset16
+
+ dialog = outmsg8_size, "", yAxis
+ field = " Size"
+ field = "", outmsg8_size01
+ field = "", outmsg8_size02
+ field = "", outmsg8_size03
+ field = "", outmsg8_size04
+ field = "", outmsg8_size05
+ field = "", outmsg8_size06
+ field = "", outmsg8_size07
+ field = "", outmsg8_size08
+ field = "", outmsg8_size09
+ field = "", outmsg8_size10
+ field = "", outmsg8_size11
+ field = "", outmsg8_size12
+ field = "", outmsg8_size13
+ field = "", outmsg8_size14
+ field = "", outmsg8_size15
+ field = "", outmsg8_size16
+
+ dialog = outmsg8, "Outmsg 8", xAxis
+ panel = outmsg8_off
+ panel = outmsg8_size
+
+ help = helpGeneral, "MS2/Extra General Help"
+ webHelp = "http://www.msextra.com"
+ text = "For current documentation and support questions visit
"
+ text = "http://www.msextra.com/"
+ text = "
"
+ text = "MS2/Extra is licensed for use only on:"
+ text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
+ text = "
- custom ECUs based on the Microsquirt module"
+ text = "
"
+ text = "
See the LICENSE.txt that was supplied with this firmware."
+ text = "
"
+ text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+;-------------------------------------------------------------------------------
+
+[PortEditor]
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = rmt_port_edit, "Remote On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
+ outputOffset = rmt_psOutOffset
+ outputSize = rmt_psOutSize
+ operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = rmt_psThreshold
+ hysteresis = rmt_psHysteresis
+ powerOnValue = rmt_psInitValue
+ triggerValue = rmt_psPortValue
+ conditionRelationship = rmt_psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = std_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
+ enabledPorts = psEnabled, "FIDLE", "Tach out", "ALED", "WLED", "INVALID", "INVALID", "INVALID"
+
+ ; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
+ outputCanId = psCanId
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+;-------------------------------------------------------------------------------
+[CurveEditor]
+
+ curve = knockthresh_curve, "Knock input threshold"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = tpswot_curve, "TPS WOT curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
+ columnLabel = "Flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+;no help needed
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+;no help needed
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
+ columnLabel = "MAF volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = 0, {650 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM Duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment Percentage"
+;no help needed
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+;upper limits too high, but have to leave them there so data is visible in TS.
+#if CELSIUS
+ xAxis = -40, 300, 9
+#else
+ xAxis = -40, 300, 9
+#endif
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = airtempGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air Density"
+;no help needed
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-Walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+;no help needed
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment Curve"
+;no help needed
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_load_curve, "Idle Load Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
+ columnLabel = "RPM", "deg"
+ xAxis = 500, 1500, 6
+ yAxis = -20, 90, 6
+ xBins = idleadvance_rpms, rpm
+ yBins = idleadvance_curve
+
+ curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
+ columnLabel = "RPM delta", "deg"
+ xAxis = -250, 250, 6
+ yAxis = -20, 20, 6
+ xBins = idleadvance_rpmsdelta, rpm_target_error_follower
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, 255, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+;no help needed
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, {rpmhigh}, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load At TPS Switchpoint"
+; no help needed
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+;no help needed
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -15, 15, 6
+ xBins = idle_voltage_comp_voltage, batteryVoltage
+ yBins = idle_voltage_comp_delta
+
+[TableEditor]
+ ; table_id, map3d_id, "title", page
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = stagedTable, stagedMap, "Staged Injection table", 3
+;no help needed
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+;same again but 12x12
+ table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1doz, rpm
+ yBins = fmap_table1doz, fuelload
+ zBins = veTable1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
+ xBins = frpm_table2doz, rpm
+ yBins = fmap_table2doz, fuelload2
+ zBins = veTable2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3doz, rpm
+ yBins = fmap_table3doz, fuelload
+ zBins = veTable3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, afrload1
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
+ xBins = srpm_injadv1, rpm
+ yBins = smap_injadv1, fuelload
+ zBins = injadvTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
+ xBins = srpm_injadv2, rpm
+ yBins = smap_injadv2, fuelload
+ zBins = injadvTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
+ xBins = srpm_injadv3, rpm
+ yBins = smap_injadv3, fuelload
+ zBins = injadvTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+;std 16x16
+ table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1, rpm
+ yBins = fmap_trim1, fuelload
+ zBins = veTrim1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2, rpm
+ yBins = fmap_trim2, fuelload
+ zBins = veTrim2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3, rpm
+ yBins = fmap_trim3, fuelload
+ zBins = veTrim3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4, rpm
+ yBins = fmap_trim4, fuelload
+ zBins = veTrim4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;same again but 12x12
+ table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
+ ; constant, variable
+ xBins = frpm_trim1doz, rpm
+ yBins = fmap_trim1doz, fuelload
+ zBins = veTrim1dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
+ ; constant, variable
+ xBins = frpm_trim2doz, rpm
+ yBins = fmap_trim2doz, fuelload
+ zBins = veTrim2dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
+ ; constant, variable
+ xBins = frpm_trim3doz, rpm
+ yBins = fmap_trim3doz, fuelload
+ zBins = veTrim3dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
+ ; constant, variable
+ xBins = frpm_trim4doz, rpm
+ yBins = fmap_trim4doz, fuelload
+ zBins = veTrim4dozen
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Target Table", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;-------------------------------------------------------------------------------
+
+[GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Notes on some of the gauges.
+ ;
+ ; The accelEnrichGauge is now a composite of both acceleration enrichment
+ ; and deceleration enleanment numbers. See the definition of the variable
+ ; accDecEnrich in the OutputChannels section.
+ ;
+ ; David Hooke contributed the lambda gauge and associated transfer
+ ; function files.
+ ;
+ ; The lambda gauge is the best way (my opinion) to report data from a
+ ; wide band EGO gauge, it standardizes the output irrespective of fuel
+ ; or mix of fuels, so you needn't do any brainwork to know if your 75%
+ ; gasoline and 25% methanol is rich at 10:1 or not.
+ ;
+ ; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
+ ; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+gaugeCategory = "Outputs"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+ injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
+
+gaugeCategory = "Calculations 1"
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
+ gammaairGauge = airCorrection, "Air Density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel On The Walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel On The Walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
+ flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
+
+gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
+ lostsyncGauge = synccnt, "Lost Sync Counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost Sync Reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ boost_target = boost_targ, "Boost Target", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ coldAdvGauge = coldAdvDeg, "Cold Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+gaugeCategory = "Sensor inputs 1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 1
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+
+gaugeCategory = "Sensor inputs 2"
+ gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+ adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
+#if CELSIUS
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
+ #endif
+#else
+ #if EGTFULL
+ egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
+ #else
+ egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
+ #endif
+#endif
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+
+gaugeCategory = "AFR/EGO inputs+calcs"
+ afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
+ egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+ egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
+
+ lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "X-Code dev"
+; for diagnotics
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+; gauge4 = pulseWidth2Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoVGauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+; gauge8 = injadv2Gauge
+ gauge8 = lostsyncGauge
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+ ; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+ ;
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel Enrich", "TPS Accel Enrich", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+;optional ones
+ indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
+ indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
+ indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
+ indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
+ indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
+ indicator = { status2 & 16}, "Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL idle", "CL idle", white, black, green, black
+ indicator = { knock }, "Knock", "Knock", white, black, red, black
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "MAPsample error!", "MAPsample error!", white, black, red, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "AC", "AC", white, black, green, black
+
+#if PORT_STATUS
+ indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
+ indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
+
+ indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
+
+ indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
+ indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
+#endif
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+#if CELSIUS
+
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 100
+#else
+ coolantBar = -40, {clthighlim}
+ matBar = -40, 215
+#endif
+
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, 8000
+ throttleBar = 0, 100
+
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+
+ ochBlockSize = 212 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+;full version that works anywhere
+ ochGetCommand = "r\$tsCanId\x07%2o%2c"
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+ pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
+ pulseWidth = { pulseWidth1 }, "s" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1 = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
+ lambda1 = { afr1 / 14.7 }, "Lambda"
+ lambda2 = { afr2 / 14.7 }, "Lambda"
+ knock = scalar, U16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.100, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.100, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "", 0.392, 0.0
+
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.0666, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.100, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
+
+ portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
+ port0 = bits, U08, 70, [0:0]
+ port1 = bits, U08, 70, [1:1]
+ port2 = bits, U08, 70, [2:2]
+ port3 = bits, U08, 70, [3:3]
+ port4 = bits, U08, 70, [4:4]
+ port5 = bits, U08, 70, [5:5]
+ port6 = bits, U08, 70, [6:6]
+
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ looptime = scalar, U16, 82, "us", 0.6667, 0.0
+ status5 = scalar, U16, 84, "us", 1, 0 ; istatus5
+ tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
+ ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
+;spare[5] were in here - removed
+ synccnt = scalar, U08, 94, "", 1, 0
+ timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
+ deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
+ ; "fills in" missing teeth (only used with EDIS)
+ wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
+
+ gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
+ gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
+ gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
+ gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
+ gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
+ gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
+ gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
+ gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
+
+ gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
+ gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
+ gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
+ gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
+;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
+ adc6 = scalar, U16, 128, "", 1, 0.0
+ adc7 = scalar, U16, 130, "", 1, 0.0
+ wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
+ EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
+ boostduty = scalar, U08, 138 , "%", 1.0, 0.0
+ syncreason = scalar, U08, 139, "", 1.0, 0.0
+ user0 = scalar, U16, 140, "", 1.0, 0.0
+
+ inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
+ inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
+ pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
+ pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
+ vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
+ vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
+ vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
+ vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
+ maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
+ afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
+ RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
+
+ gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
+ gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
+ gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
+; *spare *
+ cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
+ maf_volts = scalar, U16, 172, "V", 0.001, 0.0
+#if CELSIUS
+ airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 174, "°F", 0.100, 0.0
+#endif
+ dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
+ fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
+ boost_targ = scalar, S16, 180, "%", 0.1, 0
+
+ ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 184, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 192, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 194, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 196, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
+ nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
+ deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
+ n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
+ portbde = scalar, U08, 206, "", 1.0, 0.0
+ portam = scalar, U08, 207, "", 1.0, 0.0
+ portt = scalar, U08, 208, "", 1.0, 0.0
+ can_error_cnt = scalar, U08, 209, "", 1,0
+ can_error = scalar, U16, 210, "", 1,0
+; can_error_rxovr = bits, U08, 210, [0:0]
+; can_error_rxwrn = bits, U08, 210, [1:1]
+; can_error_rxerr = bits, U08, 210, [2:2]
+; can_error_txwrn = bits, U08, 210, [3:3]
+; can_error_txerr = bits, U08, 210, [4:4]
+; can_error_pass = bits, U08, 210, [5:5]]
+; can_error_oor = bits, U08, 210, [6:6]
+; can_error_pass2 = bits, U08, 210, [7:7]
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ altDiv1 = { alternate ? 2 : 1 }
+ altDiv2 = { alternate ? 2 : 1 }
+
+ cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts1 = { nCylinders/divider }
+ dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
+
+ cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+#elif LAMBDA
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+#endif
+
+; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
+; European thermocouples may require a different calculation
+; The K type thermocouple output is not precisely linear, so these
+; calculations are an approximation.
+; 0degC is close enough to 0V
+; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
+; So temp = adc/1025 * 1250 or adc * 1.222
+#if EGTFULL
+#if CELSIUS
+ egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+ egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
+#else
+ egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+ egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
+#endif
+#else ; normal 0-1000 range
+; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
+#if CELSIUS
+ egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+ egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
+#else
+ egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+ egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
+#endif
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. Be careful --
+;-- about changing these, as programs like MSLVV and --
+;-- MSTweak key off specific column names. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = maf, "MAF", float, "%.01f", { MAFOption }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption }
+#if NARROW_BAND_EGO
+ entry = egoV, "O2", float, "%.3f"
+ entry = egoV2, "O2-2", float, "%.3f"
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f"
+ entry = lambda2, "Lambda2", float, "%.3f"
+#else
+ entry = afr1, "AFR", float, "%.2f"
+ entry = afr2, "AFR2", float, "%.2f"
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egoCorrection1, "EGO cor1", float, "%.1f"
+ entry = egoCorrection2, "EGO cor2", float, "%.1f"
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+
+ entry = accEnrichMS, "Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%d"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "DutyCycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "DutyCycle2", float, "%.1f"
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance, "SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
+ entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+
+ entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "WallFuel2", int, "%d", {EAEOption}
+ entry = EAEFuelCorr1, "EAE1 %", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2 %", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary Load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary Ign Load", float, "%.1f"
+ entry = eaeload1, "EAE Load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR Load", float, "%.1f"
+ entry = egt6temp, "EGT 6 temp", int, "%d"
+ entry = egt7temp, "EGT 7 temp", int, "%d"
+ entry = adc6, "ADC6", int, "%d"
+ entry = adc7, "ADC7", int, "%d"
+
+ entry = gpioadc0, "gpioadc0", int, "%d"
+ entry = gpioadc1, "gpioadc1", int, "%d"
+ entry = gpioadc2, "gpioadc2", int, "%d"
+ entry = gpioadc3, "gpioadc3", int, "%d"
+ entry = gpioadc4, "gpioadc4", int, "%d"
+ entry = gpioadc5, "gpioadc5", int, "%d"
+ entry = gpioadc6, "gpioadc6", int, "%d"
+ entry = gpioadc7, "gpioadc7", int, "%d"
+
+ entry = status1, "status1", int, "%d"
+ entry = status2, "status2", int, "%d"
+ entry = status3, "status3", int, "%d"
+ entry = status4, "status4", int, "%d"
+ entry = status5, "status5", int, "%d"
+ entry = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
+ entry = timing_err, "Timing Err%", float, "%.1f"
+ entry = afrtgt1, "AFR Target 1", float, "%.1f"
+
+ entry = synccnt, "Lost Sync Count", int, "%d"
+ entry = syncreason, "Lost Sync Reason", int, "%d"
+
+ entry = inj_adv1, "InjTiming1", float, "%.1f"
+ entry = inj_adv2, "InjTiming2", float, "%.1f"
+ entry = pulseWidth3, "PW3", float, "%.3f"
+ entry = pulseWidth4, "PW4", float, "%.3f"
+ entry = vetrim1curr, "VE Trim 1", float, "%.1f"
+ entry = vetrim2curr, "VE Trim 2", float, "%.1f"
+ entry = vetrim3curr, "VE Trim 3", float, "%.1f"
+ entry = vetrim4curr, "VE Trim 4", float, "%.1f"
+ entry = knock, "Knock In", float, "%.1f"
+ entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
+ entry = portbde, "PORTs BDE", int, "%d"
+ entry = portam, "PORTs AM", int, "%d"
+ entry = portt, "PORT T", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms3/0523.15.ini b/src/ini/ms3/0523.15.ini
new file mode 100644
index 0000000..2ff9d12
--- /dev/null
+++ b/src/ini/ms3/0523.15.ini
@@ -0,0 +1,14312 @@
+;-------------------------------------------------------------------------------
+; $Id: core.ini,v 1.365.4.39 2015/07/09 18:13:15 jsmcortina Exp $
+;
+; This ini file is Copyright 2007,2008,2009,2010,2011,2012,2013,2014,2015 James Murray and Kenneth Culver.
+; It is only to be used with a licensed MS3 product.
+;
+; Original author(s) uncertain. Contains work of Eric Fahlgren
+; Re-written to support MS3
+;
+;
+; configuration defines, either #set or #unset
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
+#set CAN_COMMANDS
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset INTERNAL_LOG_FIELDS
+#unset PW_4X
+#unset CYL_12_16_SUPPORT
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ signature = "MS3 Format 0523.15 " ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+#if INI_VERSION_2
+; ok
+#else
+ #error Megatune cannot be used with MS3 - please upgrade to TunerStudio
+#endif
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v"
+#if CAN_COMMANDS
+ tableBlockingFactor = 256 ; just in case MS2 is used
+#else
+ tableBlockingFactor = 2048
+#endif
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+; solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") } ; file is not valid, use new method instead
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor - Volts"
+ settingOption = LAMBDA, "Wideband - Lambda"
+ settingOption = DEFAULT, "WideBand - AFR" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ wue_lpg = bits, U08, [0:0], "No", "Yes"
+ vehigh = scalar, U16, "%", 1, 0, 100, 600, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ sensor01Alias = string, ASCII, 20
+ sensor02Alias = string, ASCII, 20
+ sensor03Alias = string, ASCII, 20
+ sensor04Alias = string, ASCII, 20
+ sensor05Alias = string, ASCII, 20
+ sensor06Alias = string, ASCII, 20
+ sensor07Alias = string, ASCII, 20
+ sensor08Alias = string, ASCII, 20
+ sensor09Alias = string, ASCII, 20
+ sensor10Alias = string, ASCII, 20
+ sensor11Alias = string, ASCII, 20
+ sensor12Alias = string, ASCII, 20
+ sensor13Alias = string, ASCII, 20
+ sensor14Alias = string, ASCII, 20
+ sensor15Alias = string, ASCII, 20
+ sensor16Alias = string, ASCII, 20
+
+ scatterRuntimeEnabled = bits, U08, [0:0], "Disabled", "Enabled"
+
+ portLabels = bits, U08, [0:8], "unused", "injection LED", "warmup LED", "squirt LED", "fuel pump", "PWM or on/off idle", "stepper idle", "primary injectors", "secondary injectors", "a programmable on/off output", "spark outputs", "HEI bypass", "knock", "MAF", "MAP", "baro", "EGO", "tacho out", "A/C idleup out", "A/C idleup in", "fan out", "boost out", "N2O stage 1 nitrous", "N2O stage 1 fuel", "N2O stage 2 nitrous", "N2O stage 2 fuel", "N2O in", "launch in", "variable launch in", "3 step in", "datalog button", "datalog LED", "bike shift in", "bike shift out", "generic PWM A", "generic PWM B", "generic PWM C", "generic PWM D", "generic PWM E", "generic PWM F", "datalog stream", "dual fuel in", "fuel tableswitch", "spark tableswitch", "boost tableswitch", "overboost tableswitch", "ReqFuel switch", "AFR tableswitch", "stoich switch", "max AFR safety switch", "accelerometer X", "accelerometer Y", "accelerometer Z", "vss out", "water inj pump", "water inj valve", "water inj in", "ignition trigger LED", "flex fuel in", "cam input", "vss1 in", "vss2 in", "speed sensor 1 in", "speed sensor 2 in", "gear position in", "anti-lag in", "anti-lag out", "anti-lag PWM out", "Boost 2 out", "EGT 1 in", "EGT 2 in", "EGT 3 in", "EGT 4 in", "EGT 5 in", "EGT 6 in", "EGT 7 in", "EGT 8 in", "EGT 9 in", "EGT 10 in", "EGT 11 in", "EGT 12 in", "EGT 13 in", "EGT 14 in", "EGT 15 in", "EGT 16 in", "Generic Sensor 1 in", "Generic Sensor 2 in", "Generic Sensor 3 in", "Generic Sensor 4 in", "Generic Sensor 5 in", "Generic Sensor 6 in", "Generic Sensor 7 in", "Generic Sensor 8 in", "Generic Sensor 9 in", "Generic Sensor 10 in", "Generic Sensor 11 in", "Generic Sensor 12 in", "Generic Sensor 13 in", "Generic Sensor 14 in", "Generic Sensor 15 in", "Generic Sensor 16 in", "VVT 1 output", "VVT 2 output", "VVT 3 output", "VVT 4 output", "VVT cam 2/3/4 input", "Real Time Clock", "Torque Convertor Lockup", "Traction control", "Rotary trailing dwell timer", "Internal SPI2", "2nd MAP", "Long Term Trim button", "dual-fuel injectors", "launch timed in", "launch timed out", "throttle stop", "check engine light", "vss3 in", "vss4 in", "Staged inj switch output 1", "Alternator control output", "Alternator load monitor input", "Alternator current monitor input", "Alternator lamp output", "Staged inj switch output 1", "Shift light output", "Oil pressure warning output", "TCS input", "MAP2", "Generic Closed-Loop Out 1", "Generic Closed-Loop Out 2", "Line-lock staging input", "Line-lock staging output", "SDcard trigger output", "Pit limiter input", "TC LED out", "Dome fill out", "Dome empty out"
+ prefSpeedUnits = bits, U08, [0:0], "MPH", "KPH"
+ prefLengthUnits = bits, U08, [0:0], "m", "in"
+
+[LoggerDefinition]
+ ; valid logger types: composite, tooth, trigger, csv
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mafAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+ calcField = mapValue, "MAF Freq", "Hz", { (MAFOption_t == 0 || (!(mafAdc > 0))) ? 0 : (maf_freq1 > 62.5) ? (1000000 / (32 * mafAdc)) : (1000000 / (128 * mafAdc)) }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+[TurboBaud]
+ turboBaudOnCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x51"
+ turboBaudOffCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x50"
+
+ ; turboBaudSpeed defines the speed for
+ ; TS to set the PC baud to when turboBaud is activated
+ turboBaudSpeed = { baudhigh } ; reference the Constant so they will always be in sync with one setting.
+ sdTurboActive = { 1 } ; this can reference a Constant or PcVariable in order to make it user selectable.
+ runtimeTurboActive = { 0 }
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+; updated settings from "new" serial
+ pageActivationDelay = 1
+ blockReadTimeout = 500
+ tsWriteBlocks = on
+; writeBlocks = on
+ interWriteDelay = 0
+
+;Relationship between TS pages and MS3 pages
+;TS MS3 internal
+;MS3 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS3 internal pages 6,7 are outpc,txbuf
+;3 8
+;4 9
+;5 10
+;6 11
+;7 12
+;8 13
+;9 18
+;10 19
+;11 21
+;12 22
+;13 23
+;14 24
+;15 25
+;16 26 ; RAM only page
+;17 27
+;18 28
+
+ endianness = big
+ nPages = 19
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0a", "\$tsCanId\x0b", "\$tsCanId\x0c", "\$tsCanId\x0d", "\$tsCanId\x12", "\$tsCanId\x13", "\$tsCanId\x15", "\$tsCanId\x16", "\$tsCanId\x17", "\$tsCanId\x18", "\$tsCanId\x19", "\$tsCanId\x1a", "\$tsCanId\x1b", "\$tsCanId\x1c", "\$tsCanId\x1d"
+ burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "", "b%2i", "b%2i", "b%2i"
+ pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c"
+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ crc32CheckCommand = "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04"
+
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0 ; TS could use the 'F' command to determine this automatically.
+
+ ;TS could use the 'f' command to determine this automatically. Will change if using CAN passthrough
+#if CAN_COMMANDS
+ blockingFactor = 256 ; just in case MS2 is used
+#else
+ blockingFactor = 2048
+#endif
+
+ validateArrayBounds = true
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 10.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; ICIgnOption
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+
+ max_coil_dur = scalar, U08, 3, "ms", 0.1000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 4, "ms", 0.1000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+; dwellAcc = scalar, U08, 5, "ms", 0.1000, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte)
+ crankingRPM = scalar, S16, 6, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ triggerOffset = scalar, S16, 8, "deg", 0.10000, 0.00000, -90.0, 380.00, 1 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 10, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+; RevLimRpm2 = scalar, S16, 12, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+
+ map0 = scalar, S16, 14, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 16, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 18, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 22, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 18, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 22, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 24, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 26, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 28, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 30, "V", 0.10000, 0.00000, -10, 10, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 32, "V", 0.10000, 0.00000, 10, 100, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 34, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 36, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 38, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 40, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 42, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 44, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ iacfullopen = scalar, U16, 46, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+ reluctorteeth1 = scalar, U16, 48, "", 0.01, 0,0,255,2 ; this is VSS1
+ crankTolerance = scalar, U08, 50, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 51, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 52, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+; IdleCtl = bits , U08, 53, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ IdleCtl = bits , U08, 53, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 53, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_vss = bits , U08, 53, [4:4], "Standard", "Use VSS"
+ IdleCtl_home = bits , U08, 53, [5:5], "Closed", "Open"
+ IACtstep = scalar, U08, 54, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IAC_tinitial_step=scalar, U08, 55, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 56, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 57, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 58, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 60, "°C", 0.05555, 0.00000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ IdleHyst = scalar, S16, 60, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ IACcrankpos = scalar, S16, 62, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcrankxt = scalar, S16, 64, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 66, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+;gap
+ reluctorteeth2 = scalar, U16, 68, "", 0.01, 0,0,255,2 ; this is VSS2
+ boosttol = scalar, S16, 70, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ OverBoostKpa2 = scalar, S16, 72, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fc_rpm_lower = scalar, U16, 74, "rpm", 1.00000, 0.0, 0.0, {rpmhigh}, 0 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 76, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 76, [2:2], "Off", "On"
+ hardware_spk = bits, U08, 77, [0:2], "JS10 spark", "LEDs spark", "MS3X spark", "INVALID", "Tacho", "INVALID", "INVALID", "INVALID"
+ hardware_fuel = bits, U08, 77, [4:4], "Std fuel", "MS3X fuel"
+ hardware_injij = bits, U08, 77, [5:5], "Mainboard", "H3+H4"
+ hardware_cam = bits, U08, 77, [6:7], "JS10", "MS3X Cam in", "MAP sensor", "INVALID"
+ OverBoostKpa = scalar, S16, 78, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 80, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+ N2Olaunchmaxmap = scalar, S16, 82, "kPa", 0.1, 0, 100, {loadhigh}, 1
+ tpsThresh = scalar, S16, 84, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 86, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 88, "%ReqFuel", 1, 0.00000, 0, 255, 0 ; * ( 1 byte) ; Tpsacold
+ taeColdM = scalar, U08, 89, "%", 1.00000, 0.00000, 100, 255.00, 0 ; * ( 1 byte) ; AccMult
+ taeTime = scalar, U08, 90, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync
+ tpsasync_events = scalar, U08, 90, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync
+ tdePct = scalar, U08, 91, "", 1.00000, 0.00000, 50.00, 100.00, 0 ; * ( 1 byte) ; TPSDQ
+ floodClear = scalar, S16, 92, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes) ; TPSWOT
+ TPSOXLimit = scalar, S16, 94, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes) ; TPSOXLimit
+ tpsProportion = scalar, U08, 96, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) ; Tps_acc_wght
+ baroCorr = bits , U08, 97, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"; BaroOption
+ egoType = bits , U08, 98, [0:1], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
+ egoCount = scalar, U08, 99, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 100, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 101, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ EGOVtarget = scalar, U08, 102, "Volts", 0.00489, 0.00000, 0.00, 1, 3
+ tempUnits = bits , U08, 103, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ egonum = scalar, U08, 104, "", 1, 0, 0, 16, 0
+ rtc_trim = scalar, S08, 105, "ppm", 1, 0, -127, +127, 0
+#if CELSIUS
+ fastIdleT = scalar, S16, 106, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 108, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fastIdleT = scalar, S16, 106, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ egoTemp = scalar, S16, 108, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ egoRPM = scalar, U16, 110, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+#if PW_4X
+ reqFuel = scalar, U16, 112, "ms", 0.004, 0.00000, 0.00, 262.143, 2 ; * ( 2 bytes)
+#else
+ reqFuel = scalar, U16, 112, "ms", 0.001, 0.00000, 0.00, 65.535, 2 ; * ( 2 bytes)
+#endif
+ divider = scalar, U08, 114, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 115, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 115, [1:1], "Every event", "Alternate events"
+ alternate_blend = bits, U08, 115, [2:2], "Off", "Blend Curve (7)"
+ injPwmT = scalar, U08, 116, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 117, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 118, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 119, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary" ; *
+; injType = bits, U08, 120, [0:0], "Port Injection", "Throttle Body" ; * not used by code
+ nInjectors = bits, U08, 121, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ OddFireang = scalar, U16, 122, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 124, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 125, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 126, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 127, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 128, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ knk_pin_out = bits, U08, 129, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ mafLF = scalar, U08, 130, "", 1.00000, 0.00000, 10.00, 100.00, 0
+;gap
+ algorithm = bits, U08, 132, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ algorithm2 = bits, U08, 132, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm = bits, U08, 133, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm2 = bits, U08, 133, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ AfrAlgorithm = scalar, U08, 134, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 135, "ms", 0.10000, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 136, "deg", 0.1, 0, 5, 180,1
+ RevLimOption_retard = bits,U08, 138, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 138, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 138, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 138, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 138, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 139, "deg", 0.10000, 0.00000,0, 25.5, 0 ; * ( 1 byte)
+ ego_startdelay = scalar, U08, 140, "s", 1, 0, 0, 120, 0
+ can_poll2_ego = bits, U08, 141, [0:0], "Disable", "Enable" ; old setting
+ can_poll2_ego2 = bits, U08, 141, [0:0], "Disable", "Innovate format"
+ can_poll2_gps = bits, U08, 141, [1:2], "Off", "JBperf GPS", "INVALID", "INVALID"
+ can_poll2_vss = bits, U08, 141, [3:3], "Listen", "Poll"
+ can_poll2_egolag= bits, U08, 141, [4:4], "Off", "On"
+ opt142_rtc = bits, U08, 142, [0:1], "Off", "On-board", "CAN", "INVALID"
+ opt142_gs_share = bits, U08, 142, [2:2], "Off", "On"
+ injPwmT2 = scalar, U08, 143, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 144, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 145, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ can_ego_id = scalar, U08, 146, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_ego_table = scalar, U08, 147, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_ego_offset = scalar, U16, 148, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ baro_upper = scalar, S16, 150, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_lower = scalar, S16, 152, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_default = scalar, S16, 154, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 156, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ launchcutzone = scalar, S16, 158, "RPM", 1.00000, 0.00000, 0.00, 1000, 0
+ RevLimNormal2 = scalar, S16, 160, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ hw_latency = scalar, U08, 162, "usec", 1.0, 0.00000, 0.00, 255.00, 0
+;next three are loadopts in the firmware
+ loadCombine = bits, U08, 163, [0:1], "additive", "multiplicitive", "Blend Curve (1)", "INVALID"
+ loadMult = bits, U08, 163, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 163, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadCombineign = bits, U08, 163, [4:4], "additive", "Blend Curve (2)"
+ loadMult2 = bits, U08, 163, [5:5], "don't multiply", "multiply"
+ loadopts_oldbaro= bits, U08, 163, [6:6], "Off", "On"
+ baud = scalar, U32, 164, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 168, "%", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ can_poll_id_rtc = scalar, U08, 170, "", 1.00000, 0.00000, 0.00, 14, 0
+ mycan_id = scalar, U08, 171, "", 1.00000, 0.00000, 0.00, 14, 0
+ mapsample_percent = scalar, U08, 172, "%", 1.00000, 0.00000, 0.00, 50, 0
+ can_poll_id_ports = scalar, U08, 173, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id = scalar, U08, 174, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ aeTaperTime = scalar, U08, 175, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync2
+ tpsasync2_events= scalar, U08, 175, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync2
+ aeEndPW = scalar, S16, 176, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 ; * tpsaccel2 ; TpsAccel2
+ egoAlgorithm = bits , U08, 178, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
+ egoAlgorithm_auth=bits , U08, 178, [2:2], "Off", "On"
+ egoAlgorithm_delay_table=bits, U08, 178, [3:3], "Use IGN events", "Use delay table"
+ egoKP = scalar, U08, 179, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 180, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 181, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+
+ ac_idleup_vss_offpoint = scalar, U16, 182, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ ac_idleup_vss_hyst = scalar, U16, 184, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 186, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 186, [1:2], "PE0/JS7", "JS11", "Flex input", "INVALID"; (1 byte )
+ fuelFreq = array , U08, 187, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 187, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 188, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 189, [ 2], "%", 1.00000, 0.00000, 50, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 189, "%", 1.00000, 0.00000, 50, 255, 0
+ fuelCorr1 = scalar, U08, 190, "%", 1.00000, 0.00000, 50, 255, 0
+
+ dwellmode = bits , U08, 191, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ pwmidle_shift_lower_rpm = scalar, U16, 192, "rpm", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ ac_idleup_tps_offpoint = scalar, S16, 194, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ ac_idleup_tps_hyst = scalar, S16, 196, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_tps_offpoint = scalar, S16, 198, "%", 0.10000, 0.00000, 0.00, 150.00, 1
+ fan_idleup_tps_hyst = scalar, S16, 200, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_vss_offpoint = scalar, U16, 202, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200.00, 0
+
+ knk_option = bits , U08, 204, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knk_option_an = bits , U08, 204, [2:3], "On/Off", "Analogue", "INVALID", "Internal"
+ knkDirection = bits , U08, 204, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 204, [5:6], "INVALID", "None", "Pull up", "INVALID" ; *
+ knk_option_wind = bits , U08, 204, [7:7], "At end", "Peak"
+ knk_maxrtd = scalar, U08, 205, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 206, "deg", 0.1, 0.0, 1.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 207, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 208, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 209, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 210, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 211, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 212, [0:2], "Off", "EAE", "INVALID", "X-tau", "X-tau with CLT correction", "INVALID", "INVALID", "INVALID" ; * ( 1 byte )
+ knkport = bits, U08, 213, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)","INVALID","INVALID"
+ knk_maxmap = scalar, S16, 214, "kPa", 0.1, 0.0, 0.0, {loadhigh}, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 216, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 218, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ triggerTeeth = scalar, U16, 220, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 222, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ pwmidle_shift_open_time = scalar, U08, 223, "s", 1.0, 0.0, 0.0, 20, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 224, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+ ICISR_tmask = scalar, U08, 226, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 227, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ ae_lorpm = scalar, U16, 228, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 230, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ fuelSpkDel = array , S16, 232, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 232, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 234, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ spk_conf2_gmtfi = bits , U08, 236, [0:2], "Off", "GM Bypass on SpkB", "Buick C3I", "TFI Non-signature", "TFI Signature PIP", "INVALID", "INVALID", "INVALID"
+ spk_conf2_oddodd= bits , U08, 236, [3:4], "Alternate", "INVALID", "Paired", "Custom"
+ spk_conf2_dwell = bits , U08, 236, [5:5], "Off", "On"
+ spk_conf2_dwelltbl = bits, U08, 236, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 236, [7:7], "Off", "Toyota DLI"
+;spk_config
+ spk_config_campol =bits, U08, 237, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 237, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 237, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 237, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam =bits, U08, 237, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used, extra CASes hidden.
+ spk_mode0 = bits , U08, 238, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-05", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "Fiat 1.8 16V", "Fuel Only", "Optispark", "Nissan SR20", "Nissan RB25", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "Honda Acura", "VQ35DE","Jeep 2000", "Jeep 2002", "Zetec VCT", "Flywheel tri-tach", "2JZ VVTi", "Honda TSX/D17", "Mazda6 2.3 VVT", "Viper V10","Viper V10 Gen1", "Honda K24A2", "HD32-2", "Miata 36-2","Daihatsu 12+1", "Subaru 36-2-2-2 VVT", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+; incomplete modes are hidden for the moment
+ spk_mode3_trim = bits, U08, 239, [0:0], "Off", "On"
+ spk_mode3_tach3 = bits, U08, 239, [1:1], "MS3X Cam", "JS10"
+ spk_mode3_hirespol= bits, U08, 239, [2:2], "Normal", "Inverted"
+ spk_mode3_kick = bits , U08, 239, [3:3], "Off", "On"
+ spk_mode3 = bits, U08, 239, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID" ; (1 byte )
+ rtbaroport = bits, U08, 240, [0:4], "Mainboard", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ego2port = bits, U08, 241, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport = bits, U08, 242, [0:4], "Mainboard", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport_t = bits, U08, 242, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+;NB these mapport are in next byte
+ mapport_f = bits, U08, 243, [6:7], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ knkport_an = bits, U08, 243, [0:2], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID",
+ OvrRunC = bits , U08, 244, [0:0], "Off", "On"
+ OvrRunC_progcut= bits , U08, 244, [1:1], "Off", "On"
+ OvrRunC_progret= bits , U08, 244, [2:2], "Off", "On"
+ OvrRunC_progign= bits , U08, 244, [3:3], "Off", "On"
+ OvrRunC_retign = bits , U08, 244, [4:4], "Off", "On"
+ poll_level_tooth = scalar, U08, 245, "", 1, 0, 0, 255, 0
+; feature4_0ftrig = bits, U08, 246, [0:0], "Simple", "Advanced"
+ feature4_0igntrig= bits, U08, 246, [1:1], "Off", "Ignition trigger indicator"
+
+ feature4_0maxdwl = bits, U08, 246, [3:3], "Off", "On"
+ feature4_0ftrig = bits, U08, 246, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ feature4_0mindwl = bits, U08, 246, [6:6], "Off", "On"
+
+ timing_flags = bits, U08, 247, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 247, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 248, "ms", 0.1000,0.00000,1.00,8.00,1
+ tsw_pin_f = bits, U08, 249, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve (3)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ crank_timing = scalar, S16, 250, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 252, "degrees", 0.10000,0.00000,-90.00,90.00,1;
+ tsf_rpm = scalar, U16, 254, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 256, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 258, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 260, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 262, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 264, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+; feature5_0 266
+ f5_0_tsf = bits , U08, 266, [0:0], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 266, [1:3], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+ f5_0_tss = bits , U08, 266, [4:4], "Off", "On"
+ f5_0_tss_opt = bits , U08, 266, [5:7], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+
+ tsw_pin_s = bits, U08, 267, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve (4)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pwmidlecranktaper= scalar, U08, 268, "s", 1.00000, 0.00000, 0.00, 100.00, 0
+ knk_step_adv = scalar, U08, 269, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ fc_rpm = scalar, U16, 270, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 272, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 274, "%", 0.10000, 0.00000, 0.00, 10.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 276, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fc_clt = scalar, S16, 276, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 278, "s", 0.1, 0, 0, 5.0, 1
+
+ tacho_opt3f = bits, U08, 279, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fc_ego_delay = scalar, U08, 280, "s", 1, 0, 0.00, 10, 0
+
+ tacho_opt80 = bits, U08, 281, [7:7], "Off", "On" ; tacho_opt2
+ tacho_optvar = bits, U08, 281, [6:6], "Fixed", "Variable"
+ tacho_opt40 = bits, U08, 281, [5:5], "Normal", "Half speed"
+ tacho_scale = scalar, U16, 282, "%", 0.1, 0, 10, 1000, 1
+;gap 284, 285
+ feature3_tps = bits, U08, 286, [0:0], "Off", "On"
+ feature3_aseunit= bits, U08, 286, [1:1], "Cycles", "0.1 seconds"
+ feature3_maplog = bits, U08, 286, [2:2], "Off", "On"
+ feature3_3 = bits, U08, 286, [3:3], "Off", "On"
+ feature3_pw4x = bits, U08, 286, [4:4], "Normal", "4x"
+ feature3_n2oin = bits, U08, 286, [5:5], "On", "Off"
+ feature3_matase = bits, U08, 286, [6:6], "Off", "On"
+ feature3_dwell = bits, U08, 286, [7:7], "Off", "On"
+ launch_opt_vss = bits, U08, 287, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ launch_opt_vssgear = bits, U08, 287, [2:2], "Off", "On"
+ launch_opt_retard = bits, U08, 287, [3:3], "Off", "On"
+ launch_opt_bank = bits, U08, 287, [4:5], "Off","Bank1", "Bank2", "Both"
+ launch_opt_on = bits, U08, 287, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_sft_zone = scalar, S16, 288, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 290, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, S16, 292, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 294, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 296, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+ launchlimopt_adv= bits , U08, 296, [2:2], "Basic", "Advanced"
+ launchlimopt_cut= bits , U08, 296, [3:4], "Random Progressive", "Random Ramped", "Fixed 5/7", "Fixed 4/5"
+ launchvsstime = scalar, U08, 297, "s", 1, 0, 0, 255, 0
+ launchvss_maxgear= scalar, U08, 298, "", 1, 0, 1, 6, 0
+ launch_opt_pins = bits, U08, 299, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ flats_arm = scalar, U16, 300, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ launchvss_minvss = scalar, U16, 302, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 1, 200, 1
+ flats_deg = scalar, S16, 304, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 306, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 308, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 310, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 312, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 312, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 312, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 312, [7:7], "OR", "AND"
+ staged_pw1_0 = bits, U08, 312, [7:7], "Off", "On"
+ staged_transition_events = scalar, U08, 313, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, S16, 314, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, S16, 316, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, S16, 318, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, S16, 320, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 322,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 322,[2:2], "Off", "On" ; enables stage 1
+ N2Oopt_3 = bits, U08, 322,[3:3], "Off", "On" ; enables stage 2
+ N2Oopt_4 = bits, U08, 322,[4:4], "Off", "On" ; use AFR2
+ N2Oopt_5 = bits, U08, 322,[5:5], "Off", "On" ; nitrous + launch
+ N2Oopt2_prog_time= bits, U08, 322,[6:7], "RPM-based", "Time-based", "VSS-based", "INVALID"
+;input and output pins moved
+ N2Oopt2_prog = bits, U08, 323,[0:0], "On/Off", "Progressive"
+;
+ N2Oopt2_prog_freq= bits, U08, 323,[2:4], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2Oopt2_prog_freqf= bits, U08, 323,[5:7], "Same", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2ORpm = scalar, U16, 324, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 326, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 328, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+#if CELSIUS
+ N2OClt = scalar, S16, 330, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ N2OClt = scalar, S16, 330, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 332, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2OPWLo = scalar, S16, 334, "ms", 0.004, 0, -128, +128, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2OPWLo = scalar, S16, 334, "ms", 0.001, 0, -32, +32, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.001, 0, -32, +32, 3
+#endif
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 338, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 339, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 340, "s", 0.01, 0, 0, 2.55, 2
+;nitrous stage 2
+; Nitrous System
+ N2O2delay = scalar, U08, 341, "s", 0.01, 0, 0, 2.55,2
+ N2O2Rpm = scalar, U16, 342, "RPM", 1, 0, 1000, 25000, 0
+ N2O2RpmMax = scalar, U16, 344, "RPM", 1, 0, 1000, 25000, 0
+ N2O2Angle = scalar, S16, 346, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2O2PWLo = scalar, S16, 348, "ms", 0.004, 0, -128, +128, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2O2PWLo = scalar, S16, 348, "ms", 0.001, 0, -32, +32, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.001, 0, -32, +32, 3
+#endif
+ RotarySplitModeFD = bits, U08, 352, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 352, [1:1], "Not Allowed", "Allowed"
+ dlyct = scalar, U08, 353, "", 1,0,0,255,0
+ dwelltime_trl = scalar, U08, 354, "ms", 0.10000, 0, 0.1, 25.5, 1
+ N2Oopt_pins = bits, U08, 355, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ RevLimRtdAng = scalar, S16, 356, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ vss4_can_offset = scalar, U16, 358, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ RevLimNormal2_hyst= scalar,U16, 360, "RPM", 1.00000, 0.00000, 100, 1000, 0
+ pwmidleset_inv = bits, U08, 362, [3:3], "Normal, 0%=off", "Inverted, 100%=off"
+ trig_init = scalar, U08, 363, "", 1,0,0,255,0
+;pwmidle
+ pwmidle_ms = scalar, U16, 364, "ms", 1, 0.00000, 0, 500, 0
+ pwmidle_close_delay = scalar, U08, 366, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 367, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 367, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_closed_duty = scalar, U08, 368, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 368, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_pid_wait_timer = scalar, U08, 369, "s", 0.1, 0.00000, 1, 10, 0
+ pwmidle_freq_pin3 = bits, U08, 370, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ pwmidle_freq_koeo = bits, U08, 370, [7:7], "Off", "On"
+ ac_idleup_min_rpm = scalar, U16, 371, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 373, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 375, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 375, "steps", 1.00000, 0.00000, 0, 20, 0 ; same but steps
+ pwmidle_rpmdot_threshold = scalar, U16, 376, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold=scalar,U16, 378, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 380, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 382, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 384, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_freq_scale = bits, U08, 386, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ pwmidle_freq_pin = bits, U08, 386, [4:6], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ boost_ctl_settings_freq = bits, U08, 387, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 387, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 387, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_settings_invert_new= bits, U08, 387, [5:5], "Normal", "Inverted"
+
+ boost_ctl_pins = bits, U08, 388, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp = scalar, U08, 389, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 390, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 391, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 392, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 393, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pwm_scale = bits, U08, 396, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ boost_ctl_pwm = bits, U08, 396, [4:5], "INVALID", "Mid","Slow", "INVALID"
+
+ NoiseFilterOpts = bits, U08, 397, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 397, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 397, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 397, [3:3], "Off", "On"
+ launchcuttiming = scalar, S16, 398, "deg", 0.10000, 0.00000, -50.00, 50.00, 1
+ pwmidle_max_rpm_new = scalar, U16, 400, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 402, "s", 1, 0.00000, 0, 10, 0
+ boost_ctl_pins_pwm = bits, U08, 403, [0:2], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+; gap 24 bytes
+ secondtrigopts = bits, U08, 428, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 428, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 428, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 428, [3:3], "Off", "On"
+
+ TC5_required_width = scalar, U16, 429, "uSec", 1.0, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 431, "%", 0.10000, 0.00000, 0.00, 50, 0 ;
+ stoich = scalar, S16, 433, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ MAPOXMin = scalar, S16, 435, "%", 0.10000, 0.00000, -10, {loadhigh}, 2 ; * ( 2 bytes)
+ IC2ISR_tmask = scalar, U08, 437, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 438, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+;afrload and eaeload are part of extra_load_opts in firmware
+ afrload = bits, U08, 439, [0:3], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ eaeload = bits, U08, 439, [4:7], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+; airden_scaling = scalar, U08, 440, "%", 1, 0.00000, 0, 150.00, 0
+ fan_idleup_vss_hyst = scalar, U16, 441, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 200, 0
+ log_style_led = bits, U08, 443, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ log_style_ledspd = bits, U08, 443, [6:7], "Normal", "Slower", "Faster", "Fastest"
+ primedelay = scalar, U08, 444, "s", 0.1, 0.0, 0.0, 3, 1
+ pwmidle_cl_opts_initvaluetable = bits, U08, 445, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 445, [1:1], "Use MAT", "Use CLT"
+ pwmidle_cl_opts_display_pid = bits, U08, 445, [2:2], "Basic", "Advanced"
+ boost_ctl_flags = bits, U08, 446, [0:1], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ boost_ctl_flags2 = bits, U08, 446, [2:3], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ idleveadv_to_pid_idleadv = bits, U08, 447, [0:0], "Use normal activation", "Use PID idle activation"
+ idleveadv_to_pid_idleve = bits, U08, 447, [1:1], "Use normal activation", "Use PID idle activation"
+ boost_ctl_sensitivity = scalar, S16, 448, "", 0.1, 0, 0, 500, 1
+ boost_ctl_sensitivity2 = scalar, S16, 450, "", 0.1, 0, 0, 500, 1
+ fuelcut_fuelon_upper_rpmdot = scalar, U16, 452, "rpmdot", 10, 0, 0, 10000, 0
+ fuelcut_fuelon_lower_rpmdot = scalar, U16, 454, "rpmdot", 10, 0, 0, 10000, 0
+#if PW_4X
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.004, 0, 0, 10, 3
+#else
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.001, 0, 0, 10, 3
+#endif
+ staged_primary_delay = scalar, U08, 458, "ign events", 1, 0, 0, 30, 0
+
+ idleadvance_on = bits, U08, 459, [0:0], "Off", "On" ;
+ idleve_on = bits, U08, 459, [1:1], "Off", "On"
+ idleve_vsson = bits, U08, 459, [2:3], "Off", "VSS1", "VSS2", "INVALID"
+ idleadv_vsson = bits, U08, 459, [4:5], "Off", "VSS1", "VSS2", "INVALID"
+ idle_special_ops_timing_assist = bits, U08, 459, [6:6], "Off", "On"
+ idleadvance_tps = scalar, S16, 460, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 462, "rpm", 1, 0, 0, {rpmhigh}, 0
+ idleadvance_load = scalar, S16, 464, "%", 0.1, 0, 0, 100, 0
+
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 466, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleadvance_clt = scalar, S16, 466, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 468, "s", 1, 0, 0, 5, 0
+ idleadvance_curve = array, S16, 469, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1
+ idleadvance_loads = array, S16, 477, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1
+
+;SD datalogging
+ log_style2_but = bits, U08, 485, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ log_style_block = bits, U08, 486, [0:1], "64 byte", "64 byte + stream", "INVALID", "INVALID"
+ log_style_gps = bits, U08, 486, [5:5], "Off", "On"
+ log_style_on = bits, U08, 486, [6:7], "Disabled", "Insertion", "Button", "Trigger" ; old names
+ log_style_on2 = bits, U08, 486, [6:7], "Disabled", "Always", "Button", "Trigger" ; new names
+
+ log_style2_samp = bits, U08, 487, [3:4], "Timed", "every tooth", "every cycle", "INVALID"
+ log_style2_clg = bits, U08, 487, [5:5], "Off", "On"
+
+ log_style3_adc = bits, U08, 488, [0:2], "INT_MAP", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID"
+ log_length = scalar, U08, 489, "mins", 1, 0, 1, 255, 0
+ log_int = scalar, U16, 490, "ms", 0.128,0,2.0,8388,1
+ log_rate = scalar, U16, 490, "", 1.0, { (1000/log_int) - (log_int/ 0.128) },0,1000,0
+ logFieldOffset = array , U16, 492, [ 64], "", 1.0000, 0.00000, 0.00, 65535, 0 ; * ( 64 words)
+ logFieldLength = array , U08, 620, [ 64], "", 1.0000, 0.00000, 0.00, 255.00, 0 ; * ( 64 bytes)
+
+ firea = scalar, U08, 684, "", 1,0,0,16,0
+ fireb = scalar, U08, 685, "", 1,0,0,16,0
+ firec = scalar, U08, 686, "", 1,0,0,16,0
+ fired = scalar, U08, 687, "", 1,0,0,16,0
+ firee = scalar, U08, 688, "", 1,0,0,16,0
+ firef = scalar, U08, 689, "", 1,0,0,16,0
+ fireg = scalar, U08, 690, "", 1,0,0,16,0
+ fireh = scalar, U08, 691, "", 1,0,0,16,0
+ firei = scalar, U08, 692, "", 1,0,0,16,0
+ firej = scalar, U08, 693, "", 1,0,0,16,0
+ firek = scalar, U08, 694, "", 1,0,0,16,0
+ firel = scalar, U08, 695, "", 1,0,0,16,0
+ firem = scalar, U08, 696, "", 1,0,0,16,0
+ firen = scalar, U08, 697, "", 1,0,0,16,0
+ fireo = scalar, U08, 698, "", 1,0,0,16,0
+ firep = scalar, U08, 699, "", 1,0,0,16,0
+
+ sequential = bits, U08, 700, [0:1], "Off", "Semi-sequential", "Fully Sequential", "INVALID"
+ sequential_angle_spec = bits, U08, 700, [2:4], "INVALID", "End of squirt", "Middle of Squirt", "INVALID", "Beginning of squirt", "INVALID", "INVALID", "INVALID"
+ sequential_trim_on_off = bits, U08, 700, [5:5], "Off", "On"
+
+ boost_launch_duty = scalar, U08, 701, "%", 1,0,0,100,0
+ boost_launch_target = scalar, U16, 702, "kPa", 0.1,0,0,{loadhigh},1
+ boost_feats_tsw = bits, U08, 704, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve(6)","Gear-based", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_feats_launch = bits, U08, 704, [5:5], "Off", "On"
+ boost_feats_timed = bits, U08, 704, [6:6], "Off", "On"
+
+;see lower for launch_var_on
+ launch_3step_in = bits, U08, 705, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ launch_var_low = scalar, U16, 706, "rpm", 1,0,0,{rpmhigh},0
+ launch_var_up = scalar, U16, 708, "rpm", 1,0,0,{rpmhigh},0
+ vssout_scale = scalar, U32, 710, "", 1, 0, 0, 300000, 0
+ launch_sft_deg3 = scalar, S16, 714, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim3 = scalar, U16, 716, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ map_sample_duration = scalar, S16, 718, "deg", 0.10000, 0.00000, 0, 180, 1 ; * ( 2 bytes )
+ opentime_opt1_master = bits, U08, 720, [7:7], "Same", "Individual"
+ opentime_opt1 = bits, U08, 720, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt2 = bits, U08, 721, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt3 = bits, U08, 722, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt4 = bits, U08, 723, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt5 = bits, U08, 724, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt6 = bits, U08, 725, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt7 = bits, U08, 726, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt8 = bits, U08, 727, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta = bits, U08, 728, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta_pwm= bits, U08, 728, [4:4], "Off", "On"
+ opentime_optb = bits, U08, 729, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_optb_pwm= bits, U08, 729, [4:4], "Off", "On"
+ opentime_optb_own= bits, U08, 729, [5:5], "Off", "On"
+
+ opentime_opt11 = bits, U08, 730, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt12 = bits, U08, 731, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt13 = bits, U08, 732, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt14 = bits, U08, 733, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt15 = bits, U08, 734, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt16 = bits, U08, 735, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt17 = bits, U08, 736, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt18 = bits, U08, 737, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt1_master = bits, U08, 738, [7:7], "Off", "On"
+ smallpw_opt1 = bits, U08, 738, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt2 = bits, U08, 739, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt3 = bits, U08, 740, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt4 = bits, U08, 741, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt5 = bits, U08, 742, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt6 = bits, U08, 743, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt7 = bits, U08, 744, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt8 = bits, U08, 745, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opta = bits, U08, 746, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_optb = bits, U08, 747, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt11 = bits, U08, 748, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt12 = bits, U08, 749, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt13 = bits, U08, 750, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt14 = bits, U08, 751, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt15 = bits, U08, 752, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt16 = bits, U08, 753, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt17 = bits, U08, 754, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt18 = bits, U08, 755, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ maxafr_opt1_on = bits, U08, 756, [0:0], "Off", "On"
+ maxafr_opt1_load= bits,U08, 756, [1:2], "MAP", "TPS", "INVALID", "INVALID"
+ maxafr_opt1_led = bits,U08, 757, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ maxafr_en_load = scalar, U16, 758, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_en_rpm = scalar, U16, 760, "rpm", 1, 0, 0, {rpmhigh}, 0
+ maxafr_en_time = scalar, U16, 762, "s", 0.001, 0, 0, 5.000, 1
+ maxafr_spkcut_time=scalar, U16, 764, "s", 0.001, 0, 0, 5.000, 2
+ maxafr_ret_tps = scalar, S16, 766, "%", 0.10000, 0, 0, 110, 1
+ maxafr_ret_map = scalar, S16, 768, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_ret_rpm = scalar, U16, 770, "rpm", 1, 0, 0, {rpmhigh}, 1
+#if PW_4X
+ launch_addfuel = scalar, S16, 772, "ms", 0.004, 0.0000, -128, +128, 3
+#else
+ launch_addfuel = scalar, S16, 772, "ms", 0.001, 0.0000, -32, +32, 3
+#endif
+ wheeldia1 = scalar, U16, 774, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ wheeldia2 = scalar, U16, 778, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ fdratio1 = scalar, U16, 776, ":1", 0.01, 0.00000, 0.40, 6.0, 2 ; * ( 2 bytes)
+;not a gap
+ vss1_pos = bits, U08, 780, [0:1], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ vss2_pos = bits, U08, 780, [2:3], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ launch_var_on = bits, U08, 781, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ flats_minvss = scalar, U16, 782, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ vss_opt1 = bits, U08, 784, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss_opt2 = bits, U08, 784, [4:7], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss1_an = bits, U08, 785,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss1_can_id = scalar, U08, 786, "", 1.00000, 0.00000, 0.00, 255, 0 ;
+ tsw_pin_ob = bits, U08, 787, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vss1_can_offset = scalar, U16, 788, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss2_can_offset = scalar, U16, 790, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ MapThreshXTD = scalar, U08, 792, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ MapThreshXTD2 = scalar, U08, 793, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ vss_opt0_1 = bits, U08, 794, [0:1], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_2 = bits, U08, 794, [2:3], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_3 = bits, U08, 794, [4:4], "Off", "On"
+ vss_opt0_4 = bits, U08, 794, [6:6], "Off", "On"
+ ; 1 gap
+ ss_opt1 = bits, U08, 796, [0:3], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Poll CAN"
+ ss_opt1_spd = bits, U08, 796, [7:7], "Off", "On"
+ vss2_an = bits, U08, 797,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ss1_pwmseq = scalar, U08, 798, "", 1.00000, 0.00000, 1, 4, 0
+ ss2_pwmseq = scalar, U08, 799, "", 1.00000, 0.00000, 1, 4, 0
+ gear_can_offset = scalar, U16, 800, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ mapsample_opt1 = bits, U08, 802, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 802, [2:2], "Use timed min", "Use event average"
+ map2port = bits, U08, 803, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ n2o1n_pins = bits, U08, 804, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o1f_pins = bits, U08, 805, [0:5], "Same", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2n_pins = bits, U08, 806, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2f_pins = bits, U08, 807, [0:5], "Same", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+; these an_max did use msToPrefUnitsScale, but that didn't change the values in real time
+ vss1_an_max = scalar, U16, 808, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ vss2_an_max = scalar, U16, 810, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ tsw_pin_rf = bits, U08, 812, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_afr = bits, U08, 813, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend curve(5)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_stoich = bits, U08, 814, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_vss = bits, U08, 815, [0:1], "Off", "VSS1", "VSS2", "Gear"
+#if PW_4X
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ stoich_alt = scalar, S16, 818, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1
+
+ water_pins_pump = bits, U08, 820, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ water_pins_valve = bits, U08, 821, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_pins_in_shut = bits, U08, 822, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_freq_on = bits, U08, 823,[0:0], "Off", "On"
+ water_freq = bits, U08, 823,[1:4], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ water_freq_type = bits, U08, 823,[5:6], "Off", "Fast", "Slow", "INVALID"
+ boost_vss_tps = scalar, U16, 824, "%", 0.1, 0, 0, 100, 0
+ water_tps = scalar, S16, 826, "%", 0.1, 0, 0, 100, 0
+ water_rpm = scalar, U16, 828, "RPM", 1, 0, 0, {rpmhigh}, 0
+ water_map = scalar, S16, 830, "kPa", 0.1, 0, 0, {loadhigh}, 1
+#if CELSIUS
+ water_mat = scalar, S16, 832, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ water_mat = scalar, S16, 832, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ pwmidle_rpmdot_disablepid = scalar, S16, 834, "", 10.0000, 0.00000, 0, 1000, 0
+ boost_ctl_lowerlimit = scalar, S16, 836, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+
+ enable_pollADC = bits, U08, 838, [0:0], "Disable", "Enable" ; enable_poll
+ enable_pollPWM = bits, U08, 838, [1:2], "Disable", "16bit", "32bit", "INVALID"
+ enable_pollports_digin = bits, U08,838, [3:3], "Disable", "Enable"
+ enable_pollports_digout = bits,U08,838, [4:5], "Disable", "One", "Two", "INVALID"
+ enable_pwmout = bits,U08,838, [6:6], "Disable", "Enable"
+ enable_pwmout255 = bits,U08,838, [7:7], "Disable", "Enable"
+
+ poll_table_rtc = scalar, U08, 839, "", 1.00000, 0.00000, 0, 15, 0
+ poll_tablePWM = scalar, U08, 840, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 841, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offset_rtc = scalar, S16, 842, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ poll_offsetPWM = scalar, S16, 844, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digin_offset = scalar, S16, 846, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digout_offset = scalar, S16, 848, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+
+ egt_num = bits, U08, 850, [0:4], "Off", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ accXport = bits, U08, 851, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accYport = bits, U08, 852, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accZport = bits, U08, 853, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accXcal1 = scalar, S16, 854, "ADC", 1, 0, 0, 4095, 0
+ accXcal2 = scalar, S16, 856, "ADC", 1, 0, 0, 4095, 0
+ accYcal1 = scalar, S16, 858, "ADC", 1, 0, 0, 4095, 0
+ accYcal2 = scalar, S16, 860, "ADC", 1, 0, 0, 4095, 0
+ accZcal1 = scalar, S16, 862, "ADC", 1, 0, 0, 4095, 0
+ accZcal2 = scalar, S16, 864, "ADC", 1, 0, 0, 4095, 0
+
+ accxyzLF = scalar, U08, 866, "%", 1, 0, 10, 100, 0
+ egt1port = bits, U08, 867, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt2port = bits, U08, 868, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt3port = bits, U08, 869, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt4port = bits, U08, 870, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt5port = bits, U08, 871, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt6port = bits, U08, 872, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt7port = bits, U08, 873, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt8port = bits, U08, 874, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt9port = bits, U08, 875, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt10port = bits, U08, 876, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt11port = bits, U08, 877, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt12port = bits, U08, 878, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt13port = bits, U08, 879, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt14port = bits, U08, 880, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt15port = bits, U08, 881, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt16port = bits, U08, 882, [0:4], "Off", "INVALID", "INVALID", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt_conf_action = bits, U08, 883, [0:0], "Off", "On"
+ egt_conf_shutdown = bits, U08, 883, [1:1], "Off", "On"
+ egt_conf_bank = bits, U08, 883, [2:3], "INVALID", "Bank 1", "Bank 2", "Both"
+ egt_conf_percyl = bits, U08, 883, [4:4], "Off", "On"
+;EGT calibration
+#if CELSIUS
+ egtcal_temp0 = scalar, S16, 884, "°C", 0.05555, -320, -40, 1500, 0
+ egtcal_tempmax= scalar, S16, 886, "°C", 0.05555, -320, -40, 1500, 0
+ egt_warn = scalar, S16, 888, "°C", 0.05555, -320, -40, 1500, 0
+ egt_max = scalar, S16, 890, "°C", 0.05555, -320, -40, 1500, 0
+#else
+ egtcal_temp0 = scalar, S16, 884, "°F", 0.1, 0, -40, 2700, 0
+ egtcal_tempmax= scalar, S16, 886, "°F", 0.1, 0, -40, 2700, 0
+ egt_warn = scalar, S16, 888, "°F", 0.1, 0, -40, 2700, 0
+ egt_max = scalar, S16, 890, "°F", 0.1, 0, -40, 2700, 0
+#endif
+ egt_time = scalar, U16, 892, "s", 0.001, 0, 0, 10, 2
+ vss1_can_scale= scalar, U16, 894, "%", 0.1, 0, 0, 6553, 1
+ vss1_can_scale_pulse= scalar, U16, 894, "", 1, 0, 0, 65535, 0
+ vss2_can_scale= scalar, U16, 896, "%", 0.1, 0, 0, 6553, 1
+ vss2_can_scale_pulse= scalar, U16, 896, "", 1, 0, 0, 65535, 0
+ vss1_pwmseq = scalar, U08, 898, "", 1.00000, 0.00000, 1, 4, 0
+ vss2_pwmseq = scalar, U08, 899, "", 1.00000, 0.00000, 1, 4, 0
+ MAFOption = bits, U08, 900, [0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "MAP (ADC0)", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ MAFOption_t = bits, U08, 900, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+ enginesize = scalar, U16, 901, "cc", 1.00000, 0.00000, 0, 65536, 0
+ vssout_opt = bits, U08, 903, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vssout_optunits= bits, U08, 903, [6:7], "Time", "Pulses per mile", "Pulses per km", "INVALID"
+ vss3_can_offset = scalar, U16, 904, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss1_can_size = bits, U08, 906, [0:0], "8bit", "16bit"
+ vss2_can_size = bits, U08, 906, [1:1], "8bit", "16bit"
+;MAF Freq options in vss_can_size byte
+ MAFOption_f = bits, U08, 906, [6:7], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ canpwm_clk = scalar, U08, 907, "MHz", 1,0,0,100,0
+ canpwm_pre = scalar, U08, 908, "", 1,0,0,255,0
+ canpwm_div = scalar, U08, 909, "", 1,0,0,255,0
+ vss1_can_table = scalar, U08, 910, "", 1,0,0,255,0
+ feature7_mafmat = bits, U08, 911, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 911, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 911, [2:2], "Off", "On"
+ feature7_aeevents= bits, U08, 911, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 911, [4:4], "Off", "On"
+ feature7_batchcrank= bits,U08, 911, [5:5], "Off", "On"
+ feature7_cranktaper= bits,U08, 911, [6:6], "Off", "On"
+ feature7_crtpunits= bits, U08, 911, [7:7], "Time", "Events"
+ vss1LF = scalar, U08, 912, "", 1,0,10,100,0
+ vss2LF = scalar, U08, 913, "", 1,0,10,100,0
+ ss1LF = scalar, U08, 914, "", 1,0,10,100,0
+ ss2LF = scalar, U08, 915, "", 1,0,10,100,0
+#if PW_4X
+ egt_addfuel = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ egt_addfuel = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ launch_fcut_rpm= scalar, U16, 918, "RPM", 1, 0, 1000, 65000, 0
+;gear ratios
+ gear1ratio = scalar, U16, 920, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear2ratio = scalar, U16, 922, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear3ratio = scalar, U16, 924, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear4ratio = scalar, U16, 926, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear5ratio = scalar, U16, 928, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear6ratio = scalar, U16, 930, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear_method = bits, U08, 932, [0:1], "Off", "VSS/RPM", "Analogue", "CAN Gear#"
+ gear_port_an = bits, U08, 933, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ gear0v = scalar, U16, 934, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear1v = scalar, U16, 936, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear2v = scalar, U16, 938, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear3v = scalar, U16, 940, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear4v = scalar, U16, 942, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear5v = scalar, U16, 944, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear6v = scalar, U16, 946, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear_no = scalar, U08, 948, "", 1, 0, 1, 6, 0
+ vssdotLF = scalar, U08, 949, "", 1,0,10,100,0
+ vssdot_int = scalar, U08, 950, "ms", 10, 0 , 10, 2000, 0
+ ac_idleup_io_in = bits, U08, 951, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ac_idleup_settings_inv = bits, U08, 951, [6:6], "Normal", "Inverted"
+ ac_idleup_settings = bits, U08, 951, [7:7], "Off", "On"
+
+ ac_idleup_io_out = bits, U08, 952, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ac_idleup_delay = scalar, U16, 953, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ac_idleup_adder_duty = scalar, U08, 955, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 955, "steps", 1, 0, 0, 255, 0
+ fanctl_settings_on = bits, U08, 956, [7:7], "Off", "On"
+ fanctl_settings_idleup = bits, U08, 956, [6:6], "No", "Yes"
+ fanctl_settings_pin = bits, U08, 956, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fanctl_idleup_delay = scalar, U16, 957, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ fanctl_idleup_adder_duty = scalar, U08, 959, "%", 0.392, 0.00000, 0, 100, 1
+ fanctl_idleup_adder_steps = scalar, U08, 959, "steps", 1.000, 0.00000, 0, 255, 0
+#if CELSIUS
+ fanctl_ontemp =scalar, S16, 960, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+#else
+ fanctl_ontemp =scalar, S16, 960, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ canadc_opt1 = bits, U08, 964, [0:0], "Off", "On"
+ canadc_opt2 = bits, U08, 964, [1:1], "Off", "On"
+ canadc_opt3 = bits, U08, 964, [2:2], "Off", "On"
+ canadc_opt4 = bits, U08, 964, [3:3], "Off", "On"
+ canadc_opt5 = bits, U08, 964, [4:4], "Off", "On"
+ canadc_opt6 = bits, U08, 964, [5:5], "Off", "On"
+ fanctl_opt2_engineoff = bits, U08, 965, [0:0], "No", "Yes"
+ canadc_id1 = scalar, U08, 966, "", 1, 0, 0, 14, 0
+ canadc_id2 = scalar, U08, 967, "", 1, 0, 0, 14, 0
+ canadc_id3 = scalar, U08, 968, "", 1, 0, 0, 14, 0
+ canadc_id4 = scalar, U08, 969, "", 1, 0, 0, 14, 0
+ canadc_id5 = scalar, U08, 970, "", 1, 0, 0, 14, 0
+ canadc_id6 = scalar, U08, 971, "", 1, 0, 0, 14, 0
+ canadc_tab1 = scalar, U08, 972, "", 1, 0, 0, 31, 0
+ canadc_tab2 = scalar, U08, 973, "", 1, 0, 0, 31, 0
+ canadc_tab3 = scalar, U08, 974, "", 1, 0, 0, 31, 0
+ canadc_tab4 = scalar, U08, 975, "", 1, 0, 0, 31, 0
+ canadc_tab5 = scalar, U08, 976, "", 1, 0, 0, 31, 0
+ canadc_tab6 = scalar, U08, 977, "", 1, 0, 0, 31, 0
+ canadc_off1 = scalar, U16, 978, "", 1, 0, 0, 1023, 0
+ canadc_off2 = scalar, U16, 980, "", 1, 0, 0, 1023, 0
+ canadc_off3 = scalar, U16, 982, "", 1, 0, 0, 1023, 0
+ canadc_off4 = scalar, U16, 984, "", 1, 0, 0, 1023, 0
+ canadc_off5 = scalar, U16, 986, "", 1, 0, 0, 1023, 0
+ canadc_off6 = scalar, U16, 988, "", 1, 0, 0, 1023, 0
+ ac_idleup_cl_targetadder = scalar, S16, 990, "rpm", 1, 0, 0, 700, 0
+ fan_idleup_cl_targetadder = scalar, S16, 992, "rpm", 1, 0, 0, 700, 0
+#if CELSIUS
+ boost_ctl_clt_threshold = scalar, S16, 994, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ boost_ctl_clt_threshold = scalar, S16, 994, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ fan_ctl_settings_acfan = bits, U08, 996, [0:0], "Leave Fan off", "Turn fan on"
+#if LAMBDA
+ ego_upper_bound = scalar, U08, 997, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+ ego_lower_bound = scalar, U08, 998, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+#else
+ ego_upper_bound = scalar, U08, 997, "AFR", 0.10000, 0.00000, 7, 25, 1
+ ego_lower_bound = scalar, U08, 998, "AFR", 0.10000, 0.00000, 7, 25, 1
+#endif
+ ss_opt2 = bits, U08, 999, [0:3], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Poll CAN"
+ ss_opt2_spd = bits, U08, 999, [7:7], "Off", "On"
+ launch_maxvss = scalar, U16, 1000, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ maf_range = bits, U08, 1002, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ ac_delay_since_last_on = scalar, U08, 1003, "s", 1.00000, 0.00000, 0, 30, 0
+ reluctorteeth3 = scalar, U16, 1004, "", 0.01, 0,0,255,2 ; this is SS1
+ reluctorteeth4 = scalar, U16, 1006, "", 0.01, 0,0,255,2 ; this is SS2
+ boost_gear_switch = scalar, U08, 1008, "gear", 1, 0, 1, 7, 0
+ staged_extended_opts_use_v3 = bits, U08, 1009, [0:0], "Use MS3x (if possible)", "Use V3"
+ staged_extended_opts_simult = bits, U08, 1009, [1:1], "Alternating (2 squirts)", "Simultaneous (1 squirt)"
+ staged_extended_opts_pw1off = bits, U08, 1009, [2:2], "Off", "On"
+
+ can_pwmout_id = scalar, U08, 1010, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_tab = scalar, U08, 1011, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_offset = scalar, S16, 1012, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ idleve_tps = scalar, S16, 1014, "%", 0.10000, 0.00000, 0, 100, 1
+ idleve_rpm = scalar, U16, 1016, "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ idleve_load = scalar, S16, 1018, "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+#if CELSIUS
+ idleve_clt = scalar, S16, 1020, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleve_clt = scalar, S16, 1020, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleve_delay = scalar, U08, 1022, "s", 1.00000, 0.0000, 0, 10, 0
+ ac_idleup_cl_lockout_mapadder = scalar, U08, 1023, "%", 0.10000, 0.00000, 0, 25.5, 0
+
+page = 2
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,1,8388,1
+;this depend on single coil or seq etc.
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+#if PW_4X
+ testpw = scalar, U16, 6, "ms", 0.004, 0.00000, 0, 262.143, 3
+#else
+ testpw = scalar, U16, 6, "ms", 0.001, 0.00000, 0, 65.535, 3
+#endif
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0
+;gap
+ testinjPwmT = scalar, U08, 11, "ms", 0.12800, 0.12800, 0.00, 32.64, 1
+ testinjPwmPd = scalar, U08, 12, "us", 1.00000, 0.00000, 40.00, 100.00, 0
+ testinjPwmP = scalar, U08, 13, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ testsel_inj = bits, U08, 14, [0:3], "InjA", "InjB", "InjC", "InjD", "InjE", "InjF", "InjG", "InjH", "Inj1/I", "Inj2/J", "InjK", "InjL", "INVALID", "INVALID", "INVALID", "INVALID"
+ testsel_coil = bits, U08, 14, [4:7], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "CoilG", "CoilH", "CoilI", "CoilJ", "CoilK", "CoilL", "CoilM", "CoilN", "INVALID", "INVALID"
+ dbgtooth = scalar, U08, 15, "tooth", 1,0,0,255,0
+ iacpostest = scalar, U16, 16, "steps", 1,0,0,65535,0
+ iachometest = scalar, U16, 18, "steps", 1,0,0,65535,0
+ iactest_0 = scalar, U08, 20, "", 1,0,0,255,0
+ flashlock = bits, U08, 21, [0:0], "Locked", "Unlocked" ; tables 0-3
+ boost_ctl_settings_on2 = bits, U08, 22, [3:3], "Off","On"
+ boost_ctl_settings_cl2 = bits, U08, 22, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_pins2 = bits, U08, 23, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp2 = scalar, U08, 24, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki2 = scalar, U08, 25, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd2 = scalar, U08, 26, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty2 = scalar, U08, 27, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty2 = scalar, U08, 28, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pins_pwm2 = bits, U08, 29, [0:2], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ boost_ctl_lowerlimit2 = scalar, S16, 30, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+ boost_ctl_sensor2 = bits, U08, 32, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+
+ vss_opt3 = bits, U08, 33, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss_opt4 = bits, U08, 33, [4:7], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+
+ vss3_an = bits, U08, 34,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss4_an = bits, U08, 35,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss3_pwmseq = scalar, U08, 36, "", 1.00000, 0.00000, 1, 4, 0
+ vss4_pwmseq = scalar, U08, 37, "", 1.00000, 0.00000, 1, 4, 0
+ u08_debug38 = scalar, U08, 38, "", 1, 0.00000, 0, +255, 0
+ u08_debug38_0 = bits, U08, 38, [0:0], "Normal", "Loopback"
+ u08_debug38_1 = bits, U08, 38, [1:1], "Off", "On"
+; pad gap
+
+ egoport1 = bits, U08, 40, [0:4], "Normal EGO", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport2 = bits, U08, 41, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport3 = bits, U08, 42, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport4 = bits, U08, 43, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport5 = bits, U08, 44, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport6 = bits, U08, 45, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport7 = bits, U08, 46, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport8 = bits, U08, 47, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport9 = bits, U08, 48, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport10 = bits, U08, 49, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport11 = bits, U08, 50, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport12 = bits, U08, 51, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport13 = bits, U08, 52, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport14 = bits, U08, 53, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport15 = bits, U08, 54, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport16 = bits, U08, 55, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ egomap1 = bits, U08, 56, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap2 = bits, U08, 57, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap3 = bits, U08, 58, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap4 = bits, U08, 59, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap5 = bits, U08, 60, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap6 = bits, U08, 61, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap7 = bits, U08, 62, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap8 = bits, U08, 63, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap9 = bits, U08, 64, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap10 = bits, U08, 65, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap11 = bits, U08, 66, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap12 = bits, U08, 67, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap13 = bits, U08, 68, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap14 = bits, U08, 69, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap15 = bits, U08, 70, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap16 = bits, U08, 71, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+;egomap?t is not presently implemented in the code
+ egomap1t = bits, U08, 56, [4:4], "1", "2"
+ egomap2t = bits, U08, 57, [4:4], "1", "2"
+ egomap3t = bits, U08, 58, [4:4], "1", "2"
+ egomap4t = bits, U08, 59, [4:4], "1", "2"
+ egomap5t = bits, U08, 60, [4:4], "1", "2"
+ egomap6t = bits, U08, 61, [4:4], "1", "2"
+ egomap7t = bits, U08, 62, [4:4], "1", "2"
+ egomap8t = bits, U08, 63, [4:4], "1", "2"
+ egomap9t = bits, U08, 64, [4:4], "1", "2"
+ egomap10t = bits, U08, 65, [4:4], "1", "2"
+ egomap11t = bits, U08, 66, [4:4], "1", "2"
+ egomap12t = bits, U08, 67, [4:4], "1", "2"
+ egomap13t = bits, U08, 68, [4:4], "1", "2"
+ egomap14t = bits, U08, 69, [4:4], "1", "2"
+ egomap15t = bits, U08, 70, [4:4], "1", "2"
+ egomap16t = bits, U08, 71, [4:4], "1", "2"
+
+ tc_opt_on = bits, U08, 72, [0:0], "Off", "On"
+ tc_opt_method = bits, U08, 72, [1:2], "Perfect Run", "VSS %slip", "Perfect Run RPM", "Switch input"
+ tc_opt_slipcurve=bits,U08, 72, [4:4], "Fixed value", "Adjustable"
+ tc_opt_n2o = bits, U08, 72, [5:5], "On/Off", "INVALID"
+ tc_opt_bank = bits, U08, 72, [6:7], "INVALID", "Bank 1", "Bank 2", "Both"
+ tc_slipthresh = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ tc_minvss = scalar, U16, 74, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_maxvss = scalar, U16, 76, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_mintps = scalar, S16, 78, "%", 0.10000, 0.00000, 0, 100, 1
+ tc_enin = bits, U08, 80, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ knock_bpass = bits, U08, 81, [0:5], "1.22", "1.26", "1.31", "1.35", "1.40", "1.45", "1.51", "1.57", "1.63", "1.71", "1.78", "1.87", "1.96", "2.07", "2.18", "2.31", "2.46", "2.54", "2.62", "2.71", "2.81", "2.92", "3.03", "3.15", "3.28", "3.43", "3.59", "3.76", "3.95", "4.16", "4.39", "4.66", "4.95", "5.12", "5.29", "5.48", "5.68", "5.90", "6.12", "6.37", "6.64", "6.94", "7.27", "7.63", "8.02", "8.46", "8.95", "9.50", "10.12", "10.46", "10.83", "11.22", "11.65", "12.10", "12.60", "13.14", "13.72", "14.36", "15.07", "15.84", "16.71", "17.67", "18.76", "19.98"
+ knock_conf_num = bits, U08, 82, [0:0], "1", "2"
+ knock_conf_debug = bits, U08, 82, [4:4], "Off", "On"
+ knock_conf_percylact = bits, U08, 82, [5:5], "Off", "On"
+ knock_conf_launch = bits, U08, 82, [6:6], "Off", "On"
+ knock_conf_percyl = bits, U08, 82, [7:7], "Off", "On"
+ knock_int = bits, U08, 83, [0:4], "40", "45", "50", "55", "60", "65", "70", "75", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240", "260", "280", "300", "320", "360", "400", "440", "480", "520", "560", "600"
+
+ ff_tpw0 = scalar, U08, 84, "ms", 0.05, 0, 0, 12.7, 2
+ ff_tpw1 = scalar, U08, 85, "ms", 0.05, 0, 0, 12.7, 2
+#if CELSIUS
+ ff_temp0 = scalar, S16, 86, "°C", 0.05555, -320, -40, 150.00, 1
+ ff_temp1 = scalar, S16, 88, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ ff_temp0 = scalar, S16, 86, "°F", 0.10000, 0.00000, -40, 300, 1
+ ff_temp1 = scalar, S16, 88, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ fueltemp1 = bits, U08, 90, [0:4], "Off", "Flex fuel", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ fueltemp1_corr = bits, U08, 90, [7:7], "Off", "On"
+ tc_knob = bits, U08, 91, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ maf_freq0 = scalar, U16, 92, "Hz", 0.25, 0.00000, 0, 16383,1
+ maf_freq1 = scalar, U16, 94, "Hz", 0.25, 0.00000, 0, 16383,1
+ map_freq0 = scalar, U16, 96, "Hz", 0.2, 0.00000, 0, 13107,1
+ map_freq1 = scalar, U16, 98, "Hz", 0.2, 0.00000, 0, 13107,1
+
+ knock_gain01 = bits, U08, 100, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain02 = bits, U08, 101, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain03 = bits, U08, 102, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain04 = bits, U08, 103, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain05 = bits, U08, 104, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain06 = bits, U08, 105, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain07 = bits, U08, 106, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain08 = bits, U08, 107, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain09 = bits, U08, 108, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain10 = bits, U08, 109, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain11 = bits, U08, 110, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain12 = bits, U08, 111, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain13 = bits, U08, 112, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain14 = bits, U08, 113, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain15 = bits, U08, 114, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain16 = bits, U08, 115, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+
+ knock_sens01 = bits, U08, 116, [0:0], "1", "2"
+ knock_sens02 = bits, U08, 117, [0:0], "1", "2"
+ knock_sens03 = bits, U08, 118, [0:0], "1", "2"
+ knock_sens04 = bits, U08, 119, [0:0], "1", "2"
+ knock_sens05 = bits, U08, 120, [0:0], "1", "2"
+ knock_sens06 = bits, U08, 121, [0:0], "1", "2"
+ knock_sens07 = bits, U08, 122, [0:0], "1", "2"
+ knock_sens08 = bits, U08, 123, [0:0], "1", "2"
+ knock_sens09 = bits, U08, 124, [0:0], "1", "2"
+ knock_sens10 = bits, U08, 125, [0:0], "1", "2"
+ knock_sens11 = bits, U08, 126, [0:0], "1", "2"
+ knock_sens12 = bits, U08, 127, [0:0], "1", "2"
+ knock_sens13 = bits, U08, 128, [0:0], "1", "2"
+ knock_sens14 = bits, U08, 129, [0:0], "1", "2"
+ knock_sens15 = bits, U08, 130, [0:0], "1", "2"
+ knock_sens16 = bits, U08, 131, [0:0], "1", "2"
+ s16_debug = scalar, S16, 132, "", 1, 0.00000, -32768, +32767, 0
+ u08_debug134 = scalar, U08, 134, "", 1, 0.00000, 0, +255, 0
+ AE_options = bits, U08, 135, [0:0], "Time-based AE", "Accel-pump AE"
+ accel_blend_percent = scalar, S16, 136, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold = scalar, U16, 138, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold = scalar, U16, 140, "kpa/sec", 1, 0, 0, 20000, 0
+ ae_lorpm2 = scalar, U16, 142, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ ae_hirpm2 = scalar, U16, 144, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ accel_blend_percent2 = scalar, S16, 146, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold2 = scalar, U16, 148, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold2 = scalar, U16, 150, "kpa/sec", 1, 0, 0, 20000, 0
+ tpsThresh2 = scalar, S16, 152, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1
+ mapThresh2 = scalar, S16, 154, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0
+ aeEndPW2 = scalar, S16, 156, "%ReqFuel", 1, 0.00000, 0.00, 100, 0
+ taeColdA2 = scalar, U08, 158, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ taeColdM2 = scalar, U08, 159, "%", 1.00000, 0.00000, 100, 255.00, 0
+ taeTime2 = scalar, U08, 160, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ taeTime_events2 = scalar, U08, 160, "events", 1, 0.00000, 0.00, 255, 0
+ tdePct2 = scalar, U08, 161, "", 1.00000, 0.00000, 50.00, 100.00, 0
+ aeTaperTime2 = scalar, U08, 162, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ aeTaperTime_events2= scalar, U08, 162, "events", 1, 0.00000, 0.00, 255, 0
+ tpsProportion2 = scalar, U08, 163, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ accel_CLT_multiplier2 = scalar, S16, 164, "%", 0.1, 0, 100, 255, 1
+ tc_led_out = bits, U08, 166, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+;gap
+;gap
+;gap
+ accel_CLT_multiplier = scalar, S16, 206, "%", 0.1, 0, 100, 255, 1
+ cl_idle_timing_target_deltas = array, S16, 208, [8], "rpm", 1, 0, -1000, 1000, 0
+ cl_idle_timing_advance_deltas = array, S16, 224, [8], "deg", 0.1, 0, -90, 90, 0
+
+ ltt_opt_on = bits, U08, 240, [0:0], "Off", "On"
+ ltt_opt_mode = bits, U08, 240, [1:1], "Timed", "Button"
+ ltt_opt_feedback = bits, U08, 240, [2:2], "Off", "On"
+ ltt_but_in = bits, U08, 241, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ltt_int = scalar, U08, 242, "min", 1, 0.00000, 5, 30, 0
+ ltt_led_out = bits, U08, 243, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ltt_thresh = scalar, U16, 244, "%", 0.1, 0.0, 10, 65535, 1
+
+ tc_minmap = scalar, S16, 246, "kPa", 0.10000, 0.00000, 0, 100, 1
+ can_bcast1_on = bits, U08, 248, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 248, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 248, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 248, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 248, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 248, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 248, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 248, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 249, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 249, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 249, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 250, "ms", 0.128, 0.00000, 50, 1000,1
+
+ timedout1_in = bits, U08, 252, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Same as launch", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ timedout1_out = bits, U08, 253, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ timedout1_offdelay = scalar, U16, 254, "s", 0.001, 0, 0, 15, 3
+ tstop_out = bits, U08, 256, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ can_enable_on = bits, U08, 257, [0:0], "Off", "On"
+ tstop_delay = scalar, U16, 258, "s", 0.001, 0, 0, 15, 3
+ tstop_hold = scalar, U16, 260, "s", 0.001, 0, 0, 15, 3
+ oddfireangs1 = scalar, U16, 262, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 264, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 266, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 268, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 270, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 272, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+
+ cel_opt_on = bits, U08, 274, [0:0], "Off", "On"
+ cel_opt_stat = bits, U08, 274, [1:3], "Off", "MAP", "MAT", "CLT", "TPS", "Batt", "EGO", "EGT1"
+ cel_opt_adc = bits, U08, 274, [5:5], "Fluctuation", "ADC counts"
+ cel_opt_flash = bits, U08, 274, [6:6], "Solid", "Flash-codes"
+ cel_opt_when = bits, U08, 274, [7:7], "Off", "On"
+
+ cel_port = bits, U08, 275, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ afr_min = scalar, U08, 276, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_max = scalar, U08, 277, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_var_upper = scalar, U16, 278, "", 1, 0, 0.00, 65535, 0
+ afr_var_lower = scalar, U16, 280, "", 1, 0, 0.00, 65535, 0
+ map_minadc = scalar, U16, 282, "", 1, 0, 0.00, 1023, 0
+ map_maxadc = scalar, U16, 284, "", 1, 0, 0.00, 1023, 0
+ map_var_upper = scalar, U16, 286, "", 1, 0, 0.00, 65535, 0
+ mat_minadc = scalar, U16, 288, "", 1, 0, 0.00, 1023, 0
+ mat_maxadc = scalar, U16, 290, "", 1, 0, 0.00, 1023, 0
+ mat_var_upper = scalar, U16, 292, "", 1, 0, 0.00, 65535, 0
+ clt_minadc = scalar, U16, 294, "", 1, 0, 0.00, 1023, 0
+ clt_maxadc = scalar, U16, 296, "", 1, 0, 0.00, 1023, 0
+ clt_var_upper = scalar, U16, 298, "", 1, 0, 0.00, 65535, 0
+ tps_minadc = scalar, U16, 300, "", 1, 0, 0.00, 1023, 0
+ tps_maxadc = scalar, U16, 302, "", 1, 0, 0.00, 1023, 0
+ tps_var_upper = scalar, U16, 304, "", 1, 0, 0.00, 65535, 0
+ batt_minv = scalar, U08, 306, "", 0.1, 0, 7.00, 23.0, 1
+ batt_maxv = scalar, U08, 307, "", 0.1, 0, 7.00, 23.0, 1
+ batt_var_upper = scalar, U16, 308, "", 1, 0, 0.00, 65535, 0
+ cel_opt2_map = bits, U08, 310, [0:0], "Off", "On"
+ cel_opt2_mat = bits, U08, 310, [1:1], "Off", "On"
+ cel_opt2_clt = bits, U08, 310, [2:2], "Off", "On"
+ cel_opt2_tps = bits, U08, 310, [3:3], "Off", "On"
+ cel_opt2_batt = bits, U08, 310, [4:4], "Off", "On"
+ cel_opt2_afr0 = bits, U08, 310, [5:5], "Off", "On"
+ cel_opt2_sync = bits, U08, 310, [6:6], "Off", "On"
+ cel_opt2_egt = bits, U08, 310, [7:7], "Off", "On"
+ cel_action1_map = bits, U08, 311, [0:0], "Off", "On"
+ cel_action1_mat = bits, U08, 311, [1:1], "Off", "On"
+ cel_action1_clt = bits, U08, 311, [2:2], "Off", "On"
+ cel_action1_tps = bits, U08, 311, [3:3], "Off", "On"
+ cel_action1_batt= bits, U08, 311, [4:4], "Off", "On"
+ cel_action1_ego = bits, U08, 311, [5:5], "Off", "On"
+ cel_action1_sync = bits, U08, 311, [6:6], "Off", "On"
+ cel_action1_map_an = bits, U08, 311, [7:7], "Off", "On"
+#if CELSIUS
+ cel_clt_cold = scalar, S16, 312, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_clt_cold = scalar, S16, 312, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_warmtime = scalar, U16, 316, "mins", 0.01666, 9, 1, 20,1
+#if CELSIUS
+ cel_mat_default = scalar, S16, 318, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_mat_default = scalar, S16, 318, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_revlim = scalar, S16, 320, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ cel_overboost = scalar, S16, 322, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ cel_boost_duty = scalar, U08, 324, "%", 1, 0.00000, 0, 100, 0
+ cel_boost_duty2 = scalar, U08, 325, "%", 1, 0.00000, 0, 100, 0
+ cel_synctol = scalar, U08, 326, "", 1, 0.00000, 0, 100, 0
+ cel_opt3_flex = bits, U08, 327, [0:0], "Off", "On"
+
+ cel_retard = scalar, S16, 328, "deg", 0.10000, 0.00000,0.00, 10.00, 1
+ map_var_lower = scalar, U16, 330, "", 1, 0, 0.00, 65535, 0
+#if CELSIUS
+ egt_minvalid = scalar, S16, 332, "°C", 0.05555, -320.000,-40.00, 1500, 1
+ egt_maxvalid = scalar, S16, 334, "°C", 0.05555, -320.000,-40.00, 1500, 1
+#else
+ egt_minvalid = scalar, S16, 332, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+ egt_maxvalid = scalar, S16, 334, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+#endif
+ egt_var_upper = scalar, U16, 336, "", 1, 0, 0.00, 65535, 0
+ egt_var_lower = scalar, U16, 338, "", 1, 0, 0.00, 65535, 0
+ cel_runtime = scalar, U08, 340, "s", 1, 0.00000, 5, 100, 0
+ cel_action2_flex = bits, U08, 341, [0:0], "Off", "On"
+ cel_action2_egt = bits, U08, 341, [1:1], "Off", "On"
+
+ blend_opt1 = bits, U08, 342, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt2 = bits, U08, 343, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt3 = bits, U08, 344, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt4 = bits, U08, 345, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt5 = bits, U08, 346, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt6 = bits, U08, 347, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt7 = bits, U08, 348, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+;gap in case of more blend curve options
+ fp_opt_mode = bits, U08, 350, [0:1], "On/Off", "Open-Loop PWM", "Closed-Loop PWM", "INVALID"
+ fp_opt_reg = bits, U08, 350, [4:5], "Vac referenced", "Fixed pressure", "Custom correction", "INVALID"
+ fp_opt_inv = bits, U08, 350, [6:6], "Normal", "Inverted"
+ fp_opt_safety = bits, U08, 350, [7:7], "Off", "On"
+ fp_out1 = bits, U08, 351, [0:5], "Fuel Pump", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ rail_pressure_psig = scalar, U16, 352, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ rail_pressure_kpag = scalar, U16, 352, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_Kp = scalar, U16, 354, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Ki = scalar, U16, 356, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Kd = scalar, U16, 358, "%", 0.1, 0.00000, 0, 200, 1
+ fp_prime_duty = scalar, U08, 360, "%", 0.392, 0.00000, 0, 100, 1
+ fp_press_in = bits, U08, 361, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ fp_press_type = bits, U08, 361, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+ fp_freq = bits, U08, 362, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+;spare
+ alternator_opt_mode = bits, U08, 364, [0:2], "Off", "On-Off", "Open-loop frequency", "Open-loop duty", "Closed-loop field control", "High-speed feedback field control", "INVALID", "INVALID"
+; possible application specific option bits
+ alternator_freq = bits, U08, 365, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ alternator_controlout = bits, U08, 366, [0:4], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_control_inv = bits, U08, 366, [6:6], "Normal", "Inverted"
+ alternator_lampout = bits, U08, 367, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ alternator_Kp = scalar, U16, 368, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Ki = scalar, U16, 370, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Kd = scalar, U16, 372, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_startdelay = scalar, U08, 374, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_ramptime = scalar, U08, 375, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_wot = scalar, U16, 376, "%", 0.1, 0.00000, 0, 110, 1
+ alternator_wotv = scalar, U08, 378, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_overrv = scalar, U08, 379, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_wottimeout = scalar, U08, 380, "s", 1, 0.00000, 0, 30, 0
+ alternator_tempin = bits, U08, 381, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ alternator_freq_monin = bits, U08, 382, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_moninv = bits, U08, 382, [6:6], "Normal", "Inverted"
+ alternator_targv = scalar, U08, 383, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_ctl_ms = scalar, U16, 384, "ms", 0.128, 0.00000, 10, 500, 0
+ fp_ctl_ms = scalar, U16, 386, "ms", 0.128, 0.00000, 10, 500, 0
+ alternator_freq_currin = bits, U08, 388, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_currinv = bits, U08, 388, [6:6], "Normal", "Inverted"
+ alternator_chargetime = scalar, U08, 389, "min", 1, 0.00000, 0, 30, 0
+ alternator_targvr = scalar, U08, 390, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_diff = scalar, U08, 391, "V", 0.1, 0.00000, 0.1, 3.0, 1
+ alternator_maxload = scalar, U08, 392, "%", 1, 0.00000, 75, 101, 0
+ hpte_opt_on = bits, U08, 393, [0:0], "Off","On"
+ hpte_load = scalar, S16, 394, "%", 0.10000, 0, 0, {loadhigh}, 1
+ hpte_rpm = scalar, U16, 396, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_opt_pins = bits, U08, 398, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ shiftlight_opt_gear = bits, U08, 398, [7:7], "Off", "On"
+ fc_trans_time_ret = scalar, U08, 399, "s", 0.1, 0, 0.5, 5.0, 1
+ shiftlight_limit1 = scalar, U16, 400, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit2 = scalar, U16, 402, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit3 = scalar, U16, 404, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit4 = scalar, U16, 406, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit5 = scalar, U16, 408, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit6 = scalar, U16, 410, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ltt_samp_time = scalar, U08, 412, "s", 1, 0, 0, 255, 0
+ ltt_agg = scalar, U08, 413, "", 1, 0, 10, 255, 0
+ oilpress_in = bits, U08, 414, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ oilpress_out = bits, U08, 415, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelcalctime = scalar, U16, 416, "ms", 0.128, 0, 100, 8000, 0
+ alternator_sensitivity = scalar, U16, 420, "", 0.1, 0.00000, 0, 20, 0
+ idleminvss = scalar, U16, 422, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0
+
+ flex_baseline = scalar, U16, 424, "%", 0.1, 0.00000, 0, 100,1
+ fc_transition_time = scalar, U08, 426, "s", 0.1, 0, 0.5, 5.0, 1
+ fc_ae_time = scalar, U08, 427, "s", 0.01, 0, 0, 0.5, 2
+ fc_timing = scalar, S16, 428, "deg", 0.10000, 0.00000, -90.0, 180.00, 2
+ fc_ae_pct = scalar, U08, 430, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ fp_off_duty = scalar, U08, 431, "%", 0.392, 0.00000, 0, 100, 1
+ fp_min_duty = scalar, U08, 432, "%", 0.392, 0.00000, 0, 100, 1
+ fp_max_duty = scalar, U08, 433, "%", 0.392, 0.00000, 0, 100, 1
+
+ tcs_in = bits, U08, 434, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tcs_moves = scalar, U08, 435, "", 1, 0, 1, 50, 0
+ tcs_offtime = scalar, U16, 436, "s", 0.001, 0, 0.005, 0.100, 3
+ tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.050, 0.200, 3
+
+ boost_geartarg1 = scalar, S16, 440, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg2 = scalar, S16, 442, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg3 = scalar, S16, 444, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg4 = scalar, S16, 446, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg5 = scalar, S16, 448, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg6 = scalar, S16, 450, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ fp_drop_psig = scalar, U16, 452, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ fp_drop_kpag = scalar, U16, 452, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_drop_load = scalar, U16, 454, "%", 0.1, 0, 0, {loadhigh}, 1
+ fp_drop_rpm = scalar, U16, 456, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fp_drop_time = scalar, U16, 458, "s", 0.001,0, 0, 10, 2
+
+ pwm_opt_load_a_offset = scalar, U16, 460, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_b_offset = scalar, U16, 462, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_c_offset = scalar, U16, 464, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_d_offset = scalar, U16, 466, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_e_offset = scalar, U16, 468, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_f_offset = scalar, U16, 470, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_a_size = scalar, U08, 472, "", 1, 0, 0, 255, 0
+ pwm_opt_load_b_size = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ pwm_opt_load_c_size = scalar, U08, 474, "", 1, 0, 0, 255, 0
+ pwm_opt_load_d_size = scalar, U08, 475, "", 1, 0, 0, 255, 0
+ pwm_opt_load_e_size = scalar, U08, 476, "", 1, 0, 0, 255, 0
+ pwm_opt_load_f_size = scalar, U08, 477, "", 1, 0, 0, 255, 0
+
+ can_gps_id = scalar, U08, 478, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_gps_table = scalar, U08, 479, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_gps_offset = scalar, U16, 480, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ spkadj_max = scalar, S16, 482, "deg", 0.10000, 0.00000,0, 45, 1
+ spkadj_min = scalar, S16, 484, "deg", 0.10000, 0.00000,-45, 0, 1
+
+ can_outpc_msg = scalar, U16, 486, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 488, [7:7], "Off", "On"
+ can_outpc_gp00 = bits, U08, 488, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp01 = bits, U08, 489, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp02 = bits, U08, 490, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp03 = bits, U08, 491, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp04 = bits, U08, 492, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp05 = bits, U08, 493, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp06 = bits, U08, 494, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp07 = bits, U08, 495, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp08 = bits, U08, 496, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp09 = bits, U08, 497, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp10 = bits, U08, 498, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp11 = bits, U08, 499, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp12 = bits, U08, 500, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp13 = bits, U08, 501, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp14 = bits, U08, 502, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp15 = bits, U08, 503, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp16 = bits, U08, 504, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp17 = bits, U08, 505, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp18 = bits, U08, 506, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp19 = bits, U08, 507, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp20 = bits, U08, 508, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp21 = bits, U08, 509, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp22 = bits, U08, 510, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp23 = bits, U08, 511, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp24 = bits, U08, 512, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp25 = bits, U08, 513, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp26 = bits, U08, 514, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp27 = bits, U08, 515, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp28 = bits, U08, 516, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp29 = bits, U08, 517, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp30 = bits, U08, 518, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp31 = bits, U08, 519, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp32 = bits, U08, 520, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp33 = bits, U08, 521, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp34 = bits, U08, 522, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp35 = bits, U08, 523, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp36 = bits, U08, 524, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp37 = bits, U08, 525, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp38 = bits, U08, 526, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp39 = bits, U08, 527, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp40 = bits, U08, 528, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp41 = bits, U08, 529, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp42 = bits, U08, 530, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp43 = bits, U08, 531, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp44 = bits, U08, 532, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp45 = bits, U08, 533, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp46 = bits, U08, 534, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp47 = bits, U08, 535, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp48 = bits, U08, 536, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp49 = bits, U08, 537, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp50 = bits, U08, 538, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp51 = bits, U08, 539, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp52 = bits, U08, 540, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp53 = bits, U08, 541, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp54 = bits, U08, 542, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp55 = bits, U08, 543, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp56 = bits, U08, 544, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp57 = bits, U08, 545, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp58 = bits, U08, 546, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp59 = bits, U08, 547, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp60 = bits, U08, 548, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp61 = bits, U08, 549, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp62 = bits, U08, 550, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp63 = bits, U08, 551, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+
+ can_rcv_opt_on = bits, U08, 552, [0:0], "Off", "On"
+; engine_state_accel_fast_thresh = scalar, S16, 553, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_accel_slow_thresh = scalar, S16, 555, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_decel_fast_thresh = scalar, S16, 557, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_decel_slow_thresh = scalar, S16, 559, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_tps_closed_thresh = scalar, S16, 561, "%", 0.1, 0, 0, 5, 1
+; engine_state_overrun_map_thresh = scalar, S16, 563, "kPa", 0.1, 0, 0, 100, 1
+; engine_state_overrun_rpm_thresh = scalar, U16, 565, "rpm", 1, 0, 0, {rpmhigh}, 0
+
+ vss_samp_int = scalar, U16, 568, "ms", 0.05, 0, 10, 50, 2
+
+; somewhat big gap here
+; ###### ### ##### ##### # ######
+; # # # # # # # # # # #
+; # # # # # # # # #
+; ###### # # #### # #### # # ######
+; # # # # # # # ####### #
+; # # # # # # # # # #
+; ###### ### ##### ##### # # #
+;
+; big pad
+ dummyfield = bits, U08, 637, [0:0], "",""
+
+ staged_out2 = bits, U08, 638, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out2_inv = bits, U08, 638, [7:7], "Normal", "Inverted"
+ staged_out2_time = scalar, U08, 639, "s", 0.1, 0, 0, 1, 1
+ u16_debug640 = scalar, U16, 640, "", 1, 0.00000, 0, 65536, 0
+ staged_out1 = bits, U08, 642, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out1_inv = bits, U08, 642, [7:7], "Normal", "Inverted"
+ log_style4_opt = bits, U08, 643, [0:1], "RPM", "TPS", "MAP", "INVALID"
+ log_trig_rpm = scalar, U16, 644, "RPM", 1, 0, 0, {rpmhigh}, 0
+ log_trig_tps = scalar, U16, 646, "%", 0.1, 0, 0, 100, 0
+
+ baudhigh = scalar, U32, 648, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ fuelCorr_default = scalar, U08, 652, "%", 1.00000, 0.00000, 50, 255, 0
+ sdpulse_out = bits, U08, 653, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelSpkDel_default = scalar, S16, 654, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ map_phase_thresh = scalar, S16, 656, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ flex_pct0 = scalar, U16, 658, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 660, "%", 0.1, 0.00000, 0, 100,1
+
+;generic sensors
+ sensor01_source = bits, U08, 662, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor02_source = bits, U08, 663, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor03_source = bits, U08, 664, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor04_source = bits, U08, 665, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor05_source = bits, U08, 666, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor06_source = bits, U08, 667, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor07_source = bits, U08, 668, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor08_source = bits, U08, 669, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor09_source = bits, U08, 670, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor10_source = bits, U08, 671, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor11_source = bits, U08, 672, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor12_source = bits, U08, 673, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor13_source = bits, U08, 674, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor14_source = bits, U08, 675, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor15_source = bits, U08, 676, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor16_source = bits, U08, 677, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor01_trans = bits, U08, 678, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor02_trans = bits, U08, 679, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor03_trans = bits, U08, 680, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor04_trans = bits, U08, 681, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor05_trans = bits, U08, 682, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor06_trans = bits, U08, 683, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor07_trans = bits, U08, 684, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor08_trans = bits, U08, 685, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor09_trans = bits, U08, 686, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor10_trans = bits, U08, 687, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor11_trans = bits, U08, 688, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor12_trans = bits, U08, 689, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor13_trans = bits, U08, 690, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor14_trans = bits, U08, 691, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor15_trans = bits, U08, 692, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor16_trans = bits, U08, 693, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor01_val0 = scalar, S16, 694, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_val0 = scalar, S16, 696, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_val0 = scalar, S16, 698, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_val0 = scalar, S16, 700, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_val0 = scalar, S16, 702, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_val0 = scalar, S16, 704, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_val0 = scalar, S16, 706, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_val0 = scalar, S16, 708, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_val0 = scalar, S16, 710, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_val0 = scalar, S16, 712, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_val0 = scalar, S16, 714, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+
+ sensor12_val0 = scalar, S16, 716, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_val0 = scalar, S16, 718, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_val0 = scalar, S16, 720, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_val0 = scalar, S16, 722, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_val0 = scalar, S16, 724, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01_max = scalar, S16, 726, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_max = scalar, S16, 728, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_max = scalar, S16, 730, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_max = scalar, S16, 732, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_max = scalar, S16, 734, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_max = scalar, S16, 736, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_max = scalar, S16, 738, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_max = scalar, S16, 740, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_max = scalar, S16, 742, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_max = scalar, S16, 744, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_max = scalar, S16, 746, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor12_max = scalar, S16, 748, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_max = scalar, S16, 750, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_max = scalar, S16, 752, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_max = scalar, S16, 754, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_max = scalar, S16, 756, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01LF = scalar, U08, 758, "", 1,0,10,100,0
+ sensor02LF = scalar, U08, 759, "", 1,0,10,100,0
+ sensor03LF = scalar, U08, 760, "", 1,0,10,100,0
+ sensor04LF = scalar, U08, 761, "", 1,0,10,100,0
+ sensor05LF = scalar, U08, 762, "", 1,0,10,100,0
+ sensor06LF = scalar, U08, 763, "", 1,0,10,100,0
+ sensor07LF = scalar, U08, 764, "", 1,0,10,100,0
+ sensor08LF = scalar, U08, 765, "", 1,0,10,100,0
+ sensor09LF = scalar, U08, 766, "", 1,0,10,100,0
+ sensor10LF = scalar, U08, 767, "", 1,0,10,100,0
+ sensor11LF = scalar, U08, 768, "", 1,0,10,100,0
+ sensor12LF = scalar, U08, 769, "", 1,0,10,100,0
+ sensor13LF = scalar, U08, 770, "", 1,0,10,100,0
+ sensor14LF = scalar, U08, 771, "", 1,0,10,100,0
+ sensor15LF = scalar, U08, 772, "", 1,0,10,100,0
+ sensor16LF = scalar, U08, 773, "", 1,0,10,100,0
+ sensor_temp = bits, U08, 774, [0:0], "degF", "degC"
+;pad
+#if PW_4X
+ injOpen1 = scalar, U16, 776, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ injOpen1 = scalar, U16, 776, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ shift_cut_on = bits, U08, 812, [0:0], "Off", "On"
+ shift_cut_auto = bits, U08, 812, [1:1], "Button", "Auto"
+ shift_cut_gear = bits, U08, 812, [2:2], "Off", "On"
+ shift_cut_fuel = bits, U08, 812, [3:3], "Off", "On"
+ shift_cut_in = bits, U08, 813, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_out = bits, U08, 814, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_rpm = scalar, U16, 815, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 817, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 819, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 820, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add12 = scalar, U08, 821, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add23 = scalar, U08, 822, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add34 = scalar, U08, 823, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add45 = scalar, U08, 824, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add56 = scalar, U08, 825, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 826, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_rpm12 = scalar, U16, 827, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm23 = scalar, U16, 829, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm34 = scalar, U16, 831, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm45 = scalar, U16, 833, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm56 = scalar, U16, 835, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_reshift= scalar, U08, 837, "s", 0.01024, 0, 0, 2.55, 2
+;open-loop PWM. all arrays
+ pwm_opt_on_a = bits, U08, 838, [0:0], "Off", "On"
+ pwm_opt_freq_a = bits, U08, 838, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_a = bits, U08, 838, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ pwm_opt_on_b = bits, U08, 839, [0:0], "Off", "On"
+ pwm_opt_freq_b = bits, U08, 839, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_b = bits, U08, 839, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_c = bits, U08, 840, [0:0], "Off", "On"
+ pwm_opt_freq_c = bits, U08, 840, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_c = bits, U08, 840, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_d = bits, U08, 841, [0:0], "Off", "On"
+ pwm_opt_freq_d = bits, U08, 841, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_d = bits, U08, 841, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_e = bits, U08, 842, [0:0], "Off", "On"
+ pwm_opt_freq_e = bits, U08, 842, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_e = bits, U08, 842, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_f = bits, U08, 843, [0:0], "Off", "On"
+ pwm_opt_freq_f = bits, U08, 843, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_f = bits, U08, 843, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ pwm_opt2_a = bits, U08, 844, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_b = bits, U08, 845, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_c = bits, U08, 846, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_d = bits, U08, 847, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_e = bits, U08, 848, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_f = bits, U08, 849, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_onabove_a = scalar, U08, 850, "%", 1, 0, 0, 100, 0
+ pwm_onabove_b = scalar, U08, 851, "%", 1, 0, 0, 100, 0
+ pwm_onabove_c = scalar, U08, 852, "%", 1, 0, 0, 100, 0
+ pwm_onabove_d = scalar, U08, 853, "%", 1, 0, 0, 100, 0
+ pwm_onabove_e = scalar, U08, 854, "%", 1, 0, 0, 100, 0
+ pwm_onabove_f = scalar, U08, 855, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_a = scalar, U08, 856, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_b = scalar, U08, 857, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_c = scalar, U08, 858, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_d = scalar, U08, 859, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_e = scalar, U08, 860, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_f = scalar, U08, 861, "%", 1, 0, 0, 100, 0
+
+ dualfuel_sw_on = bits, U08, 862, [0:0], "Off", "On"
+ dualfuel_sw_fuel = bits,U08, 862, [1:1], "Off", "On"
+ dualfuel_sw_spk = bits, U08, 862, [2:2], "Off", "On"
+ dualfuel_sw_afr = bits, U08, 862, [3:3], "Off", "On"
+ dualfuel_sw_rf = bits, U08, 862, [4:4], "Off", "On"
+ dualfuel_sw_stoich=bits,U08, 862, [5:5], "Off", "On"
+ dualfuel_sw_wue = bits, U08, 862, [6:6], "Off", "On"
+ dualfuel_sw_ase = bits, U08, 862, [7:7], "Off", "On"
+ dualfuel_sw2_prime=bits,U08, 863, [0:0], "Off", "On"
+ dualfuel_sw2_crank=bits,U08, 863, [1:1], "Off", "On"
+ dualfuel_sw2_injp =bits,U08, 863, [2:2], "Off", "On"
+ dualfuel_sw2_smpw =bits,U08, 863, [3:3], "Off", "On"
+ dualfuel_sw2_ob =bits ,U08, 863, [4:4], "Off", "On"
+ dualfuel_sw2_boosw=bits,U08, 863, [5:5], "Off", "On"
+ dualfuel_sw2_ae =bits,U08, 863, [6:6], "Off", "On"
+ opentime2_opt1_master = bits, U08, 864, [7:7], "Same", "Individual"
+ opentime2_opt1 = bits, U08, 864, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt2 = bits, U08, 865, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt3 = bits, U08, 866, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt4 = bits, U08, 867, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt5 = bits, U08, 868, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt6 = bits, U08, 869, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt7 = bits, U08, 870, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt8 = bits, U08, 871, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta = bits, U08, 872, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta_pwm= bits, U08, 872, [4:4], "Off", "On"
+ opentime2_optb = bits, U08, 873, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_optb_pwm= bits, U08, 873, [4:4], "Off", "On"
+ opentime2_optb_own= bits, U08, 873, [5:5], "Off", "On"
+
+ opentime2_opt11 = bits, U08, 874, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt12 = bits, U08, 875, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt13 = bits, U08, 876, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt14 = bits, U08, 877, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt15 = bits, U08, 878, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt16 = bits, U08, 879, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt17 = bits, U08, 880, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt18 = bits, U08, 881, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt1_master = bits, U08, 864, [7:7], "Off", "On"
+ smallpw2_opt1 = bits, U08, 882, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt2 = bits, U08, 883, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt3 = bits, U08, 884, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt4 = bits, U08, 885, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt5 = bits, U08, 886, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt6 = bits, U08, 887, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt7 = bits, U08, 888, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt8 = bits, U08, 889, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opta = bits, U08, 890, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_optb = bits, U08, 891, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt11 = bits, U08, 892, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt12 = bits, U08, 893, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt13 = bits, U08, 894, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt14 = bits, U08, 895, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt15 = bits, U08, 896, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt16 = bits, U08, 897, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt17 = bits, U08, 898, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt18 = bits, U08, 899, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ dualfuel_pin = bits, U08, 900, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ dualfuel_opt_temp= bits, U08, 901, [0:0], "Off", "On"
+ dualfuel_opt_press=bits, U08, 901, [1:1], "Off", "On"
+ dualfuel_opt_mode = bits,U08, 901, [2:3], "Switching", "Dual table", "Flex blend", "INVALID"
+ dualfuel_opt_out = bits,U08, 901, [4:4], "Shared outputs+relay", "Different outputs"
+
+#if PW_4X
+ inj2Open1 = scalar, U16, 902, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+
+ inj2Open13 = scalar, U16, 926, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open17 = scalar, U16, 934, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ inj2Open1 = scalar, U16, 902, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open13 = scalar, U16, 926, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+
+ inj2Open17 = scalar, U16, 934, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ inj2PwmT = scalar, U08, 938, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd = scalar, U08, 939, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP = scalar, U08, 940, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmT2 = scalar, U08, 941, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd2 = scalar, U08, 942, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP2 = scalar, U08, 943, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ dualfuel_temp_sens = bits, U08, 944, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_sens = bits, U08, 945, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_type = bits, U08, 945, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+; Leave these unused variables matching MS2 in case trans controller erroneously adjusts them
+; FuelAdj 946
+; SpkAdj, 948
+; IdleAdj, 950
+; SprAdj; 952
+
+ pwm_opt_curve_a = bits, U08, 954, [0:0], "Table", "Curve"
+ pwm_opt_curve_b = bits, U08, 954, [1:1], "Table", "Curve"
+ pwm_opt_curve_c = bits, U08, 954, [2:2], "Table", "Curve"
+ pwm_opt_curve_d = bits, U08, 954, [3:3], "Table", "Curve"
+ pwm_opt_curve_e = bits, U08, 954, [4:4], "Table", "Curve"
+ pwm_opt_curve_f = bits, U08, 954, [5:5], "Table", "Curve"
+;gap
+ ITB_load_mappoint = scalar, S16, 956, "% baro", 0.1000, 0, 30, 100.0, 1
+ ITB_load_idletpsthresh = scalar, S16, 958, "%", 0.1000, 0, -10, 100, 0
+ idle_voltage_comp_voltage = array, S16, 960, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_delta = array, S16, 972, [6], "%", 0.392, 0.00000, -20, 20, 1
+ ac_idleup_max_rpm = scalar, U16, 984, "rpm", 1, 0, 1000, {rpmhigh}, 0
+ llstg_in = bits, U08, 986, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ llstg_out = bits, U08, 987, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ kickdelay = scalar, U16, 988, "ms", 0.001,0.00000,0.1,35.00,3
+ log_trig_map = scalar, S16, 990, "%", 0.1, 0, 0, {loadhigh}, 0
+
+ page = 3 ; 8
+ boost_ctl_load_targets = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if PW_4X
+ primePWTable = array, S16, 256, [ 10], "ms", 0.40000, 0.00000, 0.00, 260.00, 1 ; * ( 20 bytes)
+#else
+ primePWTable = array, S16, 256, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+#endif
+ crankPctTable =array, U16, 276, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable =array, S16, 296, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable =array, S16, 316, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+
+#if CELSIUS
+ matTemps =array, S16, 336, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps =array, S16, 336, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard =array, U08, 348, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 354, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 378, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 402, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAESOCKPAbins = array, U16, 426, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAEBAWC = array, U08, 450, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 462, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 474, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 486, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 498, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 510, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+
+ ; Supplemental corrections for barometer and MAT.
+ baroCorrVals = array , S16, 522, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 540, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 540, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+
+#if CELSIUS
+ temp_table_p5 = array, S16, 558, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 558, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+ pwmidle_target_rpms = array, U16, 626, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 642, [8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ;
+ #else
+ pwmidle_clt_temps = array, S16, 642, [8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+;gap 20 bytes
+#if CELSIUS
+ RevLimLookup = array , S16, 678, [ 8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 678, [ 8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 694, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes
+;gap 24 bytes
+ RotarySplitTable = array, S16, 734, [8x8], "deg", 0.10000, 0.00000, -60, 20, 1
+ RotarySplitLoad = array, U16, 862, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, {loadhigh}, 0
+ RotarySplitRPM = array, U16, 878, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+
+ NoiseFilterRpm = array, U16, 894, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 902, [ 4], "usec", 1.0, 0.00000, 0.00, 43000, 1
+
+ VariableLagTPSBins = array, U08, 910, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 914, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 918, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 918, [4], "steps", 1, 0, 0, 512, 0
+
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ matclt_pct = array, U16, 934, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 946, [6], "load*rpm", 100, 0, 0, 6553500, 0
+ ;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 958, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 960, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 962, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 962, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;spare 10 bytes
+;end user defined
+;pad1
+ baroCorrDelta = array , S16, 974, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 992, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+; space
+
+page = 4 ; 9 - injector channel trims
+ inj_trima = array , S08, 000, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimb = array , S08, 036, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimc = array , S08, 072, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimd = array , S08, 108, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trime = array , S08, 144, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimf = array , S08, 180, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimg = array , S08, 216, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimh = array , S08, 252, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimi = array , S08, 288, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimj = array , S08, 324, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimk = array , S08, 360, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_triml = array , S08, 396, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimm = array , S08, 432, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimn = array , S08, 468, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimo = array , S08, 504, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimp = array , S08, 540, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+
+ inj_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ inj_trim_load =array, U16, 588, [6], { bitStringValue( algorithmUnits , algorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1
+ inj_timing = array, S16, 600, [12x12], "deg", 0.10000, 0.00000, -360.0, 720.0, 1
+ inj_timing_rpm = array, U16, 888, [12], "rpm", 1, 0, 0, {rpmhigh}, 0
+ inj_timing_load = array, S16, 912, [12], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_load = array, U16, 936, [6], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_rpm = array, U16, 948, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if LAMBDA
+ maxafr1_diff = array, U08, 960, [6x6], "Lambda", 0.006803, 0.00000, 0.00, 0.14, 3
+#else
+ maxafr1_diff = array, U08, 960, [6x6], "AFR", 0.10000, 0.00000, 0.00, 2.00, 1
+#endif
+ dwellrpm_dwell = array, U08, 996, [6], "ms", 0.1, 0, 1, 8, 1
+ dwellrpm_rpm = array, U16, 1002, [6], "RPM", 1, 0, 0, 15000, 0
+
+page = 5 ; 10
+ boost_ctl_load_targets2 = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins2=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins2=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets2 = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins2=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins2=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_timed_pct = array, U08, 256, [ 6 ], "%", 1, 0, 0, 100, 0
+ boost_timed_time= array, U16, 262, [ 6 ], "s", 0.001, 0, 0, 15, 1
+ boostvss_duty = array, U08, 274, [ 6 ], "%", 1, 0, 0, 100, 0
+ boostvss_target = array, U16, 280, [ 6 ], "kPa", 0.1, 0, 0, {loadhigh}, 1
+ boostvss_speed = array, U16, 292, [ 6 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ map_sample_rpms = array, U16, 304, [ 8 ], "rpm", 1, 0, 0, {rpmhigh}, 0
+ map_sample_timing = array, S16, 320, [ 8 ], "deg", 0.10000, 0, -360, 720, 1
+#if LAMBDA
+ afrTable1 = array , U08, 336, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 480, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 336, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 480, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 624, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+;gap 8 bytes
+ iacstepTable = array , S16, 642, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+ arpm_table1 = array , U16, 662, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 686, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 710, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ amap_table2 = array , S16, 734, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ tempTable = array , S16, 758, [ 10], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE ; temp_table
+ #else
+ tempTable = array , S16, 758, [ 10], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ #endif
+;gap
+ dwellvolts = array , U08, 794, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 800, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ cold_adv_table = array , S16, 806, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ ipwmTable = array , S16, 826, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+;846
+ opentimepct0 = array, U16, 846, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct1 = array, U16, 858, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct2 = array, U16, 870, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct3 = array, U16, 882, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimev = array, U16, 894, [ 6], "V", 0.100, 0.00000, 6, 19.2, 1
+
+#if PW_4X
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+#else
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+#endif
+
+ waterinj_rpm = array, U16, 966, [ 8], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ waterinj_map = array, U16, 982, [ 4], "kPa", 0.1, 0.00000, 0.00, {loadhigh}, 0
+ waterinj_duty = array, U08, 990, [8 x 4], "%", 1, 0, 0, 100, 0
+
+page = 6 ; 11 - spark channel trims
+ spk_trima = array , S08, 000, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimb = array , S08, 036, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimc = array , S08, 072, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimd = array , S08, 108, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trime = array , S08, 144, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimf = array , S08, 180, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimg = array , S08, 216, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimh = array , S08, 252, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimi = array , S08, 288, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimj = array , S08, 324, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimk = array , S08, 360, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_triml = array , S08, 396, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimm = array , S08, 432, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimn = array , S08, 468, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimo = array , S08, 504, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimp = array , S08, 540, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ spk_trim_load = array, U16, 588, [6], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1 ; * (12 bytes)
+ XAcc =array, U16, 600, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauAcc =array, U16, 610, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XDec =array, U16, 620, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauDec =array, U16, 630, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XTrpms =array, U16, 640, [5], "rpm",1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 10 bytes)
+ XClt =array, U16, 650, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ TauClt =array, U16, 670, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+#if CELSIUS
+ XClt_temps = array, S16, 690, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ TauClt_temps = array, S16, 710, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ XClt_temps = array, S16, 690, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ TauClt_temps = array, S16, 710, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ launch_time = array, U16, 730, [10], "s", 0.001, 0, 0, 15, 2
+ launch_retard = array, U16, 750, [10], "deg", 0.1, 0, 0, 30, 1
+;gap (68 bytes)
+; staged tables
+ staged_percents=array, U08, 838, [8x8], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 902, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 918, [8], "%", 0.1, 0, 0, 250, 1
+ MAFFlow = array, U16, 934, [12], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 1
+ MAFCor = array, U08, 958, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+;gap
+ cranktaper_time=array, U16, 994, [6], "s", 0.1, 0, 0, 15, 1
+ cranktaper_timeevents=array,U16, 994, [6], "events", 1, 0, 0, 1000, 0 ; same again, different units
+ cranktaper_pct =array, U16, 1006, [6], "%", 0.1, 0, 0, 500, 0
+
+page = 7 ; 12
+ veTable1 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ; * (512 bytes)
+ veTable2 = array , U16, 512, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+
+page = 8 ; 13
+ advanceTable1 = array , S16, 000, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+ advanceTable2 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+
+page = 9 ; 18
+ veTable3 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable3 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 10 ; 19
+ frpm_table1 = array , U16, 000, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2 = array , U16, 032, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3 = array , U16, 064, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ fmap_table1 = array , S16, 096, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table2 = array , S16, 128, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table3 = array , S16, 160, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+
+ srpm_table1 = array , U16, 192, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 224, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table3 = array , U16, 256, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ smap_table1 = array , S16, 288, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table2 = array , S16, 320, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table3 = array , S16, 352, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ EAEAWCRPMbins2 = array, U16, 384, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAESOCRPMbins2 = array, U16, 408, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAEAWCKPAbins2 = array, U16, 432, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAESOCKPAbins2 = array, U16, 456, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAEBAWC2 = array, U08, 480, [ 12], "%", 1.0000, 0.00000, 0.00, 100.00, 0
+ EAEBSOC2 = array, U08, 492, [ 12], "%", 0.10000, 0.00000, 0.00, 25.5, 1
+ EAEAWN2 = array, U08, 504, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON2 = array, U08, 516, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAEAWW2 = array, U08, 528, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+ EAESOW2 = array, U08, 540, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+
+#if CELSIUS
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ ITB_load_loadvals= array, S16, 600, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 624, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 648, [ 12], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+ idleve_table1 = array, U16, 672, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_table2 = array, U16, 704, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_loads1 = array, S16, 736, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_loads2 = array, S16, 744, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_rpms1 = array, U16, 752, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+ idleve_rpms2 = array, U16, 760, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+;TC
+ tc_perfect_vss = array, U16, 768, [ 10 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_perfect_time = array, U16, 788, [ 10 ], "s", 0.001024, 0.00000, 0, 30, 1
+ tc_react_x = array, U16, 808, [ 4 ], "slip% x 0.01s", 0.1, 0.00000, 0, 10000, 1
+ tc_retard = array, U16, 816, [ 4 ], "deg", 0.1, 0.00000, 0, 30, 1
+ tc_spkcut = array, U08, 824, [ 4 ], "cut%", 1, 0.00000, 0, 100, 0
+ tc_addfuel = array, U08, 828, [ 4 ], "add%", 1, 0.00000, 0, 100, 1
+ tc_nitrous = array, U08, 832, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+ tc_boost = array, U08, 836, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+;840
+ knock_rpms = array, U16, 840, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds= array, U16, 860, [10], "%", 0.1, 0, 0, 100, 1
+ knock_starts= array, S16, 880, [10], "deg", 0.1, 0, -50, 50, 1
+ knock_durations = array, S16, 900, [10], "deg", 0.1, 0, 0, 50, 1
+;920
+ pwmidle_cl_initialvalue_rpms = array, U16, 920, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°C", 0.05555, -320, -40, 230, 0
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°F", 0.10000, 0.000, -40, 450, 0
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 940, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 940, [5 x 5], "steps", 1, 0, 0, 255, 0
+;pad
+#if CELSIUS
+ knock_clts = array, S16, 966, [ 4], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ knock_clts = array, S16, 966, [ 4], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ knock_upscale = array, U16, 974, [4], "%", 0.1, 0, 100, 600, 1
+ tc_perfect_rpm = array, U16, 982, [ 10 ], "rpm", 1.0000, 0.00000, 0, {rpmhigh}, 0
+ tc_boost_duty_delta = array, S08, 1002, [ 4 ], "+/-duty", 1, 0.00000, -100, 100, 0
+
+page = 11 ; 21
+ pwm_rpms_a = array, S16, 0, [6], "rpm",{ pwm_opt_curve_a == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_a_offset) } , { pwm_opt_curve_a == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_loadvals_a = array, S16, 12, [6], "%", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_xaxis_a = array, S16, 0, [12], "", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+
+ pwm_rpms_b = array, S16, 24, [6], "rpm",{ pwm_opt_curve_b == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_b_offset) } , { pwm_opt_curve_b == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_loadvals_b = array, S16, 36, [6], "%", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_xaxis_b = array, S16, 24, [12], "", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+
+ pwm_rpms_c = array, S16, 48, [6], "rpm",{ pwm_opt_curve_c == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_c_offset) } , { pwm_opt_curve_c == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_loadvals_c = array, S16, 60, [6], "%", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_xaxis_c = array, S16, 48, [12], "", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+
+ pwm_rpms_d = array, S16, 72, [6], "rpm",{ pwm_opt_curve_d == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_d_offset) } , { pwm_opt_curve_d == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_loadvals_d = array, S16, 84, [6], "%", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_xaxis_d = array, S16, 72, [12], "", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+
+ pwm_rpms_e = array, S16, 96, [6], "rpm",{ pwm_opt_curve_e == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_e_offset) } , { pwm_opt_curve_e == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_loadvals_e = array, S16, 108,[6], "%", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_xaxis_e = array, S16, 96, [12], "", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+
+ pwm_rpms_f = array, S16, 120, [6], "rpm",{ pwm_opt_curve_f == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_f_offset) } , { pwm_opt_curve_f == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_loadvals_f = array, S16, 132, [6], "%", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_xaxis_f = array, S16, 120, [12], "", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+
+ pwm_duties_a = array, U08, 144, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_a = array, U08, 144, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_b = array, U08, 180, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_b = array, U08, 180, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_c = array, U08, 216, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_c = array, U08, 216, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_d = array, U08, 252, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_d = array, U08, 252, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_e = array, U08, 288, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_e = array, U08, 288, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_f = array, U08, 324, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_f = array, U08, 324, [12], "%", 1, 0, 0, 250, 0
+
+ primePWTable2 = array, S16, 360, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable2 = array, U16, 380, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable2 = array, S16, 400, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable2 = array, S16, 420, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+ wueBins2 = array, U08, 440, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+#if CELSIUS
+ temp_table_p21 = array, S16, 450, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p21 = array, S16, 450, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ frpm_table4 = array , U16, 470, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table4 = array , S16, 502, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ srpm_table4 = array , U16, 534, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table4 = array , S16, 566, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ dualfuel_temp = array, S16, 598, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ dualfuel_temp = array, S16, 598, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ dualfuel_temp_adj=array, S16, 618, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ dualfuel_press = array, S16, 638, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ dualfuel_press_adj=array, S16, 658, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ inj_timing_sec=array, S16, 678, [12x12], "deg", 0.10000, 0.000, -360, 720, 1
+ inj_timing_sec_load=array, S16, 966, [ 12], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ inj_timing_sec_rpm=array, U16, 990, [ 12], "rpm", 1, 0, 0, {rpmhigh}, 0
+
+page = 12 ; 22
+ veTable4 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable4 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 13 ; 23
+ ; Generic on/off outputs "Spare Port Settings"
+ psEnabled = array , U08, 0, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psCondition = array , U08, 51, [ 51x2], "", 1, 0, 32, 124, 0, noSizeMutation
+ psConnector = array , U08, 153, [ 51], "", 1, 0, 32, 124, 0, noSizeMutation
+ psInitValue = array , U08, 204, [ 51], "", 1, 0 0, 1, 0, noSizeMutation
+ psPortValue = array , U08, 255, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psOutSize = array , U08, 306, [ 51x2], "", 1, 0, 0, 255, 0, noSizeMutation
+ psOutOffset = array , U16, 408, [ 51x2], "", 1, 0, 0, 1024, 0, noSizeMutation
+ psThreshold = array , S16, 612, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ psHysteresis = array , S16, 816, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ ;next is 1020
+ vvt_softout1 = bits, U08, 1020, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout2 = bits, U08, 1021, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout3 = bits, U08, 1022, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout4 = bits, U08, 1023, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+page = 14 ; 24
+ narrowband_tgts = array, U16, 0, [12x12], "V", 0.00488, 0.00000, 0, 1, 3
+ narrowband_tgts_rpms = array, U16, 288, [ 12], "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ narrowband_tgts_loads = array, S16,312, [ 12], "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+ als_opt_fc = bits, U08, 336, [0:0], "Off", "On"
+ als_opt_sc = bits, U08, 336, [1:1], "Off", "On"
+ als_opt_idle = bits, U08, 336, [2:2], "Off", "On"
+ als_opt_fuel = bits, U08, 336, [3:3], "Off", "On"
+ als_opt_pwmout= bits, U08, 336, [4:4], "Off", "On"
+ als_opt_ri = bits, U08, 336, [5:5], "Off", "On"
+ als_maxtime = scalar, U08, 337, "s", 0.1, 0, 1, 25.5, 1
+; als_mintps = scalar, S16, 338, "%", 0.10000, 0.00000, 0, 100, 1
+ als_maxtps = scalar, S16, 340, "%", 0.10000, 0.00000, 0, 100, 1
+ als_iac_duty = scalar, U08, 342, "%", 0.392, 0.00000, 0, 100, 1
+ als_iac_steps = scalar, U08, 342, "steps", 1, 0, 0, 255, 0
+ als_in_pin = bits, U08, 343, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ als_out_pin = bits, U08, 344, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ als_pwm_duty = scalar, U08, 345, "%", 1, 0, 0, 100, 0
+ als_pausetime = scalar, U08, 346, "s", 0.1, 0, 0, 25.5, 1
+ vvt_slew = scalar, U08, 347, "deg", 0.1, 0, 0.1, 25.5, 1
+#if CELSIUS
+ als_minclt = scalar, S16, 348, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+ als_maxclt = scalar, S16, 350, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_minclt = scalar, S16, 348, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+ als_maxclt = scalar, S16, 350, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+;ALS tables
+ als_rpms = array, U16, 352, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_tpss = array, U16, 364, [6], "%", 0.1, 0, 0, 100, 0
+ als_timing = array, S16, 376, [6x6], "degrees", 0.10000,0.00000,-50.00, 50.00,1;
+ als_addfuel = array, S16, 448, [6x6], "%", 0.1, 0, 0, 100, 1
+ als_fuelcut = array, U08, 520, [6x6], "%", 1, 0, 0, 100, 0
+ als_sparkcut = array, U08, 556, [6x6], "%", 1, 0, 0, 100, 0
+ als_minrpm = scalar, U16, 592, "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_maxrpm = scalar, U16, 594, "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ als_maxmat = scalar, S16, 596, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_maxmat = scalar, S16, 596, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_onoff_ang = scalar, S16, 598, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt1_on = bits, U08, 600, [0:1], "Off", "1", "2", "4"
+ vvt_opt1_filter = bits, U08, 600, [2:2], "Off", "On"
+ vvt_opt1_int = bits, U08, 600, [3:3], "Synced to cam", "Timed"
+ vvt_opt1_tst = bits, U08, 600, [4:6], "Off", "VVT1", "VVT2", "VVT3", "VVT4", "INVALID", "INVALID", "INVALID" ; 0, 1, 2, 3, 4
+ vvt_opt1_dir_exhaust = bits, U08, 600, [7:7], "Advance", "Retard"
+ vvt_hold_duty = scalar, U08, 601, "%", 0.392, 0, 0, 100, 1
+ vvt_out1 = bits, U08, 602, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out2 = bits, U08, 603, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out3 = bits, U08, 604, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out4 = bits, U08, 605, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out1_dir = bits, U08, 602, [7:7], "Advance", "Retard"
+ vvt_out2_dir = bits, U08, 603, [7:7], "Advance", "Retard"
+ vvt_out3_dir = bits, U08, 604, [7:7], "Advance", "Retard"
+ vvt_out4_dir = bits, U08, 605, [7:7], "Advance", "Retard"
+ vvt_ctl_ms = scalar, U16, 606, "ms", 1, 0.00000, 10, 500, 0
+ vvt_ctl_Kp = scalar, U08, 608, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki = scalar, U08, 609, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd = scalar, U08, 610, "%", 1, 0.00000, 0, 200, 0
+ vvt_test_duty = scalar, U08, 611, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_min_ang1 = scalar, S16, 612, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang2 = scalar, S16, 614, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang3 = scalar, S16, 616, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang4 = scalar, S16, 618, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang1 = scalar, S16, 620, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang2 = scalar, S16, 622, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang3 = scalar, S16, 624, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang4 = scalar, S16, 626, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt2_pid = bits, U08, 628, [0:0], "On/off", "PID"
+ vvt_opt2_pid2 = bits, U08, 628, [0:0], "On/Off", "Variable"
+ vvt_opt2_use_hold_intake = bits, U08, 628, [1:1], "Off", "On"
+ vvt_opt2_use_hold_exhaust = bits, U08, 628, [2:2], "Off", "On"
+ vvt_opt2_cam2pol = bits, U08, 628, [4:4], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam3pol = bits, U08, 628, [5:5], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam4pol = bits, U08, 628, [6:6], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam1pol = bits, U08, 628, [7:7], "Falling Edge", "Rising Edge"
+ vvt_opt3_cam2 = bits, U08, 629, [0:1], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam3 = bits, U08, 629, [2:3], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam4 = bits, U08, 629, [4:5], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam1 = bits, U08, 629, [6:6], "Main cam", "INVALID" ; for display only
+ vvt_timing_load = array, S16, 630, [ 8], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ vvt_timing_rpm = array, U16, 646, [ 8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ vvt_timing1 = array, S16, 662, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_timing2 = array, S16, 790, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_tth1 = scalar, U08, 918, "", 1, 0, 0, 24, 0
+ vvt_tth2 = scalar, U08, 919, "", 1, 0, 0, 24, 0
+ vvt_tth3 = scalar, U08, 920, "", 1, 0, 0, 24, 0
+ vvt_tth4 = scalar, U08, 921, "", 1, 0, 0, 24, 0
+
+ vvt_coldpos1 = scalar, S16, 922, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_coldpos2 = scalar, S16, 924, "degrees", 0.10000,0.00000,0, 720.00,1;
+
+ tclu_opt_vss = bits, U08, 926, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ tclu_opt_gear = bits, U08, 926, [2:2], "Off", "On"
+ tclu_brakepin = bits, U08, 927, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tclu_enablepin = bits, U08, 928, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ tclu_outpin = bits, U08, 929, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ tclu_gearmin = scalar, U08, 930, "", 1, 0, 0, 8, 0
+ tclu_delay = scalar, U08, 931, "s", 0.1, 0, 0, 10, 1
+ tclu_vssmin = scalar, U16, 932, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ tclu_tpsmin = scalar, S16, 934, "%", 0.1, 0, 0, 100, 1
+ tclu_tpsmax = scalar, S16, 936, "%", 0.1, 0, 0, 100, 1
+ tclu_mapmin = scalar, S16, 938, "%", 0.1, 0, 0, {loadhigh}, 1
+ tclu_mapmax = scalar, S16, 940, "%", 0.1, 0, 0, {loadhigh}, 1
+ vvt_opt4_decode = bits, U08, 942, [0:2], "Standard", "BMW V10", "BMW S54", "Hemi VVT", "Ford Coyote", "Ford Duratec 4 cyl", "INVALID", "INVALID"
+ vvt_opt5_add1 = bits, U08, 943, [0:1], "Off", "Cam 1", "Cam 2", "INVALID"
+ vvt_opt5_add2 = bits, U08, 943, [2:2], "Commanded", "Actual"
+ vvt_opt5_err = bits, U08, 943, [3:3], "Yes","No"
+ vvt_opt5_vvt1 = bits, U08, 943, [4:4], "Intake","Exhaust"
+ vvt_opt5_vvt2 = bits, U08, 943, [5:5], "Intake","Exhaust"
+ vvt_opt5_vvt3 = bits, U08, 943, [6:6], "Intake","Exhaust"
+ vvt_opt5_vvt4 = bits, U08, 943, [7:7], "Intake","Exhaust"
+ vvt_hold_duty_exh = scalar, U08, 944, "%", 0.392, 0, 0, 100, 1
+ vvt_ctl_Kp_exh = scalar, U08, 945, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki_exh = scalar, U08, 946, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd_exh = scalar, U08, 947, "%", 1, 0.00000, 0, 200, 0
+ vvt_cam1tth1 = scalar, U08, 948, "", 1, 0.00000, 0, 255, 0
+ vvt_cam1tth2 = scalar, U08, 949, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth1 = scalar, U08, 950, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth2 = scalar, U08, 951, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth1 = scalar, U08, 952, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth2 = scalar, U08, 953, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth1 = scalar, U08, 954, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth2 = scalar, U08, 955, "", 1, 0.00000, 0, 255, 0
+ vvt_opt6_freq = bits, U08, 956, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ vvt_opt7_yaxis = bits, U08, 957, [0:2], "Fuelload", "MAP", "% baro", "TPS", "MAFload", "INVALID", "INVALID", "INVALID"
+ als_rifuelcut = array, U08, 958, [6x6], "%", 1, 0, 0, 100, 0
+ als_rirpms = array, U16, 994, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_ritpss = array, U16, 1006, [6], "%", 0.1, 0, 0, 100, 0
+ als_pwm_opt_freq = bits, U08, 1018, [1:4], "On-Off", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ als_pwm_opt2 = bits, U08, 1019, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+#if CELSIUS
+ vvt_minclt = scalar, S16, 1020, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ vvt_minclt = scalar, S16, 1020, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_minduty1 = scalar, U08, 1022, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_maxduty1 = scalar, U08, 1023, "%", 0.392, 0.00000, 0, 100, 1
+
+page = 15 ; 25
+ mafv = array, U16, 0, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ maff = array, U16, 0, [64], "Hz", { (maf_freq1 - maf_freq0) / 5000 }, { maf_freq0 * 5000 / (maf_freq1 - maf_freq0) }, {maf_freq0}, { maf_freq1 }, 0
+ mafflow = array, U16, 128, [64], "g/sec", {0.01 * (maf_range + 1)}, -8192, {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 2
+ alphaMAPtable = array , S16, 256, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes)
+ amap_tps = array , S16, 328, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ amap_rpm = array , U16, 340, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ tpswot_tps = array , S16, 352, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 364, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 376, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 376, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 388, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+;next is 400
+ boost_ctl_cl_pwm_targs1 = array, U08, 400, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_targs2 = array, U08, 464, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 528, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_rpms2 = array, U16, 544, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 560, [8], "%", 0.10000, 0, 0, 600, 0
+ boost_ctl_cl_pwm_targboosts2 = array, S16, 576, [8], "%", 0.10000, 0, 0, 600, 0
+ blendx1 = array, S16, 592, [9], "X", 1, 0, -32767, 32767, 0
+ blendx2 = array, S16, 610, [9], "X", 1, 0, -32767, 32767, 0
+ blendx3 = array, S16, 628, [9], "X", 1, 0, -32767, 32767, 0
+ blendx4 = array, S16, 646, [9], "X", 1, 0, -32767, 32767, 0
+ blendx5 = array, S16, 664, [9], "X", 1, 0, -32767, 32767, 0
+ blendx6 = array, S16, 682, [9], "X", 1, 0, -32767, 32767, 0
+ blendx7 = array, S16, 700, [9], "X", 1, 0, -32767, 32767, 0
+ blendx8 = array, S16, 718, [9], "Flex%", 0.1, 0, 0, 100, 1
+ blendy1 = array, U08, 736, [9], "VE2", 1, 0, 0, 100, 0
+ blendy2 = array, U08, 745, [9], "Spk2", 1, 0, 0, 100, 0
+ blendy3 = array, U08, 754, [9], "VE3/4", 1, 0, 0, 100, 0
+ blendy4 = array, U08, 763, [9], "Spk3/4", 1, 0, 0, 100, 0
+ blendy5 = array, U08, 772, [9], "AFR2", 1, 0, 0, 100, 0
+ blendy6 = array, U08, 781, [9], "Boost2", 1, 0, 0, 100, 0
+ blendy7 = array, U08, 790, [9], "Crank%2", 1, 0, 0, 100, 0
+ blendy8 = array, U08, 799, [9], "Blend%", 1, 0, 0, 100, 0
+ fpd_duty= array, U08, 808, [6x6], "%", 0.392, 0.00000, 0, 100, 1
+ fpd_load= array, S16, 844, [6], "%", 0.10000, 0.00000, 0.0,{loadhigh}, 1
+ fpd_rpm = array, U16, 856, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+#if CELSIUS
+ fp_temps = array, S16, 868, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ fp_temps = array, S16, 868, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ fp_temp_adj = array, S16, 888, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ fp_presss = array, S16, 908, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ fp_press_adj = array, S16, 928, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ hpte_times = array, S16, 948, [ 6], "s", 0.10000, 0.000, 0.00, 25.5, 1
+ hpte_afrs = array, U08, 960, [ 6], "AFR", 0.10000, 0.000, 0.00, 5.0, 1
+ oil_rpm = array, U16, 966, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ oil_press_min = array, S16, 978, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ oil_press_max = array, S16, 990, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ alt_dutyin = array, U16, 1002, [7], "%", 1, 0, 0, 100, 0
+ alt_dutyout = array, U08, 1016, [7], "%", 1, 0, 0, 100, 0
+
+page = 16 ; 26 ; this is a RAM only page with no burnable flash
+; Quickform realtime data. Lower part of data is offset into outpc. Upper 3 bits are size. 0 = nothing, 1 = 1 byte, 2 = 2 bytes, 3 = 4 bytes
+ qfrtfielddata= array, U16, 0, [ 256], "", 1.0000, 0.00000, 0.00, 65535, 0, noMsqSave
+ ltt_table1 = array , S08, 512, [16x16], "%", 0.10000, 0.00000, -12.7, 12.7, 1, noMsqSave ; * (512 bytes)
+ ltt_rpms = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0, noMsqSave ; * ( 24 bytes)
+ ltt_loads = array , S16, 800, [ 16], "%", 0.10000, 0.00000, 0.00, {loadhigh}, 1, noMsqSave ; * ( 24 bytes)
+
+ portusage = array, U08, 832, [ 148], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_a = array, U08, 832, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_b = array, U08, 840, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_e = array, U08, 848, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_h = array, U08, 856, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_j = array, U08, 864, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_k = array, U08, 872, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_m = array, U08, 880, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_p = array, U08, 888, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_t = array, U08, 896, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0h=array, U08, 904, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0l=array, U08, 912, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canin=array, U08, 920, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canout=array,U08, 928, [16], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canadc=array,U08, 944, [24], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canpwm=array,U08, 968, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_pwmscl=array,U08, 976, [ 4], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_loop =array, U08, 980, [ 3], "", 1, 0, 0, 255, 0, noMsqSave
+
+page = 17 ; 27
+ ego_auth_table = array, U08, 0, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1
+ ego_auth_rpms = array, U16, 144, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ ego_auth_loads = array, S16, 168, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ vsslaunch_vss = array, U16, 192, [ 10], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ vsslaunch_rpm = array, U16, 212, [ 10], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ vsslaunch_retard = array, U16, 232, [ 10], "deg", 0.10000, 0.00000, 0.00, 50, 1
+ ego_delay_table = array, U08, 252, [12x12], "ms", 10.00000, 0, 0, 2550, 0
+ ego_delay_rpms = array, U16, 396, [ 12], "rpm", 1.00000, 0, 0, {rpmhigh}, 0
+ ego_delay_loads = array, S16, 420, [ 12], "%", 0.10000, 0, 0, {loadhigh}, 0
+ ego_sensor_delay = scalar,U08, 444, "ms", 2, 0, 0, 510, 0
+
+; 2 Generic PID channels
+ generic_pid_flags_a_on = bits,U08, 445, [0:0], "Off", "On"
+ generic_pid_flags_a_type = bits, U08, 445, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_a_direction = bits, U08, 445, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_a_output_type = bits, U08, 445, [4:4], "PWM", "Stepper"
+ generic_pid_flags_a_lookup_type = bits, U08, 445, [5:5], "Table", "Curve"
+ generic_pid_flags_b_on = bits,U08, 446, [0:0], "Off", "On"
+ generic_pid_flags_b_type = bits, U08, 446, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_b_direction = bits, U08, 446, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_b_output_type = bits,U08, 446, [4:4], "PWM", "Stepper"
+ generic_pid_flags_b_lookup_type = bits, U08, 446, [5:5], "Table", "Curve"
+
+ generic_pid_pwm_opts_freq_a = bits, U08, 447, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_a = bits, U08, 447, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ generic_pid_pwm_opts_freq_b = bits, U08, 448, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_b = bits, U08, 448, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ generic_pid_pwm_outs_a = bits, U08, 449, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ generic_pid_pwm_outs_b = bits, U08, 450, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+ generic_pid_load_offset_a = scalar, U16, 451, "", 1, 0, 0, 65535, 0
+ generic_pid_load_offset_b = scalar, U16, 453, "", 1, 0, 0, 65535, 0
+ generic_pid_load_size_a = scalar, U08, 455, "", 1, 0, 0, 255, 0
+ generic_pid_load_size_b = scalar, U08, 456, "", 1, 0, 0, 255, 0
+
+; These are positioned here so that TS reads them in the correct order and the autoscaling on the next block function
+ generic_pid_PV_offset_a = scalar, U16, 469, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_offset_b = scalar, U16, 471, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_size_a = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ generic_pid_PV_size_b = scalar, U08, 474, "", 1, 0, 0, 255, 0
+
+ generic_pid_upper_inputlim_a = scalar, S16, 457, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_upper_inputlim_b = scalar, S16, 459, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_lower_inputlim_a = scalar, S16, 461, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_lower_inputlim_b = scalar, S16, 463, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_output_upperlim_a = scalar, U08, 465, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_upperlim_b = scalar, U08, 466, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_a = scalar, U08, 467, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_b = scalar, U08, 468, "%", 0.392, 0.00000, 0, 100, 1
+ ;
+ ; not a gap!
+ ;
+ generic_pid_rpms_a = array, S16, 475, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_a = array, S16, 491, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_a) } , { getChannelTranslateByOffset(generic_pid_load_offset_a) }, { getChannelMinByOffset(generic_pid_load_offset_a) }, { getChannelMaxByOffset(generic_pid_load_offset_a) }, { getChannelDigitsByOffset(generic_pid_load_offset_a) }
+ generic_pid_rpms_b = array, S16, 507, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_b = array, S16, 523, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_b) } , { getChannelTranslateByOffset(generic_pid_load_offset_b) }, { getChannelMinByOffset(generic_pid_load_offset_b) }, { getChannelMaxByOffset(generic_pid_load_offset_b) }, { getChannelDigitsByOffset(generic_pid_load_offset_b) }
+
+ generic_pid_targets_a = array, S16, 539, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_targets_b = array, S16, 667, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+
+ generic_pid_control_interval_a = scalar, U08, 795, "ms", 1, 0, 10, 255, 0
+ generic_pid_control_interval_b = scalar, U08, 796, "ms", 1, 0, 10, 255, 0
+
+ generic_pid_P_a = scalar, U08, 797, "%", 1, 0, 0, 255, 0
+ generic_pid_P_b = scalar, U08, 798, "%", 1, 0, 0, 255, 0
+ generic_pid_I_a = scalar, U08, 799, "%", 1, 0, 0, 255, 0
+ generic_pid_I_b = scalar, U08, 800, "%", 1, 0, 0, 255, 0
+ generic_pid_D_a = scalar, U08, 801, "%", 1, 0, 0, 255, 0
+ generic_pid_D_b = scalar, U08, 802, "%", 1, 0, 0, 255, 0
+;gap
+ tcslipx = array, U16, 804, [9], "Knob%", 0.0978, 0, 0, 100, 0
+ tcslipy = array, U08, 822, [9], "Slip threshold %", 1, 0, 0, 100, 0
+;gap
+; 4 outmsg
+ outmsg1_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+page = 18 ; 28
+ dwell_table_values = array, U08, 262, [8x8], "%", 0.10000, 0.00000, 0.5, 25.5, 1
+ dwell_table_rpms = array, U16, 326, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ dwell_table_loads = array, S16, 342, [ 8], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ can_rcv_id1 = scalar, U16, 358, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id2 = scalar, U16, 360, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id3 = scalar, U16, 362, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id4 = scalar, U16, 364, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id5 = scalar, U16, 366, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id6 = scalar, U16, 368, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id7 = scalar, U16, 370, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id8 = scalar, U16, 372, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id9 = scalar, U16, 374, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id10= scalar, U16, 376, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id11= scalar, U16, 378, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id12= scalar, U16, 380, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id13= scalar, U16, 382, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id14= scalar, U16, 384, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id15= scalar, U16, 386, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id16= scalar, U16, 388, "", 1, 0.00000, 0, 2047, 0
+
+ can_rcv_var1 = bits, U08, 390, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var2 = bits, U08, 391, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var3 = bits, U08, 392, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var4 = bits, U08, 393, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var5 = bits, U08, 394, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var6 = bits, U08, 395, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var7 = bits, U08, 396, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var8 = bits, U08, 397, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var9 = bits, U08, 398, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var10 = bits, U08, 399, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var11 = bits, U08, 400, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var12 = bits, U08, 401, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var13 = bits, U08, 402, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var14 = bits, U08, 403, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var15 = bits, U08, 404, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var16 = bits, U08, 405, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ can_rcv_off1 = scalar, U08, 406, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off2 = scalar, U08, 407, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off3 = scalar, U08, 408, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off4 = scalar, U08, 409, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off5 = scalar, U08, 410, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off6 = scalar, U08, 411, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off7 = scalar, U08, 412, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off8 = scalar, U08, 413, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off9 = scalar, U08, 414, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off10 = scalar, U08, 415, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off11 = scalar, U08, 416, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off12 = scalar, U08, 417, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off13 = scalar, U08, 418, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off14 = scalar, U08, 419, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off15 = scalar, U08, 420, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off16 = scalar, U08, 421, "", 1, 0.00000, 0, 7, 0
+
+ can_rcv_size1 = bits, U08, 422, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size2 = bits, U08, 423, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size3 = bits, U08, 424, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size4 = bits, U08, 425, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size5 = bits, U08, 426, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size6 = bits, U08, 427, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size7 = bits, U08, 428, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size8 = bits, U08, 429, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size9 = bits, U08, 430, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size10 = bits, U08, 431, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size11 = bits, U08, 432, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size12 = bits, U08, 433, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size13 = bits, U08, 434, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size14 = bits, U08, 435, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size15 = bits, U08, 436, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size16 = bits, U08, 437, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ can_rcv_mult1 = scalar, S16, 438, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult2 = scalar, S16, 440, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult3 = scalar, S16, 442, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult4 = scalar, S16, 444, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult5 = scalar, S16, 446, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult6 = scalar, S16, 448, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult7 = scalar, S16, 450, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult8 = scalar, S16, 452, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult9 = scalar, S16, 454, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult10 = scalar, S16, 456, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult11 = scalar, S16, 458, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult12 = scalar, S16, 460, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult13 = scalar, S16, 462, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult14 = scalar, S16, 464, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult15 = scalar, S16, 466, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult16 = scalar, S16, 468, "", 1, 0.00000, -32767, 32767,0
+
+ can_rcv_div1 = scalar, U16, 470, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div2 = scalar, U16, 472, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div3 = scalar, U16, 474, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div4 = scalar, U16, 476, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div5 = scalar, U16, 478, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div6 = scalar, U16, 480, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div7 = scalar, U16, 482, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div8 = scalar, U16, 484, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div9 = scalar, U16, 486, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div10 = scalar, U16, 488, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div11 = scalar, U16, 490, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div12 = scalar, U16, 492, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div13 = scalar, U16, 494, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div14 = scalar, U16, 496, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div15 = scalar, U16, 498, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div16 = scalar, U16, 500, "", 1, 0.00000, 1, 32767,0
+
+ can_rcv_add1 = scalar, S16, 502, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add2 = scalar, S16, 504, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add3 = scalar, S16, 506, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add4 = scalar, S16, 508, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add5 = scalar, S16, 510, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add6 = scalar, S16, 512, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add7 = scalar, S16, 514, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add8 = scalar, S16, 516, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add9 = scalar, S16, 518, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add10 = scalar, S16, 520, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add11 = scalar, S16, 522, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add12 = scalar, S16, 524, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add13 = scalar, S16, 526, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add14 = scalar, S16, 528, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add15 = scalar, S16, 530, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add16 = scalar, S16, 532, "", 1, 0.00000, -32767, 32767,0
+ can_bcast_user_id = scalar, U16, 534, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 536, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 537, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 538, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 539, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 540, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 541, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 542, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 543, "", 1, 0, 0, 255, 0
+
+ iobox_opta1 = bits, U08, 544, [0:0], "Off", "On"
+ iobox_opta1adv = bits, U08, 544, [1:1], "Automatic", "Advanced"
+ iobox_opta1canin = bits, U08, 544, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta1canout= bits, U08, 544, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta1canadc= bits, U08, 544, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta2 = bits, U08, 545, [0:0], "Off", "On"
+ iobox_opta2adv = bits, U08, 545, [1:1], "Automatic", "Advanced"
+ iobox_opta2canin = bits, U08, 545, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta2canout= bits, U08, 545, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta2canadc= bits, U08, 545, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta3 = bits, U08, 546, [0:0], "Off", "On"
+ iobox_opta3adv = bits, U08, 546, [1:1], "Automatic", "Advanced"
+ iobox_opta3canin = bits, U08, 546, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta3canout= bits, U08, 546, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta3canadc= bits, U08, 546, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta4 = bits, U08, 547, [0:0], "Off", "INVALID"
+ iobox_opta4adv = bits, U08, 547, [1:1], "Automatic", "Advanced"
+ iobox_opta4canin = bits, U08, 547, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta4canout= bits, U08, 547, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta4canadc= bits, U08, 547, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+
+ iobox_optb1tachrate= bits, U08, 548, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb1inrate = bits, U08, 548, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1outrate = bits, U08, 548, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1vss = bits, U08, 548, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb2tachrate= bits, U08, 549, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb2inrate = bits, U08, 549, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2outrate = bits, U08, 549, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2vss = bits, U08, 549, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb3tachrate= bits, U08, 550, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb3inrate = bits, U08, 550, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3outrate = bits, U08, 550, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3vss = bits, U08, 550, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_optb4tachrate= bits, U08, 551, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb4inrate = bits, U08, 551, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4outrate = bits, U08, 551, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4vss = bits, U08, 551, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_id1 = scalar, U16, 552, "", 1, 0.00000, 0, 2047, 0
+ iobox_id2 = scalar, U16, 554, "", 1, 0.00000, 0, 2047, 0
+ iobox_id3 = scalar, U16, 556, "", 1, 0.00000, 0, 2047, 0
+ iobox_id4 = scalar, U16, 558, "", 1, 0.00000, 0, 2047, 0
+ pitlim_opt_on = bits, U08, 560, [0:0], "Off", "On"
+ pitlim_opt_mode = bits, U08, 560, [1:1], "Fixed", "Holding"
+ pitlim_opt_retard=bits, U08, 560, [2:2], "Off", "On"
+ pitlim_opt_spkcut=bits, U08, 560, [3:3], "Off", "On"
+ pitlim_opt_fuelcut=bits,U08, 560, [4:4], "Off", "On"
+ pitlim_opt_fuelprog=bits,U08, 560, [5:5], "Off", "On"
+ pitlim_opt_vssrpm= bits,U08, 560, [6:6], "VSS", "RPM"
+ pitlim_enin = bits, U08, 561, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pitlim_speed = scalar, U16, 562, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ pitlim_retardmax= scalar, S16, 564, "deg", 0.1, 0.00000, 0, 30, 1
+ pitlim_sensitivity=scalar, U16, 566, "", 0.1, 0.00000, 0, 20, 0
+ pitlim_speed_range=scalar, U16, 568, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,20, 1
+ pitlim_rpm_range=scalar, U16, 570, "RPM", 1.00000, 0.00000, 200, 1000, 0
+;accel wizard mini tables
+ taeBins = array , U08, 572, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins = array , U08, 576, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates = array , S16, 580, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 588, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+;accel wizard #2
+ taeBins2 = array , U08, 596, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins2 = array , U08, 600, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates2 = array , S16, 604, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates2 = array , S16, 612, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+ accel_mapdots = array, S16, 620, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots = array, S16, 636, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts = array, S16, 652, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts = array, S16, 668, [8], "%", 0.1, 0, -500, 500, 1
+ accel_mapdots2 = array, S16, 684, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots2 = array, S16, 700, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts2 = array, S16, 716, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts2 = array, S16, 732, [8], "%", 0.1, 0, -500, 500, 1
+ dashbcast_id1 = scalar, U16, 748, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 750, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 750, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 750, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 751
+
+;768-1023 reserved
+
+ page = 19 ; 29
+
+; dome settings
+
+;progressive nitrous tables
+ n2o1_time = array, U16, 346, [10], "s", 0.001, 0, 0, 15, 2
+ n2o1_rpm = array, U16, 366, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o1_vss = array, U16, 386, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o1_duty = array, U08, 406, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o1_pw = array, S16, 416, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o1_pw = array, S16, 416, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o1_retard = array, U16, 436, [10], "deg", 0.1, 0, 0, 30, 1
+ n2o2_time = array, U16, 456, [10], "s", 0.001, 0, 0, 15, 2
+ n2o2_rpm = array, U16, 476, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o2_vss = array, U16, 496, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o2_duty = array, U08, 516, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o2_pw = array, S16, 526, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o2_pw = array, S16, 526, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o2_retard = array, U16, 546, [10], "deg", 0.1, 0, 0, 30, 1
+ alternator_fvolts = array , U16, 566, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_freqv = array , U08, 578, [ 6], "", 1, 0.00000,0, 255, 0 ; * ( 6 bytes)
+#if CELSIUS
+ alternator_temp = array, S16, 584, [ 6], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ alternator_temp = array, S16, 584, [ 6], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ alternator_targvolts = array , U08, 596, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dvolts = array , U16, 602, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dutyv = array , U08, 614, [ 6], "", 1, 0.00000,0, 255, 1 ; * ( 6 bytes)
+; next is 620
+ ; watch out for dome settings
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = hardware_spk
+ requiresPowerCycle = hardware_cam
+ requiresPowerCycle = hardware_fuel
+ requiresPowerCycle = hardware_injij
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+; requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = AfrAlgorithm
+ requiresPowerCycle = opt142_rtc
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knk_option_an
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gmtfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_campol
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = map2port
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = mapport
+ requiresPowerCycle = mapport_t
+ requiresPowerCycle = mapport_f
+ requiresPowerCycle = knkport_an
+
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tsw_pin_f
+ requiresPowerCycle = tsw_pin_s
+ requiresPowerCycle = tsw_pin_rf
+ requiresPowerCycle = tsw_pin_ob
+ requiresPowerCycle = tsw_pin_afr
+ requiresPowerCycle = tsw_pin_stoich
+ requiresPowerCycle = f5_0_tsf
+ requiresPowerCycle = f5_0_tsf_opt
+ requiresPowerCycle = f5_0_tss
+ requiresPowerCycle = f5_0_tss_opt
+
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = tacho_optvar
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = launch_opt_vss
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = pwmidle_freq_scale
+ requiresPowerCycle = boost_ctl_pins_pwm
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = boost_ctl_pwm_scale
+ requiresPowerCycle = boost_ctl_pwm
+ requiresPowerCycle = boost_ctl_settings_invert_new
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = log_style_led
+ requiresPowerCycle = log_style2_but
+ requiresPowerCycle = log_style_on2
+ requiresPowerCycle = log_style3_adc
+ requiresPowerCycle = sequential
+ requiresPowerCycle = boost_feats_tsw
+ requiresPowerCycle = launch_3step_in
+ requiresPowerCycle = maxafr_opt1_led
+ requiresPowerCycle = vss1_pos
+ requiresPowerCycle = vss2_pos
+ requiresPowerCycle = launch_var_on
+ requiresPowerCycle = reluctorteeth1
+ requiresPowerCycle = reluctorteeth2
+ requiresPowerCycle = vss_opt1
+ requiresPowerCycle = vss_opt2
+ requiresPowerCycle = vss1_an
+ requiresPowerCycle = vss2_an
+ requiresPowerCycle = vss1_can_scale
+ requiresPowerCycle = vss2_can_scale
+ requiresPowerCycle = ss_opt1
+ requiresPowerCycle = ss_opt2
+ requiresPowerCycle = wheeldia1
+ requiresPowerCycle = wheeldia2
+ requiresPowerCycle = fdratio1
+ requiresPowerCycle = vss1_can_id
+ requiresPowerCycle = vss1_can_offset
+ requiresPowerCycle = vss2_can_offset
+ requiresPowerCycle = vss3_can_offset
+ requiresPowerCycle = vss4_can_offset
+ requiresPowerCycle = vss_opt0_1
+ requiresPowerCycle = vss_opt0_2
+ requiresPowerCycle = vss_opt0_3
+ requiresPowerCycle = vss_opt0_4
+ requiresPowerCycle = ss_opt1_spd
+ requiresPowerCycle = ss1_pwmseq
+ requiresPowerCycle = ss2_pwmseq
+ requiresPowerCycle = gear_can_offset
+ requiresPowerCycle = n2o1n_pins
+ requiresPowerCycle = n2o1f_pins
+ requiresPowerCycle = n2o2n_pins
+ requiresPowerCycle = n2o2f_pins
+ requiresPowerCycle = water_freq_on
+ requiresPowerCycle = water_pins_pump
+ requiresPowerCycle = water_pins_valve
+ requiresPowerCycle = water_pins_in_shut
+ requiresPowerCycle = egt_num
+ requiresPowerCycle = accXport
+ requiresPowerCycle = accYport
+ requiresPowerCycle = accZport
+ requiresPowerCycle = egt1port
+ requiresPowerCycle = egt2port
+ requiresPowerCycle = egt3port
+ requiresPowerCycle = egt4port
+ requiresPowerCycle = egt5port
+ requiresPowerCycle = egt6port
+ requiresPowerCycle = egt7port
+ requiresPowerCycle = egt8port
+ requiresPowerCycle = egt9port
+ requiresPowerCycle = egt10port
+ requiresPowerCycle = egt11port
+ requiresPowerCycle = egt12port
+ requiresPowerCycle = egt13port
+ requiresPowerCycle = egt14port
+ requiresPowerCycle = egt15port
+ requiresPowerCycle = egt16port
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = MAFOption_t
+ requiresPowerCycle = MAFOption_f
+ requiresPowerCycle = vssout_opt
+ requiresPowerCycle = vssout_optunits
+ requiresPowerCycle = gear_method
+ requiresPowerCycle = gear_port_an
+ requiresPowerCycle = ac_idleup_io_in
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = fanctl_settings_on
+ requiresPowerCycle = fanctl_settings_pin
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = boost_ctl_settings_on2
+ requiresPowerCycle = boost_ctl_settings_cl2
+ requiresPowerCycle = boost_ctl_pins_pwm2
+ requiresPowerCycle = boost_ctl_pins2
+ requiresPowerCycle = boost_ctl_sensor2
+ requiresPowerCycle = egoport1
+ requiresPowerCycle = egoport2
+ requiresPowerCycle = egoport3
+ requiresPowerCycle = egoport4
+ requiresPowerCycle = egoport5
+ requiresPowerCycle = egoport6
+ requiresPowerCycle = egoport7
+ requiresPowerCycle = egoport8
+ requiresPowerCycle = egoport9
+ requiresPowerCycle = egoport10
+ requiresPowerCycle = egoport11
+ requiresPowerCycle = egoport12
+ requiresPowerCycle = egoport13
+ requiresPowerCycle = egoport14
+ requiresPowerCycle = egoport15
+ requiresPowerCycle = egoport16
+ requiresPowerCycle = tc_opt_on
+ requiresPowerCycle = tc_led_out
+ requiresPowerCycle = tc_opt_method
+ requiresPowerCycle = tc_enin
+ requiresPowerCycle = fueltemp1
+ requiresPowerCycle = sensor01_source
+ requiresPowerCycle = sensor02_source
+ requiresPowerCycle = sensor03_source
+ requiresPowerCycle = sensor04_source
+ requiresPowerCycle = sensor05_source
+ requiresPowerCycle = sensor06_source
+ requiresPowerCycle = sensor07_source
+ requiresPowerCycle = sensor08_source
+ requiresPowerCycle = sensor09_source
+ requiresPowerCycle = sensor10_source
+ requiresPowerCycle = sensor11_source
+ requiresPowerCycle = sensor12_source
+ requiresPowerCycle = sensor13_source
+ requiresPowerCycle = sensor14_source
+ requiresPowerCycle = sensor15_source
+ requiresPowerCycle = sensor16_source
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_gear
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = shift_cut_fuel
+ requiresPowerCycle = pwm_opt_on_a
+ requiresPowerCycle = pwm_opt_on_b
+ requiresPowerCycle = pwm_opt_on_c
+ requiresPowerCycle = pwm_opt_on_d
+ requiresPowerCycle = pwm_opt_on_e
+ requiresPowerCycle = pwm_opt_on_f
+ requiresPowerCycle = pwm_opt2_a
+ requiresPowerCycle = pwm_opt2_b
+ requiresPowerCycle = pwm_opt2_c
+ requiresPowerCycle = pwm_opt2_d
+ requiresPowerCycle = pwm_opt2_e
+ requiresPowerCycle = pwm_opt2_f
+ requiresPowerCycle = dualfuel_sw_on
+ requiresPowerCycle = dualfuel_pin
+ requiresPowerCycle = dualfuel_opt_mode
+ requiresPowerCycle = dualfuel_opt_out
+ requiresPowerCycle = dualfuel_temp_sens
+ requiresPowerCycle = dualfuel_press_sens
+
+ requiresPowerCycle = dualfuel_sw_fuel
+ requiresPowerCycle = dualfuel_sw_spk
+ requiresPowerCycle = dualfuel_sw_afr
+ requiresPowerCycle = dualfuel_sw_rf
+ requiresPowerCycle = dualfuel_sw_stoich
+ requiresPowerCycle = dualfuel_sw_wue
+ requiresPowerCycle = dualfuel_sw_ase
+ requiresPowerCycle = dualfuel_sw2_prime
+ requiresPowerCycle = dualfuel_sw2_crank
+ requiresPowerCycle = dualfuel_sw2_injp
+ requiresPowerCycle = dualfuel_sw2_smpw
+ requiresPowerCycle = dualfuel_sw2_ob
+ requiresPowerCycle = dualfuel_sw2_boosw
+ requiresPowerCycle = dualfuel_sw2_ae
+
+ requiresPowerCycle = als_opt_pwmout
+ requiresPowerCycle = als_in_pin
+ requiresPowerCycle = als_out_pin
+ requiresPowerCycle = als_pwm_opt_freq
+ requiresPowerCycle = als_pwm_opt2
+ requiresPowerCycle = vvt_opt1_on
+ requiresPowerCycle = vvt_out1
+ requiresPowerCycle = vvt_out2
+ requiresPowerCycle = vvt_out3
+ requiresPowerCycle = vvt_out4
+ requiresPowerCycle = vvt_opt2_cam1pol
+ requiresPowerCycle = vvt_opt2_cam2pol
+ requiresPowerCycle = vvt_opt2_cam3pol
+ requiresPowerCycle = vvt_opt2_cam4pol
+ requiresPowerCycle = vvt_opt3_cam2
+ requiresPowerCycle = vvt_opt3_cam3
+ requiresPowerCycle = vvt_opt3_cam4
+ requiresPowerCycle = tclu_brakepin
+ requiresPowerCycle = tclu_enablepin
+ requiresPowerCycle = tclu_outpin
+ requiresPowerCycle = vvt_opt4_decode
+ requiresPowerCycle = vvt_opt6_freq
+ requiresPowerCycle = vvt_softout1
+ requiresPowerCycle = vvt_softout2
+ requiresPowerCycle = vvt_softout3
+ requiresPowerCycle = vvt_softout4
+ requiresPowerCycle = knk_pin_out
+ requiresPowerCycle = ltt_opt_on
+ requiresPowerCycle = ltt_but_in
+ requiresPowerCycle = ltt_led_out
+ requiresPowerCycle = timedout1_in
+ requiresPowerCycle = timedout1_out
+ requiresPowerCycle = tstop_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = map_phase_thresh
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = staged_extended_opts_pw1off
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_second_param
+ requiresPowerCycle = staged_transition_on
+ requiresPowerCycle = staged_pw1_0
+ requiresPowerCycle = staged_out1
+ requiresPowerCycle = fp_opt_mode
+ requiresPowerCycle = fp_opt_inv
+ requiresPowerCycle = fp_out1
+ requiresPowerCycle = alternator_opt_mode
+ requiresPowerCycle = alternator_controlout
+ requiresPowerCycle = alternator_control_inv
+ requiresPowerCycle = alternator_freq
+ requiresPowerCycle = alternator_lampout
+ requiresPowerCycle = alternator_freq_monin
+ requiresPowerCycle = alternator_freq_moninv
+ requiresPowerCycle = alternator_freq_currin
+ requiresPowerCycle = alternator_freq_currinv
+ requiresPowerCycle = oilpress_in
+ requiresPowerCycle = oilpress_out
+ requiresPowerCycle = cel_port
+ requiresPowerCycle = generic_pid_flags_a_on
+ requiresPowerCycle = generic_pid_flags_b_on
+ requiresPowerCycle = generic_pid_flags_a_direction
+ requiresPowerCycle = generic_pid_flags_b_direction
+ requiresPowerCycle = generic_pid_pwm_opts_freq_a
+ requiresPowerCycle = generic_pid_pwm_opts_freq_b
+ requiresPowerCycle = generic_pid_pwm_outs_a
+ requiresPowerCycle = generic_pid_pwm_outs_b
+ requiresPowerCycle = can_rcv_opt_on
+ requiresPowerCycle = iobox_opta1
+ requiresPowerCycle = iobox_opta2
+ requiresPowerCycle = iobox_opta3
+ requiresPowerCycle = iobox_opta4
+ requiresPowerCycle = iobox_optb1vss
+ requiresPowerCycle = iobox_optb2vss
+ requiresPowerCycle = iobox_optb3vss
+ requiresPowerCycle = iobox_optb4vss
+ requiresPowerCycle = pitlim_opt_on
+ requiresPowerCycle = pitlim_enin
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = wue_lpg, "No"
+ defaultValue = vehigh, 255
+ defaultValue = clt_exp, 0
+ defaultValue = sensor01Alias, "Sensor 01"
+ defaultValue = sensor02Alias, "Sensor 02"
+ defaultValue = sensor03Alias, "Sensor 03"
+ defaultValue = sensor04Alias, "Sensor 04"
+ defaultValue = sensor05Alias, "Sensor 05"
+ defaultValue = sensor06Alias, "Sensor 06"
+ defaultValue = sensor07Alias, "Sensor 07"
+ defaultValue = sensor08Alias, "Sensor 08"
+ defaultValue = sensor09Alias, "Sensor 09"
+ defaultValue = sensor10Alias, "Sensor 10"
+ defaultValue = sensor11Alias, "Sensor 11"
+ defaultValue = sensor12Alias, "Sensor 12"
+ defaultValue = sensor13Alias, "Sensor 13"
+ defaultValue = sensor14Alias, "Sensor 14"
+ defaultValue = sensor15Alias, "Sensor 15"
+ defaultValue = sensor16Alias, "Sensor 16"
+ defaultValue = prefSpeedUnits, 0
+ defaultValue = prefLengthUnits, 0
+ defaultValue = scatterRuntimeEnabled, 1
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ tempTable = ""
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valve may work in the opposite direction."
+ pwmidle_freq_pin = "Output for idle valve."
+ pwmidle_freq_pin3 = "Second output for idle valve in 3-wire mode."
+ pwmidle_freq_scale = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz."
+ pwmidle_freq_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ feature3_tps = "Automatically recalibrate TPS if negative TPS values are seen. This can be useful if the zero position on your TPS varies.\n(The temporary recalibration is not saved.)"
+ baud = "This should be set to 115200."
+ baudhigh = "Optional faster baudrate for SDcard datalog readback.\nUseful options are 115200, 230400, 460800.\nUse the quickest that works reliably on your hardware. A direct USB cable is likely to work best."
+; These tips for on/off outputs do not show up in 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ hardware_injij = "Sets the outputs for the 9th and 10th injectors I/J.\nMainboard = use the two batch fire channels.\nH3+H4 = use the spare pins on the MS3X card.\n\nIn either case ensure ALL injector drivers are identical design."
+ firea = "Firing order is used for trim and per-cylinder corrections so the adjustment is applied to the correct cylinder number. Injectors and coils must still be wired in firing order sequence. i.e. InjA = cyl1, InjB = next cylinder to fire"
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+
+ hardware_fuel = "Selects whether injectors are wired to the MS3X sequential outputs or the two batch fire outputs on the lower connector."
+ sequential = "Off - disables sequential fuel and runs batch fire. Semi-sequential - fires injectors in pairs spread over a crank rotation (Requires a crank wheel.) Fully-Sequential - fires each injector in turn spread over a full engine cycle (requires a cam sensor on 4-stroke for phase information.)"
+ sequential_angle_spec = "Whether to time the injection by the start, middle or end of the pulse. End is most common and typically arranged so that injection has finished just before the inlet valve opens."
+ sequential_trim_on_off = "Whether to enable per-cylinder trim tables. This allows each cylinder to be tuned individually if you have per-cylinder widebands or EGT."
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on. Not recommended as this can easily get an incorrect reading if you are quick on the key or powercycle while the engine is running.\nTwo independent sensors = use a second dedicated barometer sensor.\n\nIt is strongly recommended to use a dedicated baro sensor if your vehicle will see altitude changes."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ mapport_t = "Selects voltage (common) or frequency (rare) type MAP sensor input.\nOff disables the MAP input. e.g. for pure Alpha-N or MAF installs."
+ mapport = "The connection to an external or internal voltage MAP sensor."
+ mapport_f = "The connection to an external or internal frequency MAP sensor."
+ map_freq0 = "The low frequency corresponding to the least MAP."
+ map_freq1 = "The high frequency corresponding to the most MAP."
+ map2port = "If fitted, the connection to a second voltage MAP sensor."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier or blended fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier or blend method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadMult2 = "The same as Multiply MAP, but this setting controls the secondary blended tables VE2 and VE4 - allowing for example Speed-Density (with MAP) on VE1 to be blended with a Pure Alpha-N (without MAP) on VE2."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier or blended fuel table (Spk2)\n\nAdvanced use only."
+ loadCombineign = "Selects the modifier or blend method"
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ OvrRunC_progcut = "Allows sequential injectors to be cut progressively for a smoother activation."
+ OvrRunC_progret = "Allows sequential injectors to be returned progressively for a smoother return. Does not make sense to use this with the accel-event option."
+ OvrRunC_progign = "Allows ignition timing transition during fuel cut."
+ OvrRunC_retign = "Allow ignition timing transition during fuel return."
+
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+ fc_transition_time = "Once main fuel cut delay timer has run, this sets a transition time from normal spark advance to the advance during overrun. The timer is also used for the progressive fuel cut.\nTypically set a retarded timing for overrun with a second time for smooth activation."
+ fc_trans_time_ret = "This sets a transition time from overrun to normal conditions and is used with progressive spark return and progressive fuel return.\nIf the throttle is applied above the threshold, the fuel and timing are immediately returned cancelling this timer."
+ fc_ae_time = "The length of time that additional fuel is added after over-run ends to avoid a lean-spike."
+ fc_timing = "The ignition advance during overrun. Typically set to a low number or ATDC timing."
+ fc_ae_pct = "Fuel adder after over-run ends to avoid a lean-spike."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If full fuel cut the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored and the normal hard rev limit is used. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+ tacho_optvar = "Fixed = Use a fixed tachometer scaling of full speed or half speed.\nVariable = fully variable tachometer output.\nTypical settings are 'Fixed' and 'Normal'"
+ tacho_scale = "Percentage scaling of tachometer output, 100% means a true output. Adjust up or down to correct inaccuracies in your tachometer."
+
+ fanctl_settings_on = "Enables fan control"
+ fanctl_settings_idleup = "Whether the fan activation should also raise the idle"
+ fanctl_settings_pin = "Selects the output pin for the fan relay"
+ fanctl_idleup_delay = "How long to wait after raising idle before turning on fan"
+ fanctl_idleup_adder_duty = "PWM open-loop duty cycle to increase by"
+ fanctl_idleup_adder_steps = "Additional stepper idle steps to open"
+ fan_idleup_cl_targetadder = "Target rpm to increase by"
+ fanctl_ontemp = "Turn fan on above this temperature"
+ fanctl_offtemp = "Turn fan off below this temperature (must be lower than "on" temperature)"
+ fanctl_opt2_engineoff = "Allows fan to run in key-on, engine-off situation"
+ fan_ctl_settings_acfan = "Whether the fan should be automatically turned on to help cool the A/C radiator."
+ fan_idleup_tps_offpoint = "Disable fan above this TPS% (reduces load on engine when max power desired.)"
+ fan_idleup_tps_hyst = "Deadband of TPS% "
+ fan_idleup_vss_offpoint = "Disable fan above this vehicle speed (at high speeds airflow through radiator will be sufficient on its own.)"
+ fan_idleup_vss_hyst = "Deadband of VSS"
+
+ tclu_outpin = "Selects output port to connect to lockup solenoid "
+ tclu_enablepin = "Selects optional input port for enable switch (could be used for 4th gear pressure switch.) "
+ tclu_brakepin = "Selects optional input port for brake light switch (brake light unlocks convertor.) "
+ tclu_tpsmin = "Minimum TPS to enable lockup "
+ tclu_tpsmax = "Maximum TPS to enable lockup "
+ tclu_mapmin = "Minimum MAP to enable lockup "
+ tclu_mapmax = "Maximum MAP to enable lockup "
+ tclu_opt_vss = "Optionally allow VSS1 or VSS2 speed input as criteria "
+ tclu_vssmin = "Sets minimum speed for lockup. (Requires VSS input in speed/gear sensors.) "
+ tclu_opt_gear = "Optionally allows gear number as criteria. (Requires gear to be enable in speed/gear sensors.) "
+ tclu_gearmin = "Minimum gear to enable lockup "
+ tclu_delay = "Wait this long after conditions are met before locking up."
+ MAFOption_t = "Selects between 0-5V voltage input (e.g. most MAFs) or frequency input (e.g. GM)\nOff disables the MAF input. "
+ MAFOption = "Selects the hardware input pin where the voltage MAF is connected."
+ MAFOption_f = "Selects from four possible frequency input pins."
+ maf_freq0 = "The frequency the MAF outputs to indicate least air flow."
+ maf_freq1 = "The frequency the MAF outputs to indicate greatest air flow."
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ opentime_opt1_master = "Same = one dead-time across all injectors. Most common.\n\nIndividual = the dead time for each injector is set individually."
+ opentime_opt1 = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ injOpena = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)"
+ opentime_opta_pwm = "Enables PWM current limiting (peak and hold) for low ohm injectors."
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ opentime_optb_own = "Enables different settings for bank 2. Only applicable if physically different injectors are on the second bank. Could be used with staged injection.\nFor most engines, this should be set to Off."
+ opentime_opta = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ smallpw_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. "
+ smallpw2_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. \n\nThis setting applies to table switched different injectors."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+
+ staged_extended_opts_pw1off = "Off = when staged, primary and secondary pulse-widths are equal.\n\nOn = when staged, primaries are shut down completely and just secondary injectors are used."
+ staged_extended_opts_use_v3 = "Whether the secondaries are connected to MS3X outputs or to the mainboard 'V3' batch fire outputs."
+ staged_extended_opts_simult = "Whether the batch fire outputs alternate during an engine cycle or fire once together."
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ staged_out1 = "Use a relay output to enable secondary injectors (GM systems) where primary and secondary injectors are wired to the same injector output."
+ staged_out2 = "Use a relay output earlier than secondary injectors (GM air-flaps)."
+ staged_out1_inv = "Allows output polarity sense to be swapped"
+ staged_out2_inv = "Allows output polarity sense to be swapped"
+ staged_out2_time = "How long the pre-output is active before the staging transition begins."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected."
+ fueltemp1 = "If used, specifies a sensor input for fuel temperature."
+ fuelFreq0 = "The low and high frequencies generated by the sensor (e.g. 50Hz, 150Hz for the GM sensor)"
+ flex_pct0 = "The ethanol percentage corresponding to the low and high frequencies."
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 163% for fully ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees. E85 burns more slowly than pure gasoline and will require more advance."
+ ff_tpw0 = "The pulsewidth from the sensor at low and high temperatures (1.0, 5.0ms for GM)"
+ ff_temp0 = "The low/high temperatures at low/high pulsewidths"
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ fuelFreq1 = ""
+ flex_pct1 = ""
+ fuelCorr1 = ""
+ fuelSpkDel1 = ""
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoAlgorithm_auth = "Enables a table of EGO authority based on RPM/load. This allows greater control over when closed-loop EGO is operational and permits variable authority. An authority of zero means there will be no correction made. Normally the RPM and load axes should be set the same as the AFR tables."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ ego_lower_bound = "Only correct above this AFR"
+ ego_upper_bound = "Only correct below this AFR"
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ egonum = "Selects the number of oxygen sensors in use."
+ egoport1 = "Selects where the sensor or controller is connected."
+ egomap1 = "Selects which oxygen sensor applies to this cylinder if multiple sensors are used. When only a single sensor is fitted, ensure all cylinders are set to EGO1."
+
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gmtfi = "GM HEI, Ford TFI and Buick C3I specific options.\nWith HEI7/8 and GM-DIS, this setting enables the 'bypass' output on spark B.\nThe C3I mode enables the 'bypass' and also quick-sync after the cam signal is received.\n Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors (where one vane is shorter than the others) for sequential fuel."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils. For 99% of installs using the MS3X spark outputs, this should be set to 'Going high'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ hardware_spk = "Either MS3X or LEDs. The MS3X outputs are ready to use logic spark outputs. The 'LED' spark outputs will typically only be used on upgrades from MS2 or without the MS3X."
+ hardware_cam = "Either MS3X or JS10 or 'MAP Sensor'. Typically set to MS3X.\nDO NOT select 'MAP Sensor' unless you know why.\n\nThe MS3X input is ready to use. JS10 requires DIY board customisation.\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl or V-twin engine. Used with 'Dual wheel with missing tooth' only. Enable 'Timed min' MAP sampling. Set the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_tach3 = "Selects where the tertiary tach input is connected"
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam or hi-res tach input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_mode3_kick = "Primarily for kick-start engines, the enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\n\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ spk_conf2_dwell = "For time-after-spark, the dwell can be varied with rpm."
+ spk_conf2_dwelltbl = "For 'standard dwell', a table of dwell values can be used. Normally a single dwell value is used."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_mode3_trim = "Enables the adjustment of timing per individual cylinder."
+
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "How often are second trigger (e.g. cam) input pulses received."
+ poll_level_tooth = "Which crank tooth number to poll the cam level at. Default is 1.\nRover 4.6 try 17.\nChanging the tooth no. may also change the phase."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ map_sample_duration = "How many degrees to sample over. The starting angle is set in the curve above."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl."
+
+ fp_opt_mode = "On/Off is used for basic control where the Megasquirt controls the negative side of a relay.\nOpen-Loop PWM provides a table based duty cycle for a fuel pump controller.\nClosed-Loop PWM monitors actual rail pressure and adjusts the duty cycle output to the pump controller to maintain a set differential pressure."
+ fp_ctl_ms = "How often to run the control calculations"
+ fp_out1 = "The output used to control the fuel pump (either to the relay or to a controller.)"
+ fp_freq = "For PWM outputs, this sets the output frequency."
+ fp_opt_inv = "Set to 'Normal' for On/Off. This setting is useful for PWM outputs and should be set to 'Invert' when using one of the mid-current ECU outputs as they invert the signal. The Spark or Digital outputs do not invert the signal and 'Normal' should be used. Note that the on/off fuel pump output is always a low-side driver and connects to the negative side of the relay - changing this setting will have no impact on that."
+ fp_opt_reg = "By preference, fuel systems use a vacuum/boost referenced regulator that maintains line pressure Xbar above inlet pressure. Some GM fuel systems use a fixed fuel pressure referenced to ambient air pressure instead. The vac referenced systems give even injector flow across all inlet pressure conditions. The un-referenced systems give a varying flow and require a calculation within the ECU to compensate. Enabling 'Fixed' here turns on that automatic compensation."
+ fp_opt_safety = "Enables fuel pressure safety system.\nIf the measured fuel pressure drops too low for more than a set time, the engine is shutdown."
+ rail_pressure_psig = "The fuel rail pressure in PSI referenced to manifold pressure. Typically 43.5PSI for many installs."
+ rail_pressure_kpag = "The fuel rail pressure in kPa referenced to manifold pressure. Typically 304kPa for many installs."
+ fp_prime_duty = "The PWM duty cycle used during the priming pulse."
+ fp_off_duty = "The PWM duty cycle used when the pump should be off. Set to 0 for most applications, or 75% for Ford FPDM modules."
+ fp_min_duty = "The minimum PWM duty cycle to be used when running. Set to 0 for most applications, or 5% for Ford FPDM modules."
+ fp_max_duty = "The maximum PWM duty cycle to be used when running. Set to 100 for most applications, or 50% for Ford FPDM modules."
+ fp_press_in = "If used, specifies a Generic Sensor that is configured for fuel pressure in kPa."
+ fp_press_type = "'Gauge' sensors are referenced to atmospheric pressure - with a vac referenced regulator, the reported pressure will drop under vacuum and increase under boost.\n'Differential' sensors are referenced to manifold vacuum/boost - this pressure will typically remain static e.g. 43psi, 3bar.\n'Absolute' sensors are referenced to true vaccum and will read about 14.7psi/1bar when there is no fuel pressure."
+ fueltemp1_corr = "Enables fuel correction based on fuel temperature."
+ fp_Kp = "Closed-loop Proportional term"
+ fp_Ki = "Closed-loop Integral term"
+ fp_Kd = "Closed-loop Differential term"
+
+ hpte_opt_on = "Allows richer mixture after prolonged high power operation to cool piston crown. The richer mixture is calculated by decreasing the AFR target using the number from the curve. The 'high power timer' counts up when above the load/rpm points and counts down below those points. The relevant enrichment is applied until the counter returns to zero."
+ hpte_load = "Only enable above this fuel-load."
+ hpte_rpm = "Only enable above this RPM."
+ shiftlight_opt_pins = "Allows a specific output to be used to switch a shift light. (Do not also enable the same output in the generic on/off outputs.)"
+ shiftlight_opt_gear = "Allows per-gear limits, can be useful to set a lower limit in lower gears to avoid overshooting."
+ shiftlight_limit1 = "Light is on above this RPM."
+ ltt_opt_on = "Enables the long-term fuel trim. This is intended to automatically make minor corrections in fuelling AFTER the engine is fully tuned. It requires EGO control to be enabled and operational."
+ ltt_opt_feedback = "Reports the total %change in 'sensor15' - mainly for testing."
+
+ ltt_samp_time = "How often (in seconds) the code checks the current EGO correction."
+ ltt_agg = "How softly the trim correction is applied."
+ ltt_opt_mode = "Timed - if needed, the trim table is automatically saved to flash\nButton - an external button is used to save the trim table to flash."
+ ltt_but_in = "User operated button to burn trim table from RAM to flash so it is used at next power-on."
+ ltt_int = "Minimum time between automatic burns to flash."
+ ltt_led_out = "LED output is illuminated when RAM trim table exceeds change threshold. The user can then choose to Burn to flash."
+ ltt_thresh = "If the sum of all changes exceeds this threshold than a burn to flash is requested - either automatically or by lighting the LED for user intervention. The purpose is to only make permanent changes if there was a widespread change."
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "How long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle does not leave PID running. Avoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ IdleCtl_vss = "Controls whether the VSS activates closed-loop idle."
+ idleminvss = "Closed-loop idle is disabled above this VSS."
+ pwmidle_tps_threshold = "The TPS value below which the other factors for entering closed-loop idle are considered."
+ pwmidle_rpmdot_threshold = "The value RPMdot must be below before closed-loop idle can be activated."
+ pwmidle_decelload_threshold = "The value load must be above before closed-loop idle can be activated."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_pwm = "Controls the frequency range allowed on the boost control output(s). Mid allows 12-1021 Hz. Slow allows 11.1-78Hz. Most installs use Slow."
+ boost_ctl_pwm_scale = "Frequencies available with Mid solenoid frequency range. Frequency is shared with other pins in the same PWM group.\rPWM group A : Nitrous1/2, Inj1/2\rPWM group B : Boost, Idle, FIDLE, VVT"
+ boost_ctl_pins_pwm = "Output pins available when using the Mid frequency range."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range.\nThe 'Off' setting is only useful when using CAN broadcasting to send the turbo vane position."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_clt_threshold = "Coolant temperature must be above this value before boost control will work."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_flags = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_flags2 = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ tsw_pin_ob = "Allows an input pin to toggle maximum boost to an alternate value."
+ OverBoostKpa2 = "The alternate maximum desired boost before overboost protection cuts fuel/spark."
+; overboostcutx = "When using spark cut, controls the number of sparks to cut."
+; overboostcuty = "When using spark cut, controls the number of potential spark events from which to cut spark."
+ boost_feats_tsw = "Allow boost tables to be switched when an input is toggled on/off."
+ boost_gear_switch = "Selects which gear to switch tables on when gear-based boost table switching is enabled."
+ boost_feats_timed = "Launch control must be enabled to use this feature. Times the amount of boost from launch."
+ boost_feats_launch = "Allow a specific target (closed-loop) or duty (open loop) to be specified when launch control is active."
+ boost_launch_duty = "Duty to use when launch is active."
+ boost_launch_target = "Target to use when launch is active."
+ boost_vss = "Requires VSS to be enabled. Allows boost target to be controlled based on vehicle speed or detected gear."
+ boost_vss_tps = "TPS must be above this value for the VSS target boost to be used."
+ boost_geartarg1 = "Boost target for each gear.\n\nTo use these settings you need:\n Boost = On\nClosed-Loop Boost\nGear detection\n Boost vs speed/gear = Gear."
+ boost_ctl_settings_on2 = "Controls whether the second channel of boost control is enabled."
+ boost_ctl_pins_pwm2 = "Output for solenoid."
+ boost_ctl_pins2 = "Output for solenoid."
+ boost_ctl_closeduty2 = "The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty2 = "The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_lowerlimit2 = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl2 = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp2 = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki2 = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd2 = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_sensor2 = "MAP sensor input to monitor."
+
+ alternator_opt_mode = "Control mode for alternator.\nOff = disabled\nOn-Off = most basic control, typically on the 'L' lamp terminal\nOpen-loop frequency = Frequency applied sets target voltage (Ford)\nOpen-loop duty = Duty cycle applied sets target voltage (GM)\nClosed-loop field control = MS3 uses a closed-loop algorithm to control the alternator field to target a voltage (Chrysler)\nHigh-speed feedback field switching = MS3 monitors the voltage at 20kHz and switches the field on or off to match the monitored voltage to the target voltage. (99-05 Miata)"
+ alternator_ctl_ms = "How often to run the control calculations"
+ alternator_controlout = "Output connection to the alternator"
+ alternator_control_inv = "Whether a positive or negative active edge is used"
+ alternator_freq = "Frequency used for control output signal"
+ alternator_lampout = "Output for charge/warning light"
+ alternator_freq_currin = "PWM digital input used for monitoring battery current. (Display only.)"
+ alternator_diff = "Light warning lamp if actual voltage is too far away from target."
+ alternator_freq_monin = "PWM digital input from alternator as load sense - often the 'F' terminal."
+ alternator_freq_moninv = "Whether a positive or negative capture edge is used"
+ alternator_maxload = "Light warning lamp if sensed load is above this limit."
+ alternator_Kp = "Closed-loop Proportional term"
+ alternator_Ki = "Closed-loop Integral term"
+ alternator_Kd = "Closed-loop Differential term"
+ alternator_sensitivity = "Overall sensitivity"
+ alternator_freq_currinv = "Whether a positive or negative capture edge is used"
+ alternator_startdelay = "How long after start before alternator control is enabled. Allows engine to stabilise before alternator load is applied."
+ alternator_ramptime = "Time to ramp up to target voltage"
+ alternator_tempin = "If used, specifies a Generic Sensor that is configured for battery temperature. The temperature is then used to lookup a target charging voltage from the upper curve."
+ alternator_targv = "Target voltage when in 'Charge' mode"
+ alternator_chargetime = "How long after start is considered 'Charge' before transitioning to 'Run' mode."
+ alternator_targvr = "Target voltage during 'Run' mode."
+ alternator_wot = "TPS% to trigger Wide Open Throttle (WOT) mode"
+ alternator_wotv = "Target voltage when in WOT mode, typically set lower than normal to free up some engine power."
+ alternator_wottimeout = "Timeout before WOT mode ends and target voltage returns to charge or run mode."
+ alternator_overrv = "Target voltage when over-run fuel cut is active. Setting a slightly higher voltage here will give a minor 'regenerative braking' effect."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ vehigh = "The maximum for VE values."
+ wue_lpg = "For most installs, setting warmup enrichment (WUE) to below 100% indicates a serious tuning mistake and the code will flag up a 'Configuration Error' to alert the user. In rare conditions such as using LPG (propane) for fuel, it can be valid. This setting disables the Config Error warning message."
+ prefSpeedUnits = "Chooses the speed units - either Mile-per-hour or Kilometres-per-hour\nClose the page and re-open after changing."
+ prefLengthUnits = "Chooses the size units - either metres or inches\nClose the page and re-open after changing."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+ maxafr_opt1_on = "Enables the AFR safety system"
+ maxafr_opt1_led = "Sets an on/off warning output"
+ maxafr_opt1_load = "Selects the load axis on the AFR difference table"
+ maxafr_en_load = "Only check above this TPS/kPa"
+
+ maxafr_en_rpm = "Only check above this RPM"
+ maxafr_en_time = "Specifies a wait time before taking action, to prevent transients from tripping."
+ maxafr_spkcut_time = "Cuts spark as the first stage in the system for this long."
+ maxafr_ret_tps = "throttle is below this limit."
+ maxafr_ret_map = "Fuel and spark remain cut until MAP (boost) is below this limit."
+ maxafr_ret_rpm = "Fuel and spark remain cut until RPM is below this limit."
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ dlyct = "Sets the CPU hardware based noise filter. Typically a small number or zero."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ feature7_batchcrank = "Allows fuel to be fired on each tach event in a batch-fire mode on a sequential install. Can be useful in cold climates to allow large cranking fuel flow."
+ feature7_cranktaper = "Allows a taper curve on crank pulsewidth, either to reduce pulsewidth over time, or to allow an initial large shot of fuel."
+ feature7_crtpunits = "Selects units of ignition events or 0.1 seconds."
+ alternate_blend = "Enables a blend curve between cranking curves."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ feature3_aseunit = "Selects whether After Start Enrichment (ASE) uses Seconds or Ignition Events as the timer."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_auto = "Whether the system operates from a pushbutton or automatically."
+ shift_cut_fuel = "Whether to also cut fuel."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_gear = "Option to add additional spark cut time per gear."
+ shift_cut_add12 = "Additional time to cut spark for this shift."
+ shift_cut_add23 = "Additional time to cut spark for this shift."
+ shift_cut_add34 = "Additional time to cut spark for this shift."
+ shift_cut_add45 = "Additional time to cut spark for this shift."
+ shift_cut_add56 = "Additional time to cut spark for this shift."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+ shift_cut_rpm12 = "Shift at this rpm."
+ shift_cut_rpm23 = "Shift at this rpm."
+ shift_cut_rpm34 = "Shift at this rpm."
+ shift_cut_rpm45 = "Shift at this rpm."
+ shift_cut_rpm56 = "Shift at this rpm."
+
+ ac_idleup_settings = "Enables the A/C idle-up feature."
+ ac_idleup_settings_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Normal' settings should be used. In certain installations with appropriate wiring, the 'Inverted' setting can be required."
+ ac_idleup_io_out = "Output to engage compressor."
+ ac_idleup_io_in = "Switch input."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps= "Additional idle steps to add when A/C is active."
+ ac_idleup_cl_targetadder= "Bump up RPM by this much when A/C is active."
+ ac_idleup_cl_lockout_mapadder = "When A/C is active the engine load will increase. Set this number so that the additional load doesn't kick you out of closed-loop idle."
+ ac_idleup_tps_offpoint = "Disable A/C when TPS is above this. (Reduces load on engine when driver demands full power.)"
+ ac_idleup_tps_hyst = "Deadband in TPS to prevent bouncing on/off."
+ ac_idleup_vss_offpoint = "Disable A/C above this speed."
+ ac_idleup_vss_hyst = "Deadband in VSS to prevent bouncing on/off."
+ ac_idleup_max_rpm = "Maximum allowed RPM for AC."
+
+ idleadvance_on = "Enables Idle-advance feature"
+ idle_special_ops_timing_assist = "Enables additional advance curve linked to closed-loop idle target. This allows you to use timing control to assist with idle speed regulation."
+ idleveadv_to_pid_idleadv = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ idleve_on = "Enables Idle-VE feature"
+ idleveadv_to_pid_idleve = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleve_tps = "Only activate below this TPS."
+ idleve_rpm = "Only activate below this RPM."
+ idleve_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleve_clt = "Only activate above this coolant temperature. (Typically idle-VE does not work too well during warmup.)"
+ idleve_vsson = "Selects whether VSS1 must be zero before idle-VE is activated."
+ idleve_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level\nInternal: internal knock module."
+ knkport = "Input for knock on/off signal"
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied. When using the suggested Datalog/Tableswitch/Launch input pin set to 'None'"
+ knkport_an = "Input for knock analogue signal"
+ knk_option_wind = "Either read single analogue value at end knock window or peak detect."
+ knk_pin_out = "Optional digital output for knock window signal."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_step_adv = "The ignition advance step size after knock has stopped."
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+ knock_bpass = "This should be adjusted to suit the resonant frequency of you engine."
+ knock_int = "How long the signal is sampled for."
+ knock_conf_num = "How many knock sensors (1 or 2)"
+ knock_conf_launch = "Knock detection can be disabled when launch/flatshift are active to prevent false detection."
+ knock_conf_percyl = "Enables linking of knock signal to cylinder number. This only works if coil-on-plug or sequential fuel are enabled."
+ knock_conf_percylact = "Enables per-cylinder timing adjustment for knock.\nRequires a knock feedback system such as the internal one that reports knock per-cylinder."
+ knock_conf_debug = "Debug option to record per-cylinder knock retards into 'sensors' variables."
+ knock_gain01 = "Compensate for sensor sensitivity and distance between cylinder and sensor."
+ knock_sens01 = "Pick which sensor to use for each cylinder."
+ AE_options = "Selects between time-based accel enrichment or pump-style enrichment."
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value."
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ feature7_aeevents = "Length of enrichment pulse is measured in ignition events or seconds.\n(Primary and secondary fuel.)"
+ tpsasync_events = "Length of enrichment pulse."
+ tpsasync2_events = "Length of enrichment taper."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value."
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+
+ mapThresh2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ aeEndPW2 = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested.\n(Second fuel.)"
+ taeTime_events2 = "Length of enrichment pulse.\n(Second fuel.)"
+ aeTaperTime_events2 = "Length of enrichment taper.\n(Second fuel.)"
+ taeTime2 = "Length of main enrichment pulse.\n(Second fuel.)"
+ aeTaperTime2 = "Length of 'taper' time after main enrichment pulse.\n0 is suggested.\n(Second fuel.)"
+ tpsThresh2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ tdePct2 = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested.\n(Second fuel.)"
+ taeColdA2 = "At full cold (-40C/F), add this amount to the enrichment.\n(Second fuel.)"
+ taeColdM2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+
+ accel_mapdot_threshold = "Trigger enrichment above this MAPdot value."
+ accel_tpsdot_threshold = "Trigger enrichment above this TPSdot value."
+ accel_CLT_multiplier = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ accel_blend_percent = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+ accel_mapdot_threshold2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ accel_tpsdot_threshold2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ accel_CLT_multiplier2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ accel_blend_percent2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+ als_in_pin = "Enables the Anti-Lag system and selects the Enable input."
+ als_maxtps = "Disable ALS above this TPS%."
+ als_minrpm = "Disable ALS below this RPM."
+ als_maxrpm = "Disable ALS above this RPM."
+ als_maxmat = "Disable ALS above this manifold temperature."
+ als_maxtime = "Only allow ALS to be active for this long to reduce temperature build-up."
+ als_pausetime = "Enforce a minimum time between activations to reduce temperature build-up."
+ als_minclt = "Disable ALS below this coolant temperature."
+ als_maxclt = "Disable ALS above this coolant temperature."
+ als_opt_fc = "Whether cyclic fuel cut should be used. ONLY for use with sequential fuel."
+ als_opt_sc = "Whether cyclic spark cut should be used."
+ als_opt_ri = "Whether roving idle fuel cut should be used."
+ als_opt_idle = "Enables the idle valve in ALS mode."
+ als_iac_duty = "What valve duty should be used to give the extra air needed for ALS."
+ als_iac_steps = "What valve steps should be used to give the extra air needed for ALS."
+ als_out_pin = "Enables an additional output in ALS mode for extra-air valve."
+ als_opt_pwmout = "Enables an additional pulsed output in ALS mode."
+ als_pwm_opt2 = "Pulsed output."
+ als_pwm_duty = "Duty cycle on pulsed output when ALS is active."
+ als_pwm_opt_freq = "Frequency on pulsed output."
+
+ vvt_opt1_on = "Enables VVT control and selects number of cams to control."
+ vvt_opt1_filter = "Enables a filter on the VVT teeth to reject false triggers."
+ vvt_opt4_decode = "Enables a special decoder if applicable.\n\nThe BMW S54 decoder also supports S62. Wire main VVT outputs to opening solenoids 1, wire the complementary outputs to closing solenoids 2. Use 20Hz."
+ vvt_opt6_freq = "VVT solenoid PWM frequency."
+ vvt_opt2_pid2 = "Chooses between basic on/off mode or variable position control."
+ vvt_opt5_add1 = "Whether to adjust injection timing based on cam position and which cam."
+ vvt_opt5_add2 = "If injector timing is being adjusted, whether to adjust it based on target or actual current position."
+ vvt_onoff_ang = "Angle to advance injector timing by when VVT is active."
+ vvt_opt7_yaxis = "The load unit used for the Y-axis on the lookup tables."
+ vvt_opt1_int = "How often to run the calculations.\nSynced to cam is most typical meaning that the calculations are run as soon as new cam tooth passes the sensor."
+ vvt_ctl_ms = "Specifies a fixed calculation interval."
+ vvt_opt5_err = "Whether error checking should be applied to the measured cam angles."
+ vvt_opt1_tst = "Selects a cam output to test."
+ vvt_test_duty = "What duty cycle to output to the VVT solenoid."
+ vvt_opt2_use_hold_intake = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty = "Specific hold duty."
+ vvt_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt2_use_hold_exhaust = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty_exh = "Specific hold duty."
+ vvt_ctl_Kp_exh = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki_exh = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd_exh = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt1_dir_exhaust = "Whether the exhaust cam table is a table of advances (old method) or a table of retards (matches most exhaust VVTs.)"
+ vvt_opt3_cam1 = "Cam1 is always the main cam input."
+ vvt_opt2_cam1pol = "Cam1 capture polarity is defined on the Ignition Options page."
+ vvt_tth1 = "The number of teeth on the cam1 trigger wheel."
+ vvt_out1 = "VVT1 solenoid output"
+ vvt_min_ang1 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang1 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt1 = "Whether this is an intake or exhaust cam."
+ vvt_cam1tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam1tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out1_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam2 = "The input for cam2."
+ vvt_opt2_cam2pol = "The capture polarity for cam2.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth2 = "The number of teeth on the cam2 trigger wheel."
+ vvt_out2 = "VVT2 solenoid output"
+ vvt_min_ang2 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang2 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt2 = "Whether this is an intake or exhaust cam."
+ vvt_cam2tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam2tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out2_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam3 = "The input for cam3."
+ vvt_opt2_cam3pol = "The capture polarity for cam3.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth3 = "The number of teeth on the cam3 trigger wheel."
+ vvt_out3 = "VVT3 solenoid output"
+ vvt_min_ang3 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang3 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt3 = "Whether this is an intake or exhaust cam."
+ vvt_cam3tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam3tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out3_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam4 = "The input for cam4."
+ vvt_opt2_cam4pol = "The capture polarity for cam4.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth4 = "The number of teeth on the cam4 trigger wheel."
+ vvt_out4 = "VVT4 solenoid output"
+ vvt_min_ang4 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang4 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt4 = "Whether this is an intake or exhaust cam."
+ vvt_cam4tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam4tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out4_dir = "What direction the cam moves with output duty."
+ vvt_minclt = "VVT only operates when coolant is above this temperature."
+ vvt_minduty1 = "Minimum duty cycle for VVT solenoids"
+ vvt_maxduty1 = "Maximum duty cycle for VVT solenoids"
+ vvt_slew = "Limits rate of change of VVT target to minimise overshoot caused by rapid target changes or low oil pressure at low rpms.\nDefault is 2.0deg per cam event."
+ vvt_softout1 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout2 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout3 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout4 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+
+ f5_0_tsf = "Enables fuel table switching."
+ f5_0_tsf_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_f = "Table switch input."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "kPa threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching."
+ f5_0_tss_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_s = "Table switch input."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "kPa threshold."
+ tss_tps = "TPS threshold."
+ tsw_pin_rf = "Enables ReqFuel switch input."
+ ReqFuel_alt = "ReqFuel to use when switched."
+ tsw_pin_afr = "Enables AFR table switch input."
+ tsw_pin_stoich = "Enables Stoich switch input."
+ stoich_alt = "Stoich to use when switched."
+ dualfuel_sw_on = "Enables Dual Fuel support (e.g. LPG or secondary race fuel on a different system.)"
+ dualfuel_opt_mode = "Switching = swaps from fuel 1 to fuel 2.\nDual Table = parallel fuel tables allowing simultaneous control of both fuels. e.g. mapped methanol under boost.\nFlex Blend = ethanol %age from flex fuel sensor is used to blend between two sets of tables."
+ dualfuel_opt_out = "Shared outputs = used when two sets of injectors share one set of control wires from the ECU and have a relay to switch +12V.\nDifferent outputs = where each main and secondary injectors are wired to different outputs."
+ dualfuel_pin = "Input for Dual Fuel switching."
+ dualfuel_sw_fuel = "Whether to switch fuel tables."
+ dualfuel_sw_spk = "Whether to switch spark tables."
+ dualfuel_sw_afr = "Whether to switch AFR tables."
+ dualfuel_sw_rf = "Whether to switch ReqFuel."
+ dualfuel_sw_stoich = "Whether to switch Stoich."
+ dualfuel_sw_wue = "Whether to switch warmup curves."
+ dualfuel_sw_ase = "Whether to switch afterstart curves."
+ dualfuel_sw2_prime = "Whether to switch priming curves."
+ dualfuel_sw2_crank = "Whether to switch cranking pulse curves."
+ dualfuel_sw2_injp = "Whether to switch injector parameters."
+ dualfuel_sw2_smpw = "Whether to switch small pulsewidth curves."
+ dualfuel_sw2_ob = "Whether to switch overboost limits."
+ dualfuel_sw2_boosw = "Whether to switch boost tables."
+ dualfuel_sw2_ae = "Whether to switch accel enrich settings and curves."
+ dualfuel_opt_temp = "Enable secondary fuel temperature adjustment."
+ dualfuel_temp_sens = "Secondary fuel temperature input."
+ dualfuel_opt_press = "Enable secondary fuel pressure adjustment."
+ dualfuel_press_sens = "Secondary fuel pressure input."
+ dualfuel_press_type = "Sensor type: Gauge, Absolute, Differential"
+
+ vss_opt0_1 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss1_an = "Input for analogue 0-5V speed sensor."
+ vss1_an_max = "Speed at 5V input."
+ vss_opt1 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia1 = "Overall diameter of wheel and tyre."
+ vss1_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth1 = "Number of teeth on speed pickup reluctor."
+ vss1_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss1_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_2 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss2_an = "Input for analogue 0-5V speed sensor."
+ vss2_an_max = "Speed at 5V input."
+ vss_opt2 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia2 = "Overall diameter of wheel and tyre."
+ vss2_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth2 = "Number of teeth on speed pickup reluctor."
+ vss2_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss2_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_3 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss3_an = "Input for analogue 0-5V speed sensor."
+ vss_opt3 = "Selects digital pulse input or input via CAN from expansion board."
+ vss3_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss_opt0_4 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss4_an = "Input for analogue 0-5V speed sensor."
+ vss_opt4 = "Selects digital pulse input or input via CAN from expansion board."
+ vss4_pwmseq = "CAN PWM port for capturing from expansion board."
+ vssout_opt = "Digital pulsed output to drive a speedometer."
+ vssout_optunits = "Type of output conversion."
+ vssout_scale = "Scaling factor."
+ vssdot_int = "How often to calculate VSSdot (acceleration.)"
+ vssdotLF = "Smoothing factor on VSSdot. 100% = no smoothing, 15% = maximum smoothing."
+ fdratio1 = "Final drive gear ratio."
+ gear_method = "How to determine gear no.\nVSS/RPM - compares the vehicle speed with RPM and the gear ratio table.\nAnalogue - uses a 0-5V analogue gear-position-sensor input.\nCAN gear# - fetches a gear number from an expansion board over CAN."
+ gear_no = "How many gears."
+ gear1ratio = "Ratio of each gear."
+ gear_port_an = "Analogue input for gear-position-sensor."
+ gear0v = "Nominal voltage in each position."
+ vss_samp_int = "How often to sample/accumulate VSS teeth. Normally 50ms is ok and gives smoothing.\nHard accelerating vehicles will need to lower this number for improved zero-speed response."
+
+ ss_opt1 = "Selects digital pulse input."
+ reluctorteeth3 = "Number of pickup teeth on reluctor."
+ ss_opt1_spd = "Where possible, configures this as a high-speed input."
+ ss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ ss_opt2 = "Selects digital pulse input."
+ reluctorteeth4 = "Number of pickup teeth on reluctor."
+ ss_opt2_spd = "Where possible, configures this as a high-speed input."
+ ss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ accXport = "Analogue 0-5V input for X-axis."
+ accYport = "Analogue 0-5V input for Y-axis."
+ accZport = "Analogue 0-5V input for Z-axis."
+ accXcal1 = "Calibration value when X is -1g. See the manual."
+ accXcal2 = "Calibration value when X is +1g. See the manual."
+ accYcal1 = "Calibration value when Y is -1g. See the manual."
+ accYcal2 = "Calibration value when Y is +1g. See the manual."
+ accZcal1 = "Calibration value when Z is -1g. See the manual."
+ accZcal2 = "Calibration value when Z is +1g. See the manual."
+ accxyzLF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ log_style_on2 = "Enables SDcard datalogging.\nAlways - log always.\nButton - use a button to start and stop logs.\nTrigger - start logs when trigger condition is met."
+ log_style2_but = "Digital switch input."
+ log_style4_opt = "Type of trigger to start logging."
+ log_trig_rpm = "Start logging above this RPM."
+ log_trig_tps = "Start logging above this TPS or MAP kPa"
+ log_trig_map = "Start logging above this MAP"
+ sdpulse_out = "Typically used to synchronise a video camera recording, sends a low pulse at the start of a datalog."
+
+ log_style_led = "Output for LED or indicator lamp."
+ log_style_block = "Type of datalog to record.\n64byte = regular SDcard datalog.\n64byte+stream = datalog plus simulataneous audio soundtrack."
+ log_style2_samp = "Timed = suitable for all installs.\nCycle/tooth = for developer use."
+ log_int = "How often to record data.\nLower limit for most cards is 3ms."
+ log_length = "How long each datalog file should be. After this time a new logfile is started."
+ log_style3_adc = "Optional analogue (sound) stream input."
+ log_style_ledspd = "Unless advised otherwise, use 'Normal'"
+ log_style_gps = "Enables the recording of interleaved GPS data.\n\nRequires a CAN connected GPS module."
+
+ egt_num = "Number of EGT channels to enable."
+ egtcal_temp0 = "Temperature at 0V."
+ egtcal_tempmax = "Temperature at 5V - depends on interface design."
+ egt_conf_action = "EGT over-temperature reactions"
+ egt_warn = "Turn on warning output above this temperature."
+ egt_addfuel = "Bump up pulsewidth on over-temperature."
+ egt_conf_bank = "Most installs should use 'Both' Bank1,2 only apply to Staged primary and secondaries."
+ egt_conf_shutdown = "Enables engine shutdown if above max temperature or too long above warning limit."
+ egt_conf_percyl = "For sequential fuel ONLY, allows fuel to be added per cylinder.\nRequires that EGT1 = #1, EGT2 = #2 etc."
+ egt_time = "Shutdown if above warning temperature for this long."
+ egt_max = "Shutdown if temperature exceeds this maximum (even for a split second.)"
+ egt1port = "Analogue 0-5V input from thermocouple. (Note that an interface circuit is required.)"
+
+ sensor01_source = "Analogue 0-5V input."
+ sensor01Alias = "User defined name assigned to this sensor input. e.g. pre-intercooler air temperature."
+ sensor01_trans = "Type of transformation from raw input to useful numbers.\nRaw = raw 0-1023 ADC count\nLinear = useful for many ratiometric sensors with a linear scale.\nSame as XXX applies the same transform as other sensors on your ECU.\nGM calibration = same transform as GM air/coolant thermistor sensors."
+ sensor01_val0 = "The number you want to see when 0V is applied"
+ sensor01_max = "The number you want to see when 5V is applied"
+ sensor01LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ opt142_gs_share = "Normally each input can only be used by one feature. This setting allows inputs to be shared between generic sensors and other features. (Obviously you can still only connect one sensor to each input!)"
+ sensor_temp = "Selects degF/degC for temperature units when using CLT/MAT calibrations. This is set on the Generic Sensors page."
+
+ tc_opt_on = "Enables traction control"
+ tc_led_out = "Light output when traction is active."
+ tc_opt_method = "Traction control method:\nPerfect Run = a drag race strategy for a single pass comparing actual VSS against best possible.\nVSS %slip = compares VSS1 to VSS2 and detects slip%.\nPerfect Run RPM = similar to perfect run but without VSS for classes where that is not allowed.\nSwitch input = for use with an external slip detector."
+ tc_enin = "Optional digital switch input"
+ tc_mintps = "Only enable traction control above this TPS%"
+ tc_minmap = "Only enable traction control above this MAP"
+ tc_minvss = "Only enable traction control above this VSS"
+ tc_opt_slipcurve = "Whether to use a fixed slip% limit or an adjustable curve."
+ tc_slipthresh = "Fixed slip% limit."
+ tc_opt_n2o = "Only on/off control is presently supported."
+ tc_opt_bank = "Which bank of injectors to add fuel to.\nNormally select 'Both'\nWhen staging bank 1 = primary, bank 2 = secondary"
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_vss = "Enables wheel speed based launch instead of switch input. Select the wheel-speed sensor for a non-driven wheel."
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_opt_bank = "Allows fuelling to be changed while the launch limiter is on."
+ launch_addfuel = "The raw millisecond pulsewidth change to make (+/-)"
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ launchlimopt_adv = "Basic = limiter type is automatically set\nAdvanced = Choice of hard limiter type and spark cut zone.\n\nApplies to launch and flat-shift."
+ launchlimopt_cut = "Selects the spark cut limiter type.\nRandom Progressive = random cut that increases linearly across the spark cut zone.\nRandom Ramped = random cut that ramps up across the spark cut zone.\nFixed 5/7 = non-progressive rotational cut. 5 missed sparks, 2 actual sparks, repeat.\nFixed 4/5 = non-progressive rotational cut. 4 missed sparks, 1 actual spark, repeat."
+ launchvsstime = "Once you have been moving for this number of seconds, VSS based launch control is locked out until next stop.\nSet to zero to make it permanently active (no timeout.)"
+ launch_fcut_rpm = "During the flat-shift up-shift and the revs are falling, the fuel is cut off until the revs have fallen below this set point to reduce exhaust explosions."
+ launch_maxvss = "Prevents launch from activating once you are rolling."
+ launchvss_minvss = "Below this speed the wheel speed launch is re-armed.\n\nTypically set to a very low number."
+ launch_opt_vssgear = "Enables/disables checking of gear no.\n\n(Requires gear detection to be enabled.)"
+ launchvss_maxgear = "Wheel speed launch is applied up to this gear number.\n\ne.g. 2 means launch can be used in 1st and 2nd."
+ launchcutzone = "The RPM band below the hard limit where spark cutting begins.\nCan be set to 0 to apply spark cutting only at the hard limit when using the fixed limiter types.\nThe random cuts need an RPM band to operate across 200+ RPM suggested."
+ launchcuttiming = "The ignition timing during the cut zone and at the hard limit.\nOnly applies to launch - not flat-shift."
+ flats_minvss = "Prevents flat-shift from activating at low speeds e.g. just after launch"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+ launch_opt_retard = "Enables feature to feed in timing after launch."
+ launch_var_on = "Input for 0-5V potentiometer used to vary launch RPM."
+ launch_var_low = "With a 0V input, the launch hard limit is set to this RPM."
+ launch_var_up = "With a 5V input, the launch hard limit is set to this RPM."
+ launch_3step_in = "Input for 3-step switch. Could be used as burnout limiter."
+ launch_sft_deg3 = "The timing is retarded to this angle when the 3-step is on."
+ launch_hrd_lim3 = "Sets the hard limit RPM when the 3-step is on."
+ timedout1_in = "Input for transbrake button."
+ timedout1_out = "Output for transbrake solenoid."
+ timedout1_offdelay = "Delay between button release and transbrake release."
+ tcs_in = "Input for Turbo Staging control"
+ tcs_offtime = "How long to release trans-brake for on each move step. This should be set long enough to move the car a little without gaining any speed."
+ tcs_ontime = "How long the trans-brake should be re-activated for between each step. This should be set long enough to fully grab again."
+ tcs_moves = "How many moves (trans-brake release steps) on the first press of the button. Each subsequent press of the button gives a single move."
+ tstop_out = "Output for throttle-stop solenoid."
+ tstop_delay = "Delay after launch before solenoid is activated."
+ tstop_hold = "How long to keep solenoid on for."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt2_prog = "Selects between On/Off or Progressive control mode."
+ N2Oopt2_prog_time = "Chooses between Time, RPM or VSS as control factor."
+ N2Oopt2_prog_freq = "Selects solenoid frequency. Typically around 13Hz."
+ N2Oopt2_prog_freqf = "Allows a different fuel solenoid frequency if different fuel and nitrous outputs are used. Typically around 13Hz."
+ N2Oopt_4 = "Allows optional AFR safety system to use alternate AFR targets when nitrous is active."
+ N2Oopt_5 = "Allows nitrous stage 1 during launch (2-step)."
+ N2Olaunchmaxmap = "Maximimum MAP when nitrous is used during launch to build boost."
+ n2o1n_pins = "Output for stage 1 nitrous solenoid."
+ n2o1f_pins = "Output for stage 1 fuel solenoid."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a 12V signal.)"
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ n2o2n_pins = "Output for stage 2 nitrous solenoid."
+ n2o2f_pins = "Output for stage 2 fuel solenoid."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ water_freq_on = "Enables the feature."
+ water_pins_pump = "Output to pump relay."
+ water_freq_type = "'Off' - no valve output (used fixed nozzle)\n'Slow' - slow speed valve output with chosen PWM duty cycle\n'Fast' - valve switches at injector speed with chosen PWM duty cycle."
+ water_freq = "Valve operating frequency."
+ water_pins_valve = "Output for valve."
+ water_tps = "Only enable above this TPS%."
+ water_rpm = "Only enable above this RPM."
+ water_map = "Only enable above this MAP."
+ water_mat = "Only enable above this MAT."
+ water_pins_in_shut = "Allows a low fluid level sensor switch input.\n\nThe switch must be wired so that the input is grounded when the level is ok and no connection is made in low or fault conditions.\n\nIf fluid reserve is low when water injection is required, for safety the engine will be shutdown using the parameters in the AFR Safety System."
+
+ oilpress_in = "Sensor channel used for oil pressure input."
+ oilpress_out = "Output for warning lamp."
+
+ fp_drop_load = "Only check for low pressure above this engine load (e.g. MAP, TPS, MAFload)"
+ fp_drop_rpm = "Only check for low pressure above this RPM."
+ fp_drop_psig = "Allowed drop in pressure below target."
+ fp_drop_kpag = "Allowed drop in pressure below target."
+ fp_drop_time = "If fuel pressure stays too low for more than this time, the engine is shutdown using the AFR safety settings."
+
+ pwm_opt_on_a = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_a = "Output for relay/solenoid."
+ pwm_opt_freq_a = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_a = "Output is on when the table/curve is above this number."
+ pwm_offbelow_a = "Output is off when the table/curve is below this number."
+ pwm_opt_load_a = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_a = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_b = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_b = "Output for relay/solenoid."
+ pwm_opt_freq_b = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_b = "Output is on when the table/curve is above this number."
+ pwm_offbelow_b = "Output is off when the table/curve is below this number."
+ pwm_opt_load_b = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_b = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_c = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_c = "Output for relay/solenoid."
+ pwm_opt_freq_c = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_c = "Output is on when the table/curve is above this number."
+ pwm_offbelow_c = "Output is off when the table/curve is below this number."
+ pwm_opt_load_c = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_c = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_d = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_d = "Output for relay/solenoid."
+ pwm_opt_freq_d = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_d = "Output is on when the table/curve is above this number."
+ pwm_offbelow_d = "Output is off when the table/curve is below this number."
+ pwm_opt_load_d = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_d = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_e = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_e = "Output for relay/solenoid."
+ pwm_opt_freq_e = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_e = "Output is on when the table/curve is above this number."
+ pwm_offbelow_e = "Output is off when the table/curve is below this number."
+ pwm_opt_load_e = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_e = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_f = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_f = "Output for relay/solenoid."
+ pwm_opt_freq_f = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_f = "Output is on when the table/curve is above this number."
+ pwm_offbelow_f = "Output is off when the table/curve is below this number."
+ pwm_opt_load_f = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_f = "Chooses between a 3D mapped table or a 2D curve."
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll_id = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ canpwm_clk = "Clock frequency on expansion board. See documentation."
+ canpwm_pre = "Prescaler on expansion board. See documentation."
+ canpwm_div = "Divider on expansion board. See documentation."
+ enable_pollADC= "Enables capturing analogue inputs from expansion board."
+ canadc_opt1 = "Enables this group of analogue inputs."
+ canadc_id1 = "CANid of expansion board."
+ canadc_tab1 = "Table number on expansion board."
+ canadc_off1 = "Data offset on expansion board."
+ can_poll_id_ports = "CANid of expansion board for digital inputs/outputs."
+ poll_tableports = "Table number on expansion board."
+ enable_pollports_digin = "Enables using digital inputs from expansion board."
+ can_poll_digin_offset = "Data offset on expansion board."
+ enable_pollports_digout = "Enables using on/off outputs on expansion board."
+ can_poll_digout_offset = "Data offset on expansion board."
+ enable_pwmout = "Enables sending PWM/pulsed outputs to expansion board."
+ enable_pwmout255 = "Forces PWM duty cycle to 0-255 range.\ne.g. generic PWMs operate on a 0-100 scale, but your remote device might require a 0-255 scale."
+ can_pwmout_id = "CANid of expansion board."
+ can_pwmout_tab = "Table number on expansion board."
+ can_pwmout_offset = "Data offset on expansion board."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+
+ can_enable_on = "Master enable/disable for all CAN polling and broadcasting."
+ vss1_can_id = "CANid of expansion board."
+ vss1_can_table = "Table number on expansion board."
+ vss1_can_offset = "Data offset on expansion board."
+ vss1_can_size = "How the data is stored on the expansion board. See documentation."
+ vss2_can_offset = "Data offset on expansion board."
+ vss2_can_size = "How the data is stored on the expansion board. See documentation."
+ gear_can_offset = "Data offset on expansion board."
+ vss3_can_offset = "Data offset on expansion board. Uses same size as VSS1"
+ vss4_can_offset = "Data offset on expansion board. Uses same size as VSS2"
+
+ opt142_rtc = "Enables the optional on-board real time clock or selects a clock on an expansion board via CAN."
+ rtc_trim = "Applies a trim to correct for slow/fast running clock."
+ can_poll_id_rtc = "CANid of expansion board."
+ poll_table_rtc = "Table number on expansion board."
+ poll_offset_rtc = "Data offset on expansion board."
+
+ can_poll2_ego2 = "Enables collecting EGO/AFR from innovate widebands on expansion board."
+ can_poll2_egolag = "Enables or disables the 'lag factor' smoothing for EGO data collected from a CAN device. Typically set to Off."
+ can_ego_id = "CANid of expansion board."
+ can_ego_table = "Table number on expansion board."
+ can_ego_offset = "Data offset on expansion board."
+ can_poll2_gps = "Whether to enable CAN polling for GPS data."
+ can_gps_id = "CANid of expansion board."
+ can_gps_table = "Table number on expansion board."
+ can_gps_offset = "Data offset on expansion board."
+ can_poll2_vss = "How VSS data is captured:\nPoll = use polling\nListen = CAN receiving will be configured to listen for messages."
+
+ cel_opt_on = "Enables sensor checking feature."
+ cel_port = "Output for warning lamp.\nIt is STRONGLY SUGGESTED that a lamp be connected when the CEL feature is used."
+ cel_opt_flash = "Selects whether CEL lights up solidly or flashes codes to aid diagnostics.\n\nNumber of flashes and fault:\n2=MAP 3=MAT 4=CLT 5=TPS 6=BATT 7=AFR0 8=SYNC 9=EGT 10=FLEX 11=MAF 12=KNOCK 13=CAM 14=OIL 15=FUELPRESS 16=EGTSHUT 17=AFRSHUT"
+ cel_opt_when = "Do you want the light on when the engine is off?"
+ cel_runtime = "Period after-start before sensors are checked."
+ cel_opt2_map = "Enables checking of the MAP sensor."
+ map_minadc = "Minimum raw ADC 0-1023 input allowed."
+ map_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ map_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ map_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_mat = "Enables checking of the MAT sensor."
+ mat_minadc = "Minimum raw ADC 0-1023 input allowed."
+ mat_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ mat_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_clt = "Enables checking of the CLT sensor."
+ clt_minadc = "Minimum raw ADC 0-1023 input allowed."
+ clt_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ clt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_tps = "Enables checking of the TP sensor."
+ tps_minadc = "Minimum raw ADC 0-1023 input allowed."
+ tps_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ tps_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+
+ cel_opt2_batt = "Enables checking of the battery voltage input."
+ batt_minv = "Minimum voltage allowed."
+ batt_maxv = "Maximum voltage allowed."
+ batt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_afr0 = "Enables checking of the EGO/AFR input."
+ afr_min = "Minimum AFR allowed."
+ afr_max = "Maximum AFR allowed."
+ afr_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ afr_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_sync = "Enables checking for sync-losses."
+ cel_synctol = "Set CEL above this many sync-losses."
+ cel_opt2_egt = "Enables checking of the EGT input."
+ egt_minvalid = "Minimum EGT allowed."
+ egt_maxvalid = "Maximum EGT allowed."
+ egt_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ egt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt3_flex = "Enables checking of the Flex-fuel sensor input."
+ cel_opt_adc = "Sets gauge 'status5' to record 'fluctuations' number or raw ADC count for the chosen sensor input."
+ cel_opt_stat = "Selects input for 'status5' value. Observe the dash gauge and examine datalogs to determine sensible min/max fluctuation limits and ADC counts for each sensor input in turn."
+ cel_action1_map = "Whether an invalid MAP reading will trigger limp mode."
+ cel_action1_map_an = "Whether an invalid MAP reading will enable the fallback MAP table."
+
+ cel_action1_mat = "Whether an invalid MAT reading will trigger limp mode."
+ cel_mat_default = "If MAT fails, assume MAT is this temperature."
+ cel_action1_clt = "Whether an invalid CLT reading will trigger limp mode."
+ cel_clt_cold = "If CLT fails, start engine using this assumed temperature."
+ cel_clt_warm = "If CLT fails, assume this is the warmed up engine temperature."
+ cel_warmtime = "If CLT fails, assume engine takes this long to warmup."
+ cel_action1_tps = "Whether an invalid TPS reading will trigger limp mode."
+ cel_action1_batt = "Whether an invalid battery voltage reading will trigger limp mode."
+ cel_action1_ego = "Whether an invalid AFR/EGO reading will trigger limp mode."
+ cel_action2_flex = "Whether an invalid Flex-fuel reading will trigger limp mode."
+ cel_action2_egt = "Whether an invalid EGT reading will trigger limp mode."
+ cel_revlim = "Rev limiter when in limp mode."
+ cel_overboost = "Maximum boost when in limp mode. Typically 102kPa for no boost."
+ cel_boost_duty = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_boost_duty2 = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_retard = "Retard timing by this amount when in limp mode."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Whether to test a single coil output or operate in sequence."
+ testsel_coil = "Whether to test a single coil output or operate in sequence."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Whether to test a single injector output or operate in sequence."
+ testsel_inj = "Whether to test a single injector output or operate in sequence."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ feature3_pw4x = "Only used on low-revving large engines for extra-long pulsewidths. MUST also set PW4X in Project Properties."
+ feature3_n2oin = "Normally this should be on so that the input responds to a +12V signal. Ensure the JP8 is NOT installed on the MS3X card."
+
+ fuelcalctime = "How often to perform fuel consumption calculations."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+;curves help text
+ oil_press_min = "For each RPM setting, set the min and max oil pressures allowed at that RPM.\nOutside of the limits the warning light will be illuminated.\nIt is suggested that the first row be 0 RPM. Set the Min and Max limits above 0 so that the oil warning light is tested on each start."
+ hpte_afrs = "The curve specifies AFR decrease (richer) vs. time.\nIt is normal for the first row to be 0, 0.\nThe second row typically specifies when the enrichment should begin. e.g. 7, 0. This means that there is no change from 0-7 seconds as both are set to a 0 decrease in AFR.\nThe third row onwards specify the richening."
+ fp_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ fp_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ dualfuel_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ dualfuel_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ fpd_duty = "The values in the table specify the duty cycle percent of the control output to the pump or controller based on the RPM/load axes."
+ alt_dutyout = "This allows for non-linear control within alternators. It also allows you to restrict the output duty range."
+ alternator_targvolts = "Specifies the target charge voltage related to the battery temperature.\nOnly works if you have a battery temperature sensor."
+ alternator_dutyv = "Specifies the control duty to achieve the desired voltage."
+ alternator_freqv = "Specifies the control frequency to achieve the desired voltage."
+ pwm_duties_a = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_b = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_c = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_d = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_e = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_f = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_yaxis_a = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_b = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_c = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_d = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_e = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_f = "Specifies the output duty or frequency based on the input 'load' value."
+ tcslipy = "Sets the desired slip% threshold at different knob settings 0-100%"
+ tc_knob = "This enables a link to a Generic Sensor input to enable you to set the slip threshold. Configure the Generic Sensor to give 0-100 as the linear output."
+ blendy1 = "Sets a percentage blend from VE1 (0%) to VE2 (100%) based on the input X axis value."
+ blendy2 = "Sets a percentage blend from Spk1 (0%) to Spk2 (100%) based on the input X axis value."
+ blendy3 = "Sets a percentage blend from the combined VE1+2 (0%) to VE3+4 (100%) based on the input X axis value."
+ blendy4 = "Sets a percentage blend from the combined Spk1+2 (0%) to Spk3+4 (100%) based on the input X axis value."
+ blendy5 = "Sets a percentage blend from AFR1 (0%) to AFR2 (100%) based on the input X axis value."
+ blendy6 = "Sets a percentage blend from Boost1 (0%) to Boost2 (100%) based on the input X axis value."
+ blendy7 = "Sets a percentage blend from Cranking Pulse1 (0%) to Cranking Pulse2 (100%) based on the input X axis value."
+ blendy8 = "Sets a percentage blend from Tables1 (0%) to Tables2 (100%) based on the Flex fuel percentage value.\ne.g. set 0% table for 10% flex and 100% table for 85% flex."
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ launch_retard = "The curve sets the degrees of ignition subtracted from the normal timing (i.e. retarding it) against time after launch.\nThis can be used to launch at higher RPMs without blowing the tyres away and then feeding the timing back in.\nBe sure to end the curve with zero degrees of retard to use normal timing for the rest of the run."
+ cl_idle_timing_advance_deltas = "Uses timing to assist closed-loop idle control.\nThe X axis of the curve is RPMs +/- the target. i.e. if the target was 800, then -75 in the curve means 800-75 = 725RPM\nThe Y axis of the curve is timing +/-. i.e. + means add timing, - means subtract timing.\nTypically, use positive (advanced) timing when RPMs are below target and negative (retarded) timing when RPMs are above target."
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ accel_mapdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ accel_tpsdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ maeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ taeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_mapdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_tpsdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ knock_starts = "Set the crank angle (for each cylinder) when the knock system starts 'listening' for knock.\nKnock usually occurs in the time after TDC."
+ knock_durations = "Set the number of crank degrees that the knock system 'listens' for knock."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ knock_upscale = "Allows the threshold to be scaled up on a cold engine. Frequently a cold engine is noiser and may cause false alarms without a raised threshold."
+ tc_perfect_vss = "The perfect run traction control sets a curve of the 'best' speed (VSS) that you can run for each time-point after launch.\nIf your VSS is reporting a higher number than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy is typically applied early in a run only.\nNote that VSS based traction control is outlawed in some race classes."
+ tc_perfect_rpm = "The perfect run traction control sets a curve of the 'best' RPM that you can run for each time-point after launch.\nIf your RPM is higher than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy only makes sense in first gear. Set the final row in the table to just earlier than the time when you expect to shift with an RPM higher than your maximum RPM."
+ tc_retard = "Sets the number of degrees of timing retard to apply based on the amount of wheelspin multiplied by how long."
+ tc_spkcut = "Sets the amount of spark cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_nitrous = "Sets the amount of nitrous cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_boost = "Sets the amount to reduce the boost target by based on the amount of wheelspin multiplied by how long."
+ tc_boost_duty_delta = "Sets the amount to change the boost duty by based on the amount of wheelspin multiplied by how long."
+ tc_addfuel = "Sets the amount of fuel to add based on the amount of wheelspin multiplied by how long."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ primePWTable2 = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ crankPctTable2 = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ asePctTable2 = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ aseCntTable2 = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ wueBins2 = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ dwellrpm_dwell = "For Saab Trionic ignition, this allows the dwell time to be varied with RPM."
+ boostvss_duty = "For open-loop boost control, this specifies a solenoid duty based on the wheel speed on VSS1 or VSS2."
+ boostvss_target = "For closed-loop boost control, this specifies a target boost level based on the wheel speed on VSS1 or VSS2.\nThis can be used to limit boost in lower gears to reduce the change of wheelspin or loss of control."
+ n2o1_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o2_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o1_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o2_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o1_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ n2o2_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ smallpw0 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw1 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw2 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw3 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ opentimepct0 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct1 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct2 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct3 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ boost_timed_pct = "Allows boost to be feathered in after launching.\n100% means use normal boost settings."
+ map_sample_timing = "When timed MAP sampling is enabled, this specifies the angle BTDC for each cylinder when MAP sampling should begin.\nExperimentation and use of the Diagnostics-MAP logger will be required to determine the best settings."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC2 = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC2 = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ XAcc = "This is the percentage of the fuel (0-100%) that goes into the wall puddle while accelerating (fuel pulse width increasing), with the remainder of the squirt going directly into the cylinder to be burned."
+ XDec = "This is the percentage of fuel (0-100%) going into the wall puddle while decelerating (fuel pulse width decreasing),"
+ TauAcc = "This is the time factor vs. RPM used during acceleration."
+ TauDec = "This is the time factor vs. RPM used during deceleration."
+ XClt = "Coolant temperature (CLT) correction to the puddling factor X."
+ TauClt = "Coolant temperature (CLT) correction to the time factor Tau."
+ MapThreshXTD = "X-Tau accel tables are used when MAPdot is positive or less negative than this start transition threshold. In-between a blend is used."
+ MapThreshXTD2 = "X-Tau Decel tables are used when MAPdot is more negative than this finish transition threshold. In-between a blend is used."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load when Idle-Advance is active. Typically the curve will ramp from low advance at low load to more advance at higher loads to stabilise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_mappoint = "Above this MAP value, tuning switches from MAP based to TPS based. Default is 90% and works for most engines."
+ ITB_load_idletpsthresh = "A minimum TPS value that must be met to allow the switch to TPS based tuning to occur. This is sometimes useful in idle tuning."
+; tables
+ ego_auth_table = "Specifies the EGO authority limit across the range of engine operation condition. Setting zero means there will be no change in fuel based on the lambda sensor i.e. open-loop mode. "
+ ltt_table1 = "This read-only table shows the long-term-terim values the ECU has calculated based on lambda sensor feedback."
+ alphaMAPtable = "The best-guess MAP value from an alpha-N (TPS vs. RPM) lookup table. This is primarily used as a fallback in case of MAP sensor failure."
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ vvt_timing1 = "Desired VVT (relative) timing vs RPM/load"
+ vvt_timing2 = "Desired VVT (relative) timing vs RPM/load"
+ als_rifuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag idle mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_fuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_sparkcut = "The spark-cut percentage vs. RPM/load when in anti-lag mode.\nThis drops sparks in a round-robin manner."
+ als_timing = "The ignition advance vs. RPM/load when in anti-lag mode.\nTypically this will be -20 to -50 for ATDC timing."
+ als_addfuel = "The percentage of fuel to be added vs. RPM/load when in anti-lag mode."
+ waterinj_duty = "The duty cycle of the output vs RPM/load"
+ maxafr1_diff = "The maximum AFR difference allowed on the leaner side. This compares the AFR target table and the wideband lambda sensor reading.\nTypically a larger allowance is allowed under low load and low RPMs. High load and into boost require tight control to guard against engine-damaging lean conditions."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate main fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable4 = "The alternate secondary fuel table (4). Can be used as a blended and switched table from no.1+2. Larger VE values mean more fuel, smaller mean less fuel."
+ idleve_table1 = "Sets the VE values when 'idle-VE' is active."
+ idleve_table2 = "Sets the VE values when 'idle-VE' is active."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate main ignition advance table (3). Can be used as a switched table from no.1"
+ advanceTable4 = "The alternate secondary ignition advance table (4). Can be used as a blended and switched table from no.1+2."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ boost_ctl_pwm_targets2 = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_cl_pwm_targs2 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_load_targets2 = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ inj_trima = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimb = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimc = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimd = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trime = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimf = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimg = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimh = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimi = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimj = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimk = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_triml = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimm = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimn = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimo = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimp = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_timing = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ inj_timing_sec = "The injector timing (for secondary staged injectors) in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ spk_trima = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimb = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimc = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimd = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trime = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimf = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimg = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimh = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimi = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimj = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimk = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_triml = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimm = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimn = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimo = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimp = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ narrowband_tgts = "The target narrowband lamba sensor voltage vs. load/RPM"
+ vsslaunch_rpm = "RPM specifies the hard limiter RPM for given wheel speed.\nRetard is the retard to ignition advance for given wheel speed.\nWhen wheel speed exceeds maximum speed on curve, the launch control is disabled until speed drops below the re-arm setting."
+ fuelcut_fuelon_upper_rpmdot = "When revs are falling more quickly than this RPMdot value the initial RPM is used for fuel return.\nIn-between upper and lower RPMdot values, the return RPM is interpolated. This number must be larger than the 'lower' RPMdot setting.\nTypically 1000."
+ fuelcut_fuelon_lower_rpmdot = "When revs are falling more slowly than this RPMdot value the lower RPM is used for fuel return. This will happen when coasting down.\nIf revs are falling more quickly then any return transitions will be cancelled and the return RPM will be raised.\n\nSet this so that clutch-in during fuel cut does not stall.\nTypically 500.\n\n(The RPMdot shows negative in datalogs when revs are falling, so a setting of 500 means less negative than -500)"
+ egoAlgorithm_delay_table = "Specifies whether to use IGN events or delay table to determine how often EGO runs"
+ ego_delay_table = "Table which specifies the delay between runs of the EGO algorithm in ms"
+ ego_delay_rpms = "RPM (x) axis of the EGO delay table."
+ ego_delay_loads = "Load (y) axis of the EGO delay table."
+ ego_sensor_delay = "Static value representing O2 sensor response time"
+ generic_pid_flags_a_on = "Generic Closed-Loop channel A on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_a_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_a_direction = "Output polarity for PID output"
+ generic_pid_flags_a_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_a_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_flags_b_on = "Generic Closed-Loop channel B on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_b_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_b_direction = "Output polarity for output"
+ generic_pid_flags_b_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_b_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_pwm_opts_freq_a = "Frequency to use for PWM output"
+ generic_pid_pwm_opts_freq_b = "Frequency to use for PWM output"
+ generic_pid_pwm_outs_a = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_pwm_outs_b = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_upper_inputlim_a = "Maximum value for feedback input (PV)"
+ generic_pid_upper_inputlim_b = "Maximum value for feedback input (PV)"
+ generic_pid_lower_inputlim_a = "Minimum value for feedback input (PV)"
+ generic_pid_lower_inputlim_b = "Minimum value for feedback input (PV)"
+ generic_pid_output_upperlim_a = "Maximum output duty"
+ generic_pid_output_upperlim_b = "Maximum output duty"
+ generic_pid_output_lowerlim_a = "Minimum output duty"
+ generic_pid_output_lowerlim_b = "Minimum output duty"
+ generic_pid_rpms_a = "RPM axis bins for lookup table"
+ generic_pid_rpms_b = "RPM axis bins for lookup table"
+ generic_pid_loadvals_a = "Load axis bins for lookup table"
+ generic_pid_loadvals_b = "Load axis bins for lookup table"
+ generic_pid_targets_a = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_targets_b = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_control_interval_a = "Time in milliseconds between each run of PID control loop"
+ generic_pid_control_interval_b = "Time in milliseconds between each run of PID control loop"
+ generic_pid_P_a = "Proportional gain"
+ generic_pid_P_b = "Proportional gain"
+ generic_pid_I_a = "Integral gain"
+ generic_pid_I_b = "Integral gain"
+ generic_pid_D_a = "Derivative gain"
+ generic_pid_D_b = "Derivative gain"
+ generic_pid_load_offset_a = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_a = "Variable used as feedback input (PV)"
+ generic_pid_load_offset_b = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_b = "Variable used as feedback input (PV)"
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+
+ dwell_table_values = "Specifies the base dwell time in milliseconds based on RPM/load.\nThis can be used to reduce dwell where possible to increase spark-plug life.\nAreas in the tune of very rich or very dilute mixture will need most spark energy.\n(Battery voltage correction is applied afterwards.)"
+ spkadj_max = "Sets a limit on the maximum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a positive number, meaning advance."
+ spkadj_min = "Sets a limit on the minimum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a negative number, meaning retard."
+
+ cranktaper_pct = "Allows cranking fuel to be tapered down during extended cranking to reduce flooding.\n100% means normal cranking pulsewidth."
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ scatterRuntimeEnabled = "On = Enables a faster method of collecting realtime data from MS3. Off = use previous slower method for realtime data."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp16 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp32 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp48 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ can_rcv_id1 = "11bit CAN identifier to listen for. (See also Offset)"
+ can_rcv_var1 = "Megasquirt variable to store resulting data to.\nThis can then be used by other subsystems."
+ can_rcv_off1 = "Offset of data within each 8-byte CAN message.\nFor systems sending sequential messages, you need to calculate the actual identifier and offset.\ne.g. Take the offset and divide by 8. e.g. offset = 19. Divide by 8 gives 2 remainder 3. Add 2 to the identifier and the offset is 3."
+ can_rcv_size1 = "Endianism, data size and sign.\nB = Big endian\n (Motorola, high byte first)\nL = Little endian\n (Intel, low byte first)\n# = # bytes\nU = Unsigned\nS = Signed"
+ can_rcv_mult1 = "Result = ((raw_data * mult) / divide) + add"
+ pwm_opt_load_a_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_b_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_c_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_d_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_e_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_f_offset = "This selects the 'load' axis on the table or curve."
+ iobox_opta1 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id1 = "Base CAN identifier used by IO-box."
+ iobox_optb1vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta1adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta1canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta1canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta1canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb1tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb1inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb1outrate = "Rate to send outputs to IO-box."
+ iobox_opta2 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id2 = "Base CAN identifier used by IO-box."
+ iobox_optb2vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta2adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta2canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta2canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta2canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb2tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb2inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb2outrate = "Rate to send outputs to IO-box."
+ iobox_opta3 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id3 = "Base CAN identifier used by IO-box."
+ iobox_optb3vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta3adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta3canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta3canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta3canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb3tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb3inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb3outrate = "Rate to send outputs to IO-box."
+ iobox_opta4 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id4 = "Base CAN identifier used by IO-box."
+ iobox_optb4vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta4adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta4canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta4canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta4canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb4tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb4inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb4outrate = "Rate to send outputs to IO-box."
+ pitlim_opt_on = "Enables Pit Lane Limiter"
+ pitlim_opt_mode = "Fixed = one fixed limiter speed\nHolding = takes speed when button pressed as limiter and holds it."
+ pitlim_opt_retard = "Whether to use spark retard."
+ pitlim_opt_spkcut = "Whether to use spark cut. (Can cause backfires and exhaust damage.)"
+ pitlim_opt_fuelcut = "Whether to use fuel cut."
+ pitlim_opt_fuelprog = "Whether to use a progressive fuel cut (sequential only.)"
+ pitlim_opt_vssrpm = "Whether VSS or RPM is used as the hold target."
+ pitlim_enin = "Switch input."
+ pitlim_speed = "Fixed speed limit."
+ pitlim_retardmax = "Maximum allowed spark retard."
+ pitlim_sensitivity = "Adjust tracking sensitivity to adjust limiter window. Initially the 0% fuel/spark cut is applied at the limit and full cut is applied at the limit+range. If the speed is above the limit, the lower limiting point is lowered slowly."
+ pitlim_speed_range = "Control range of speed to apply limiters across. 5mph recommended as a starting point. Setting the range too small will cause oscillation."
+ pitlim_rpm_range = "Control range of RPM to apply limiters across. Setting the range too small will cause oscillation."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+ llstg_in = "The ground-switch button input to arm the line-lock staging system."
+ llstg_out = "The relay output to control the line-lock."
+ can_bcast_user_id = "Decimal message identifier to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+ u08_debug38_1 = "This enables an experimental feature to record engine trigger times to sensors9-16 to monitor per-cylinder effort. Only for developers."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = shiftlight, "Shift Light"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = fan_control, "Fan Control"
+ subMenu = tcluparams, "Torque Convertor Lockup"
+ subMenu = alternator, "Alternator Control"
+ subMenu = std_separator
+ subMenu = barometerCorr, "Barometric Correction",0, {baroCorr}
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable, "MAF Flow Curve", 0, {!feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {feature7_mafmat && ((algorithm == 5) || (algorithm2 == 4) || (algorithm2 == 5))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = iopinlist, "Feature List Showing I/O pins"
+ subMenu = pinusage, "I/O pins List Showing Usage"
+ subMenu = pinusagecan, "Expansion I/O pins List/Usage"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injsettings, "Injector Dead-Time/PWM"
+#if CYL_12_16_SUPPORT
+ subMenu = injsettingsb, "Injector Dead-Time/PWM (9-16)"
+#endif
+ subMenu = smallpw, "Injector Small Pulsewidths"
+#if CYL_12_16_SUPPORT
+ subMenu = smallpwb, "Injector Small Pulsewidths (9-16)"
+#endif
+ subMenu = inj_timing_tbl, "Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_tbl, "Secondary Injector Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "AFR/&EGO Control"
+#if CYL_12_16_SUPPORT
+ subMenu = egocont9_16, "AFR/EGO (9-16)"
+#endif
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { (!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr) || ( N2Oopt_2 && N2Oopt_4) }
+ subMenu = ego_auth_Tbl, "EGO Authority Table", 0, {egoType && egoAlgorithm_auth }
+ subMenu = ego_delay_Tbl, "EGO Delay Table", 0, {egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ subMenu = narrowband_tgts_tbl, "Narrowband EGO targets", 0, { egoType == 1 }
+ subMenu = maxafr, "AFR safety system"
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { (algorithm2 != 0) }
+ subMenu = veTable3Tbl, "Fuel VE Table 3", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = veTable4Tbl, "Fuel VE Table 4", 0, { (algorithm2 != 0) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = std_separator
+ subMenu = inj_trim1Tbl, "Injector 1 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
+ subMenu = inj_trim2Tbl, "Injector 2 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
+ subMenu = inj_trimad, "Cyl 1-4 Trims", 7, { hardware_fuel && sequential_trim_on_off }
+ subMenu = inj_trimeh, "Cyl 5-8 Trims", 7, { hardware_fuel && (nInjectors > 4) && sequential_trim_on_off }
+
+#if CYL_12_16_SUPPORT
+ subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off }
+ subMenu = inj_trimmp, "Cyl 13-16 Trims", 7, { hardware_fuel && (nInjectors > 12) && sequential_trim_on_off }
+#endif
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { sequential == 0 }
+ subMenu = std_separator
+ subMenu = fuelpump, "Fuel Pump and Pressure"
+ subMenu = fp_temp_curve, "Temperature Adjustment", 0, {fueltemp1 && fueltemp1_corr}
+ subMenu = fp_press_curve, "Pressure Adjustment", 0, {(fp_opt_mode != 2) && fp_press_in && (fp_opt_reg == 2)}
+ subMenu = fp_safety, "Fuel Pressure Safety", 0, {fp_press_in}
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options/Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = dwellrpm_curve, "Dwell vs RPM", 0, {spk_mode0 > 1 && dwellmode == 2 && spk_conf2_dwell}
+ subMenu = dwell_tbl, "Dwell Table", 0, {(spk_mode0 > 1) && (dwellmode == 0) && spk_conf2_dwelltbl}
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = noisefiltering2, "Noise Filtering", 0
+ subMenu = std_separator
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = knockSettings4, "Knock Sensor Parameters", 0, {knk_option && (knk_option_an == 3)}
+ subMenu = knockSettings2, "Knock Window Settings", 0, {knk_option}
+ subMenu = knockupscale_curve, "Knock Coolant Scaling", 0, {knk_option}
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, { (spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk) }
+ subMenu = ignitionTbl4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = spk_trimad, "Cyl 1-4 Trims", 8, { spk_mode3_trim }
+ subMenu = spk_trimeh, "Cyl 5-8 Trims", 8, { spk_mode3_trim && (nCylinders > 4)}
+#if CYL_12_16_SUPPORT
+ subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)}
+
+ subMenu = spk_trimmp, "Cyl 13-16 Trims", 8, { spk_mode3_trim && (nCylinders > 12)}
+#endif
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking/Startup Settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse", 0
+ subMenu = cranktaper_curvet, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 0}
+ subMenu = cranktaper_curvee, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 1}
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = primingPW2, "Priming Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_prime) }
+ subMenu = crankingPW2, "Cranking Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_crank) || alternate_blend }
+ subMenu = nestedasePct2, "AfterStart Enrichment (ASE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = aseTaper2, "AfterStart Enrichment (ASE) Taper 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = nestedwarmup_curve2, "Warmup Enrichment (WUE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_wue) }
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {IdleCtl && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target Curve", 0, { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up", 0
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = cl_idle_timing_curve, "Idle RPM Timing Correction Curve", 0, { idle_special_ops_timing_assist }
+ subMenu = idleVe, "Idle VE Settings"
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel",0, { !(AE_options & 0x1) }
+ subMenu = AEpump_settings, "Accel-Pump Accel Enrichment Settings",0, { AE_options & 0x1 }
+ subMenu = AEtime_settings2, "Time-Based Accel 2",0, { !(AE_options & 0x1) && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = AEpump_settings2, "Accel-Pump Accel Enrichment Settings 2",0, { AE_options & 0x1 && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = tpswot_curve, "TPS WOT Curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEcombi1, "EAE Sucked/Adhered Coefficients", 0, { EAEOption == 1 }
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = std_separator
+ subMenu = XAccTable, "Puddling Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XDecTable, "Puddling Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauAccTable, "Time Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauDecTable, "Time Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { EAEOption == 4 }
+ subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { EAEOption == 4 }
+
+ menu = "Boost/VVT"
+ subMenu = boost, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl)}
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Bias Duty Table 1", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boost_timed_curve, "Boost Delay (Timed From Launch)",0, { boost_ctl_settings_on && launch_opt_on && boost_feats_timed }
+ subMenu = boostvss_curve, "Boost Control vs Speed", 0, { (boost_ctl_settings_on) && ((boost_vss == 1) || (boost_vss == 2))}
+ subMenu = std_separator
+ subMenu = boostctlSettings2, "Boost Control Settings 2", 0 , {boost_ctl_settings_on}
+ subMenu = boostctlDutys2, "Boost Control Duty Table 2", 0, { boost_ctl_settings_on && (((!boost_ctl_settings_cl) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && !boost_ctl_settings_cl2)) }
+ subMenu = boostctlTargs2, "Boost Control Target Table 2", 0, { boost_ctl_settings_on && ((boost_ctl_settings_cl && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && boost_ctl_settings_cl2)) }
+ subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 }
+ subMenu = std_separator
+ subMenu = antilag, "Turbo Anti-lag (ALS)"
+ subMenu = antilagtables, "Turbo Anti-lag Tables", 0, {als_in_pin}
+ subMenu = als_rifuelcut_tbl, "Turbo Anti-lag Roving Idle", 0, {als_in_pin && als_opt_ri && hardware_fuel && sequential}
+ subMenu = std_separator
+ subMenu = vvtparams, "VVT Settings"
+ subMenu = vvt_timing1_tbl, "VVT Intake Table", 0, {vvt_opt1_on && vvt_opt2_pid2}
+ subMenu = vvt_timing2_tbl, "VVT Exhaust Table", 0, {vvt_opt1_on && vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2)}
+ subMenu = pwm_duties_Tbl_vvt, "VVT On/Off Table", 0, {vvt_opt1_on && !vvt_opt2_pid2}
+
+ menu = "Table choices"
+ subMenu = tablesw, "Table Switch/Dual Fuel"
+ subMenu = dualfuel_temp_curve, "Temperature Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_temp) }
+ subMenu = dualfuel_press_curve, "Pressure Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_press) }
+ subMenu = injsettings2, "Alt. Injector Dead-time/PWM 2", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+#if CYL_12_16_SUPPORT
+ subMenu = injsettingsb2, "Alt. Injector Dead-time/PWM 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+#endif
+ subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+#if CYL_12_16_SUPPORT
+ subMenu = smallpw2b, "Alt. Injector Small Pulsewidths 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+#endif
+ subMenu = std_separator
+ subMenu = blend1menu, "Blend Curve (1) VE1->2", 0, {algorithm2 && (loadCombine == 2)}
+ subMenu = blend2menu, "Blend Curve (2) Spk1->2", 0, {IgnAlgorithm2 && (loadCombineign == 1)}
+ subMenu = blend3menu, "Blend Curve (3) VE1+2->3+4", 0, {f5_0_tsf && (f5_0_tsf_opt == 0) && (tsw_pin_f == 14)}
+ subMenu = blend4menu, "Blend Curve (4) Spk1+2->3+4", 0, {f5_0_tss && (f5_0_tss_opt == 0) && (tsw_pin_s == 14)}
+ subMenu = blend5menu, "Blend Curve (5) AFR1->2", 0, {tsw_pin_afr == 14}
+ subMenu = blend6menu, "Blend Curve (6) Boost1->2", 0, {(boost_feats_tsw == 14) && boost_ctl_settings_on}
+ subMenu = blend7menu, "Blend Curve (7) Crank%1->2", 0, {alternate_blend}
+ subMenu = blend8menu, "Blend Curve (8) Flex Blending", 0, { dualfuel_sw_on && (dualfuel_opt_mode == 2) }
+
+ menu = "Advanced Engine"
+ subMenu = speedsensors, "Speed and Gear Sensors"
+ subMenu = ss, "Shaft Speed Sensors"
+ subMenu = egt, "EGT/Thermocouple Settings"
+ subMenu = sensors, "Generic Sensor Inputs"
+ subMenu = accelerometer, "Accelerometer Parameters"
+ subMenu = tcsettings, "Traction Control Settings"
+ subMenu = tc_perfect_curve, "Traction Control - Perfect Run VSS", 0, {tc_opt_on && (tc_opt_method == 0)}
+ subMenu = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM", 0, {tc_opt_on && (tc_opt_method == 2)}
+ subMenu = tcslip_menu, "Traction Control - External Slip% Input", 0, {tc_opt_on && (tc_opt_method == 1) && tc_opt_slipcurve}
+ subMenu = tc_curves, "Traction Control Reactions", 0, {tc_opt_on}
+ subMenu = std_separator
+ subMenu = launch, "Launch / 2-step / 3-step / T-brake"
+ subMenu = launch_retard_time, "Timed Retard After Launch", 0, {launch_opt_on && launch_opt_retard}
+ subMenu = vsslaunch, "Speed-based Launch Control"
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = nitrous, "&Nitrous System"
+ subMenu = nitrous_curves_time, "Nitrous - Time-Based Progressive",0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) }
+ subMenu = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 0)}
+ subMenu = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 2)}
+ subMenu = waterinj, "Water Injection"
+ subMenu = hpte, "High Power Time Enrichment"
+ subMenu = oilpress, "Oil Pressure"
+ subMenu = pitlimiter, "Pit Lane Limiter"
+ subMenu = std_separator
+ subMenu = ms3_port_edit_wrap, "Programmable On/Off Outputs"
+ subMenu = gen_pwm_a, "Generic PWM output A"
+ subMenu = gen_pwm_b, "Generic PWM output B"
+ subMenu = gen_pwm_c, "Generic PWM output C"
+ subMenu = gen_pwm_d, "Generic PWM output D"
+ subMenu = gen_pwm_e, "Generic PWM output E", 0, {!(vvt_opt1_on)}
+ subMenu = gen_pwm_f, "Generic PWM output F"
+ subMenu = std_separator
+ subMenu = generic_pid_a, "Generic Closed-Loop A"
+ subMenu = generic_pid_b, "Generic Closed-Loop B"
+
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+ subMenu = veTable1Map, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { (algorithm2 != 0) && (algorithm2 != 5) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode) }
+ subMenu = veTable4Map, "Fuel VE Table &4", 0, { ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) && (algorithm2 != 0) }
+
+ subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType > 1 }
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { (egoType > 1) && ((!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr)) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "Ignition Table 2", 0, { (IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_fuel) }
+ subMenu = ignitionMap4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = boostctlDtyMap2, "Boost Control Duty Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap2, "Boost Control Target Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator
+ subMenu = inj_timing_map, "Sequential Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_map, "Sequential Injector Secondary Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+
+ menu = "CAN-bus/ Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting",0, {can_enable_on}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_enable_on && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_enable_on}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_3,"CAN Realtime Data Broadcasting 3", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_4,"CAN Realtime Data Broadcasting 4", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_rcv, "CAN Receiving", 0, {can_enable_on}
+ subMenu = canvss, "CAN VSS, Gear",0, {can_enable_on}
+ subMenu = canego, "CAN EGO, GPS",0, {can_enable_on}
+ subMenu = realtimeclock, "Real Time Clock"
+ subMenu = iobox, "IO-Box Settings"
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = checkengine, "Check Engine Light"
+ subMenu = limpmode, "Limp Mode", 0, {cel_opt_on}
+ subMenu = alphaMAPTbl, "Fallback MAP Table", 0, {cel_opt_on && cel_opt2_map && cel_action1_map && cel_action1_map_an}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = outputtest_io2, "Output Test Mode - I/O 2"
+ subMenu = outputtest_io3, "Output Test Mode - CAN I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+ subMenu = injseqtest, "Injector Sequential Testing"
+ subMenu = injspkonoff, "Inj/Spk Disabling Test Mode"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = special, "Special Options"
+ subMenu = std_separator
+ subMenu = lttrim, "Long Term Trim Settings"
+ subMenu = ltt_Table1Tbl, "Long Term Trim Table &1", 0
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+#endif
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Data Logging"
+ subMenu = sdcard_datalog, "SD Card Datalogging"
+ subMenu = std_ms3SdConsole, "Browse / Import SD Card",0, {log_style_on2 && (tsLocalCanId == tsCanId) }
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate", 0
+
+ menu = "Help"
+ subMenu = helpGeneral, "Megasquirt 3 Info"
+;-------------------------------------------------------------------------------
+
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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.
+
+;The offsets here must match the actual offsets in 'datax1' and include the 0x200 offset.
+cmdStopTestmode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x07"
+cmdtestiacoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0a"
+
+cmdskipinjoff= "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0b"
+cmdskipinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0c"
+cmdskipspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0d"
+
+cmdtestinjnorm = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x10"
+cmdtestinjbat = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x11"
+cmdtestinjsem = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x12"
+cmdtestinjseq = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x13"
+
+cmdtestiaccycle = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x18"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x92"
+
+cmdtest14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9f"
+
+cmdtesta0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa0"
+cmdtesta0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa2"
+cmdtesta0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa3"
+
+cmdtesta1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa4"
+cmdtesta1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa6"
+cmdtesta1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa7"
+
+cmdtesta2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa8"
+cmdtesta2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaa"
+cmdtesta2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xab"
+
+cmdtesta3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xac"
+cmdtesta3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xae"
+cmdtesta3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaf"
+
+cmdtesta4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb0"
+cmdtesta4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb2"
+cmdtesta4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb3"
+
+cmdtesta5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb4"
+cmdtesta5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb6"
+cmdtesta5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb7"
+
+cmdtesta6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb8"
+cmdtesta6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xba"
+cmdtesta6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbb"
+
+cmdtesta7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbc"
+cmdtesta7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbe"
+cmdtesta7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbf"
+
+cmdtestb0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc0"
+cmdtestb0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc2"
+cmdtestb0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc3"
+
+cmdtestb1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc4"
+cmdtestb1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc6"
+cmdtestb1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc7"
+
+cmdtestb2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc8"
+cmdtestb2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xca"
+cmdtestb2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcb"
+
+cmdtestb3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcc"
+cmdtestb3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xce"
+cmdtestb3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcf"
+
+cmdtestb4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd0"
+cmdtestb4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd2"
+cmdtestb4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd3"
+
+cmdtestb5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd4"
+cmdtestb5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd6"
+cmdtestb5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd7"
+
+cmdtestb6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd8"
+cmdtestb6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xda"
+cmdtestb6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdb"
+
+cmdtestb7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdc"
+cmdtestb7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xde"
+cmdtestb7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdf"
+
+cmdteste0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe0"
+cmdteste0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe2"
+cmdteste0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe3"
+
+cmdteste4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe4"
+cmdteste4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe6"
+cmdteste4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe7"
+
+cmdteste8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe8"
+cmdteste8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xea"
+cmdteste8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xeb"
+
+cmdtestecoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xec"
+cmdtestecpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xee"
+cmdtestecon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xef"
+
+cmdtestf0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf0"
+cmdtestf0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf2"
+cmdtestf0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf3"
+
+cmdtestf4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf4"
+cmdtestf4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf6"
+cmdtestf4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf7"
+
+cmdtestf8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf8"
+cmdtestf8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfa"
+cmdtestf8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfb"
+
+cmdtestfcoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfc"
+cmdtestfcpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfe"
+cmdtestfcon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xff"
+; CAN outs
+cmdtestcano0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x80"
+cmdtestcano0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x82"
+cmdtestcano0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x83"
+
+cmdtestcano1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x84"
+cmdtestcano1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x86"
+cmdtestcano1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x87"
+
+cmdtestcano2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x88"
+cmdtestcano2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8a"
+cmdtestcano2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8b"
+
+cmdtestcano3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8c"
+cmdtestcano3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8e"
+cmdtestcano3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8f"
+
+cmdtestcano4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x90"
+cmdtestcano4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x92"
+cmdtestcano4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x93"
+
+cmdtestcano5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x94"
+cmdtestcano5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x96"
+cmdtestcano5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x97"
+
+cmdtestcano6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x98"
+cmdtestcano6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9a"
+cmdtestcano6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9b"
+
+cmdtestcano7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9c"
+cmdtestcano7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9e"
+cmdtestcano7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9f"
+
+cmdtestcano8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa0"
+cmdtestcano8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa2"
+cmdtestcano8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa3"
+
+cmdtestcano9off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa4"
+cmdtestcano9pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa6"
+cmdtestcano9on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa7"
+
+cmdtestcano10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa8"
+cmdtestcano10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaa"
+cmdtestcano10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xab"
+
+cmdtestcano11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xac"
+cmdtestcano11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xae"
+cmdtestcano11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaf"
+
+cmdtestcano12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb0"
+cmdtestcano12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb2"
+cmdtestcano12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb3"
+
+cmdtestcano13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb4"
+cmdtestcano13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb6"
+cmdtestcano13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb7"
+
+cmdtestcano14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb8"
+cmdtestcano14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xba"
+cmdtestcano14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbb"
+
+cmdtestcano15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbc"
+cmdtestcano15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbe"
+cmdtestcano15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbf"
+
+cmdlttr1 = "w\$tsCanId\x07\x02\x9a\x00\x01\x41"
+cmdlttr2 = "w\$tsCanId\x07\x02\x9a\x00\x01\x42"
+cmdlttw = "w\$tsCanId\x07\x02\x9a\x00\x01\x51"
+cmdlttz = "w\$tsCanId\x07\x02\x9a\x00\x01\x61"
+
+cmdinjspk1 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x20"
+cmdinjspk2 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x21"
+cmdinjspk3 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x22"
+cmdinjspk4 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x23"
+cmdinjspk5 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x24"
+cmdinjspk6 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x25"
+cmdinjspk7 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x26"
+cmdinjspk8 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x27"
+cmdinjspk9 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x28"
+cmdinjspk10 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x29"
+cmdinjspk11 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2a"
+cmdinjspk12 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2b"
+cmdinjspk13 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2c"
+cmdinjspk14 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2d"
+cmdinjspk15 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2e"
+cmdinjspk16 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2f"
+
+cmdnull = ""
+
+[UserDefined]
+ dialog = pitlimiter, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pitlim"
+ field = "Pit Limiter Enable", pitlim_opt_on
+ field = "Input", pitlim_enin, pitlim_opt_on
+ field = "Mode", pitlim_opt_mode, { pitlim_opt_on && pitlim_enin }
+ field = "Use VSS or RPM target", pitlim_opt_vssrpm, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) }
+ field = "Speed", pitlim_speed, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 0) }
+ field = "Speed control range", pitlim_speed_range, { pitlim_opt_on && pitlim_enin && ((pitlim_opt_mode == 0) || (pitlim_opt_vssrpm == 0)) }
+ field = "RPM control range", pitlim_rpm_range, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) && pitlim_opt_vssrpm }
+ slider = "Tracking Sensitivity", pitlim_sensitivity, horizontal, { pitlim_opt_on && pitlim_enin}
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", pitlim_opt_retard, { pitlim_opt_on && pitlim_enin}
+ field = "Maximum Retard", pitlim_retardmax, { pitlim_opt_on && pitlim_enin&& (pitlim_opt_retard == 1) }
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", pitlim_opt_spkcut, { pitlim_opt_on && pitlim_enin}
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", pitlim_opt_fuelcut, { pitlim_opt_on && pitlim_enin}
+ field = "Progressive Fuel Cut", pitlim_opt_fuelprog, { pitlim_opt_on && pitlim_enin && pitlim_opt_fuelcut }
+
+ dialog = iobox1, "IO box 1", yAxis
+ field = "IO-Box #1 Enable", iobox_opta1
+ field = "VSS setting", iobox_optb1vss, {iobox_opta1}
+ field = "Configuration", iobox_opta1adv, {iobox_opta1}
+ field = "Base CAN identifier", iobox_id1, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANIN", iobox_opta1canin, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANOUT", iobox_opta1canout , {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANADC", iobox_opta1canadc, {iobox_opta1 && iobox_opta1adv }
+ field = "Tach transmit rate", iobox_optb1tachrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Inputs transmit rate", iobox_optb1inrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Outputs transmit rate", iobox_optb1outrate, {iobox_opta1 && iobox_opta1adv }
+
+ dialog = iobox2, "IO box 2", yAxis
+ field = "IO-Box #2 Enable", iobox_opta2
+ field = "VSS setting", iobox_optb2vss, {iobox_opta2}
+ field = "Configuration", iobox_opta2adv, {iobox_opta2}
+ field = "Base CAN identifier", iobox_id2, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANIN", iobox_opta2canin, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANOUT", iobox_opta2canout , {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANADC", iobox_opta2canadc, {iobox_opta2 && iobox_opta2adv }
+ field = "Tach transmit rate", iobox_optb2tachrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Inputs transmit rate", iobox_optb2inrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Outputs transmit rate", iobox_optb2outrate, {iobox_opta2 && iobox_opta2adv }
+
+ dialog = iobox3, "IO box 3", yAxis
+ field = "IO-Box #3 Enable", iobox_opta3
+ field = "VSS setting", iobox_optb3vss, {iobox_opta3}
+ field = "Configuration", iobox_opta3adv, {iobox_opta3}
+ field = "Base CAN identifier", iobox_id3, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANIN", iobox_opta3canin, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANOUT", iobox_opta3canout , {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANADC", iobox_opta3canadc, {iobox_opta3 && iobox_opta3adv }
+ field = "Tach transmit rate", iobox_optb3tachrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Inputs transmit rate", iobox_optb3inrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Outputs transmit rate", iobox_optb3outrate, {iobox_opta3 && iobox_opta3adv }
+
+ dialog = iobox4, "IO box 4", yAxis
+ field = "IO-Box #4 Enable", iobox_opta4
+ field = "VSS setting", iobox_optb4vss, {iobox_opta4}
+ field = "Configuration", iobox_opta4adv, {iobox_opta4}
+ field = "Base CAN identifier", iobox_id4, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANIN", iobox_opta4canin, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANOUT", iobox_opta4canout , {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANADC", iobox_opta4canadc, {iobox_opta4 && iobox_opta4adv }
+ field = "Tach transmit rate", iobox_optb4tachrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Inputs transmit rate", iobox_optb4inrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Outputs transmit rate", iobox_optb4outrate, {iobox_opta4 && iobox_opta4adv }
+
+ dialog = ioboxtop, "", xAxis
+ panel = iobox1, West
+ panel = iobox2, East
+
+ dialog = ioboxbot, "", xAxis
+ panel = iobox3, West
+ panel = iobox4, East, {0}
+
+ dialog = iobox, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iobox"
+ panel = ioboxtop, North
+ panel = ioboxbot, South
+
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_rcv2, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var1
+ field = "", can_rcv_var2
+ field = "", can_rcv_var3
+ field = "", can_rcv_var4
+ field = "", can_rcv_var5
+ field = "", can_rcv_var6
+ field = "", can_rcv_var7
+ field = "", can_rcv_var8
+
+ dialog = can_rcv2b, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var9
+ field = "", can_rcv_var10
+ field = "", can_rcv_var11
+ field = "", can_rcv_var12
+ field = "", can_rcv_var13
+ field = "", can_rcv_var14
+ field = "", can_rcv_var15
+ field = "", can_rcv_var16
+
+ dialog = can_rcv3, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id1
+ field = "", can_rcv_id2
+ field = "", can_rcv_id3
+ field = "", can_rcv_id4
+ field = "", can_rcv_id5
+ field = "", can_rcv_id6
+ field = "", can_rcv_id7
+ field = "", can_rcv_id8
+
+ dialog = can_rcv3b, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id9
+ field = "", can_rcv_id10
+ field = "", can_rcv_id11
+ field = "", can_rcv_id12
+ field = "", can_rcv_id13
+ field = "", can_rcv_id14
+ field = "", can_rcv_id15
+ field = "", can_rcv_id16
+
+ dialog = can_rcv4, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off1
+ field = "", can_rcv_off2
+ field = "", can_rcv_off3
+ field = "", can_rcv_off4
+ field = "", can_rcv_off5
+ field = "", can_rcv_off6
+ field = "", can_rcv_off7
+ field = "", can_rcv_off8
+
+ dialog = can_rcv4b, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off9
+ field = "", can_rcv_off10
+ field = "", can_rcv_off11
+ field = "", can_rcv_off12
+ field = "", can_rcv_off13
+ field = "", can_rcv_off14
+ field = "", can_rcv_off15
+ field = "", can_rcv_off16
+
+ dialog = can_rcv5, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size1
+ field = "", can_rcv_size2
+ field = "", can_rcv_size3
+ field = "", can_rcv_size4
+ field = "", can_rcv_size5
+ field = "", can_rcv_size6
+ field = "", can_rcv_size7
+ field = "", can_rcv_size8
+
+ dialog = can_rcv5b, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size9
+ field = "", can_rcv_size10
+ field = "", can_rcv_size11
+ field = "", can_rcv_size12
+ field = "", can_rcv_size13
+ field = "", can_rcv_size14
+ field = "", can_rcv_size15
+ field = "", can_rcv_size16
+
+ dialog = can_rcv6, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult1
+ field = "", can_rcv_mult2
+ field = "", can_rcv_mult3
+ field = "", can_rcv_mult4
+ field = "", can_rcv_mult5
+ field = "", can_rcv_mult6
+ field = "", can_rcv_mult7
+ field = "", can_rcv_mult8
+
+ dialog = can_rcv6b, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult9
+ field = "", can_rcv_mult10
+ field = "", can_rcv_mult11
+ field = "", can_rcv_mult12
+ field = "", can_rcv_mult13
+ field = "", can_rcv_mult14
+ field = "", can_rcv_mult15
+ field = "", can_rcv_mult16
+
+ dialog = can_rcv7, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div1
+ field = "", can_rcv_div2
+ field = "", can_rcv_div3
+ field = "", can_rcv_div4
+ field = "", can_rcv_div5
+ field = "", can_rcv_div6
+ field = "", can_rcv_div7
+ field = "", can_rcv_div8
+
+ dialog = can_rcv7b, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div9
+ field = "", can_rcv_div10
+ field = "", can_rcv_div11
+ field = "", can_rcv_div12
+ field = "", can_rcv_div13
+ field = "", can_rcv_div14
+ field = "", can_rcv_div15
+ field = "", can_rcv_div16
+
+ dialog = can_rcv8, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add1
+ field = "", can_rcv_add2
+ field = "", can_rcv_add3
+ field = "", can_rcv_add4
+ field = "", can_rcv_add5
+ field = "", can_rcv_add6
+ field = "", can_rcv_add7
+ field = "", can_rcv_add8
+
+ dialog = can_rcv8b, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add9
+ field = "", can_rcv_add10
+ field = "", can_rcv_add11
+ field = "", can_rcv_add12
+ field = "", can_rcv_add13
+ field = "", can_rcv_add14
+ field = "", can_rcv_add15
+ field = "", can_rcv_add16
+
+ dialog = can_rcv1, "", xAxis
+ panel = can_rcv2
+ panel = can_rcv3
+ panel = can_rcv4
+ panel = can_rcv5
+ panel = can_rcv6
+ panel = can_rcv7
+ panel = can_rcv8
+
+ dialog = can_rcv1b, "", xAxis
+ panel = can_rcv2b
+ panel = can_rcv3b
+ panel = can_rcv4b
+ panel = can_rcv5b
+ panel = can_rcv6b
+ panel = can_rcv7b
+ panel = can_rcv8b
+
+ dialog = can_rcv0, "", xAxis
+ field = "Enable receiving CAN data", can_rcv_opt_on
+ field = ""
+ field = ""
+
+ dialog = can_rcv, "CAN receiving", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrcv"
+ panel = can_rcv0, North
+ panel = can_rcv1, Center;, {can_rcv_opt_on} ; ungreying does not work
+ panel = can_rcv1b, South;, {can_rcv_opt_on}
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5,6,7", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: sensors1,2,3,4", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: sensors5,6,7,8", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: sensors9,10,11,12", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "16: sensors13,14,15,16", can_outpc_gp16
+ field = "17: boost_targ1,2,boostduty1,2,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "19: PWseq5,6,7,8", can_outpc_gp19
+ field = "20: PWseq9,10,11,12", can_outpc_gp20
+ field = "21: PWseq13,14,15,16", can_outpc_gp21
+ field = "22: EGT1,2,3,4", can_outpc_gp22
+ field = "23: EGT5,6,7,8", can_outpc_gp23
+ field = "24: EGT9,10,11,12", can_outpc_gp24
+ field = "25: EGT13,14,15,16", can_outpc_gp25
+ field = "26: nitrous:duty1,2,timer,addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2,VSS1dot,VSS2dot", can_outpc_gp29
+ field = "30: AccelX,Y,Z,streamlvl,waterduty", can_outpc_gp30
+ field = "31: AFR0,1,2,3,4,5,6,7,8", can_outpc_gp31
+
+ dialog = can_outpc_bcast_3, "CAN Realtime Data Broadcasting 3", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "32: AFR9,10,11,12,13,14,15,16", can_outpc_gp32
+ field = "33: PWMduty1,2,3,4,5,6,gear,timingerr", can_outpc_gp33
+ field = "34: EGOv1,2,3,4", can_outpc_gp34
+ field = "35: EGOv5,6,7,8", can_outpc_gp35
+ field = "36: EGOv9,10,11,12", can_outpc_gp36
+ field = "37: EGOv13,14,15,16", can_outpc_gp37
+ field = "38: EGOcor1,2,3,4", can_outpc_gp38
+ field = "39: EGOcor5,6,7,8", can_outpc_gp39
+ field = "40: EGOcor9,10,11,12", can_outpc_gp40
+ field = "41: EGOcor13,14,15,16", can_outpc_gp41
+ field = "42: VSS1,2,3,4", can_outpc_gp42
+ field = "43: synccnt,reason,SD:file#,err,phase,stat,timing_err", can_outpc_gp43
+ field = "44: VVTang1,2,3,4", can_outpc_gp44
+ field = "45: VVTtarg1,2,3,4", can_outpc_gp45
+ field = "46: VVTduty1,2,3,4,injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%,tpsacc,SS1,2", can_outpc_gp47
+
+ dialog = can_outpc_bcast_4, "CAN Realtime Data Broadcasting 4", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "48: knock_cyl1,2,3,4,5,6,7,8", can_outpc_gp48
+ field = "49: knock_cyl9,10,11,12,13,14,15,16", can_outpc_gp49
+ field = "50: MAPacc,totalacc,launch:timer,retard", can_outpc_gp50
+ field = "51: PORTa,b,eh,k,mj,p,t,cel_err", can_outpc_gp51
+ field = "52: CANin,CANout,knockretard,fuelflow,cons", can_outpc_gp52
+ field = "53: Fuel:press1,2,temp1,2", can_outpc_gp53
+ field = "54: battcurr,CLidletarg,FPduty,ALTduty,loadduty,ALTtarg", can_outpc_gp54
+ field = "55: looptime,fueltempcor,fuelprescor,lttcor", can_outpc_gp55
+ field = "56: Retards:TC,CEL,FCut,ext", can_outpc_gp56
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3,4", can_outpc_gp58
+ field = "59: Revlimretard,ALSadv,ext_advance,deadtime", can_outpc_gp59
+ field = "60: Launchadv,3stepadv,VSSlaunchretard,celstat2", can_outpc_gp60
+ field = "61: GPS", can_outpc_gp61
+ field = "62: GPS", can_outpc_gp62
+ field = "63: Gen CL duty1,2", can_outpc_gp63
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupgauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = fuelcorr
+ gauge = afr1targetGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = nitrous_addfuel
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = fueltemp_cor
+ gauge = fuelpress_cor
+ gauge = ltt_cor
+ gauge = als_addfuel
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+; gauge = pulseWidth3Gauge
+; gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see the Setting Up Manual."
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = adv4Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retard
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = tc_retardGauge
+ gauge = cel_retardGauge
+ gauge = fc_retardGauge
+ gauge = als_timingGauge
+
+ dialog = sparkcalc_gauges5, "", xAxis
+ gauge = launch_timingGauge
+ gauge = step3_timingGauge
+ gauge = launchvss_retardGauge
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+ panel = sparkcalc_gauges5
+
+ dialog = buts_injspk_label, "", yAxis
+ field = "Enabled -->>"
+ field = "Disabled ->>"
+
+ dialog = buts_injspk1, "", yAxis
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && ((status5 & 1) == 0)}
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && (status5 & 1)}
+ dialog = buts_injspk2, "", yAxis
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && ((status5 & 2) == 0)}
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && (status5 & 2)}
+ dialog = buts_injspk3, "", yAxis
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && ((status5 & 4) == 0)}
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && (status5 & 4)}
+ dialog = buts_injspk4, "", yAxis
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && ((status5 & 8) == 0)}
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && (status5 & 8)}
+ dialog = buts_injspk5, "", yAxis
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && ((status5 & 16) == 0)}
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && (status5 & 16)}
+ dialog = buts_injspk6, "", yAxis
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && ((status5 & 32) == 0)}
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && (status5 & 32)}
+ dialog = buts_injspk7, "", yAxis
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && ((status5 & 64) == 0)}
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && (status5 & 64)}
+ dialog = buts_injspk8, "", yAxis
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && ((status5 & 128) == 0)}
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && (status5 & 128)}
+
+ dialog = buts_injspk9, "", yAxis
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && ((status5 & 0x100) == 0)}
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && (status5 & 0x100)}
+ dialog = buts_injspk10, "", yAxis
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && ((status5 & 0x200) == 0)}
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && (status5 & 0x200)}
+ dialog = buts_injspk11, "", yAxis
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && ((status5 & 0x400) == 0)}
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && (status5 & 0x400)}
+ dialog = buts_injspk12, "", yAxis
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && ((status5 & 0x800) == 0)}
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && (status5 & 0x800)}
+ dialog = buts_injspk13, "", yAxis
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && ((status5 & 0x1000) == 0)}
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && (status5 & 0x1000)}
+ dialog = buts_injspk14, "", yAxis
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && ((status5 & 0x2000) == 0)}
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && (status5 & 0x2000)}
+ dialog = buts_injspk15, "", yAxis
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && ((status5 & 0x4000) == 0)}
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && (status5 & 0x4000)}
+ dialog = buts_injspk16, "", yAxis
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && ((status5 & 0x8000) == 0)}
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && (status5 & 0x8000)}
+
+ dialog = injspkonoffmaster, "", xAxis
+ commandButton = "Off", cmdskipinjoff, {status8 & 0x03}, clickOnCloseIfEnabled
+ commandButton = "Injectors", cmdskipinjon, {(status8 & 0x03) == 0}
+ commandButton = "Coils", cmdskipspkon, {(status8 & 0x03) == 0}
+
+ dialog = injspkonoffchans, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk1
+ panel = buts_injspk2
+ panel = buts_injspk3
+ panel = buts_injspk4
+ panel = buts_injspk5
+ panel = buts_injspk6
+ panel = buts_injspk7
+ panel = buts_injspk8
+
+#ifdef CYL_12_16_SUPPORT
+ dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk9
+ panel = buts_injspk10
+ panel = buts_injspk11
+ panel = buts_injspk12
+ panel = buts_injspk13
+ panel = buts_injspk14
+ panel = buts_injspk15
+ panel = buts_injspk16
+#endif
+
+ dialog = injspkonofftype, "", yAxis
+ displayOnlyField = "Off", dummyfield, {(status8 & 0x03) == 0}
+ displayOnlyField = "Injector disabling test.", dummyfield, {(status8 & 0x03) == 1}
+ displayOnlyField = "Coil disabling test - beware of plug fouling.", dummyfield, {(status8 & 0x03) == 2}
+ field = "Will not run as expected if running:"
+ field = " - semi-sequential fuel"
+ field = " - wasted spark and only a crank wheel"
+ field = " - a simple distributor input."
+
+ dialog = injspkonoff, "Inj/Spk Disabling Test Mode", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injspkonoff"
+ panel = injspkonoffmaster, North
+ panel = injspkonofftype, Center
+ panel = injspkonoffchans, South;, {status8 & 0x03} ; <--- this isn't ungreying
+#ifdef CYL_12_16_SUPPORT
+ panel = injspkonoffchans2, South;, {status8 & 0x03} ; <--- this isn't ungreying
+#endif
+
+ dialog = fp_safety, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsafety"
+ field = "Fuel pressure monitoring must be enabled."
+ field = "Enable Fuel Pressure Safety", fp_opt_safety, {fp_press_in}
+ field = "(Target fuel pressure are set on fuel pressure page.)"
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_psig
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_kpag
+ field = "Check Above Load", fp_drop_load, {fp_opt_safety && fp_press_in}
+ field = "Check Above RPM", fp_drop_rpm, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_psig, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_kpag, {fp_opt_safety && fp_press_in}
+ field = "Time Allowed At Low Pressure", fp_drop_time, {fp_opt_safety && fp_press_in}
+ field = "See AFR safety for shutdown options"
+
+ dialog = oilpress_set, ""
+ field = "Oil Pressure Input", oilpress_in
+ field = "Oil Pressure Warning", oilpress_out, {oilpress_in}
+ field = "Set the zero rpm pressures above zero"
+ field = "to ensure lamp is tested on each start."
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = oilpress, "Oil Pressure", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#oil"
+ panel = oilpress_set, West
+ panel = oil_curve, East, {oilpress_in}
+
+ dialog = shiftlight, "Shift Light"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shiftlight"
+ field = "Shift Light Output", shiftlight_opt_pins
+ field = "Per Gear Limits", shiftlight_opt_gear, {shiftlight_opt_pins}
+ field = "Limit", shiftlight_limit1, {shiftlight_opt_pins && (shiftlight_opt_gear == 0)}
+ field = "1st Gear Limit", shiftlight_limit1, {shiftlight_opt_pins && shiftlight_opt_gear}
+ field = "2nd Gear Limit", shiftlight_limit2, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 1)}
+ field = "3rd Gear Limit", shiftlight_limit3, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 2)}
+ field = "4th Gear Limit", shiftlight_limit4, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 3)}
+ field = "5th Gear Limit", shiftlight_limit5, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 4)}
+ field = "6th Gear Limit", shiftlight_limit6, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 5)}
+
+ dialog = hpte1, ""
+ field = "This feature requires Incorporate AFR be enabled"
+ field = "High Power Time Enrichment", hpte_opt_on, {loadStoich}
+ field = "Above Load", hpte_load, {hpte_opt_on && loadStoich}
+ field = "Above RPM", hpte_rpm, {hpte_opt_on && loadStoich}
+
+ dialog = hpte, "High Power Time Enrichment", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#hpte"
+ panel = hpte1, North
+ panel = hpte_curve, South, {hpte_opt_on && loadStoich}
+
+ dialog = MAFtable, "MAF Flow Curve", card
+ panel = MAFtable1, Center, { MAFOption_t == 0 }
+ panel = MAFtable1f, Center, { MAFOption_t == 1 }
+
+ dialog = alt_load, ""
+ field = "Warn on Voltage Difference >", alternator_diff, {alternator_opt_mode && alternator_lampout}
+ field = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ field = "Capture Polarity", alternator_freq_moninv, {alternator_opt_mode && (alternator_opt_mode < 4) && alternator_freq_monin}
+ field = "Warn On Load >", alternator_maxload, {alternator_lampout && ((alternator_opt_mode && alternator_freq_monin) || (alternator_opt_mode == 4) || (alternator_opt_mode == 5))}
+ field = ""
+ field = ""
+
+ dialog = alt_pids, ""
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", alternator_Kp, {alternator_opt_mode == 4}
+ field = "Integral Gain", alternator_Ki, {alternator_opt_mode == 4}
+ field = "Derivative Gain", alternator_Kd, {alternator_opt_mode == 4}
+ slider = "Sensitivity", alternator_sensitivity, horizontal, {alternator_opt_mode == 4}
+
+ dialog = alt_pidorload, "", card
+ panel = alt_load, Center, {alternator_opt_mode != 4}
+ panel = alt_pids, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_settings_t, ""
+ field = "Control Mode", alternator_opt_mode
+ field = "Control Interval", alternator_ctl_ms, {alternator_opt_mode}
+ field = "Control Output", alternator_controlout, {alternator_opt_mode}
+ field = "Output Polarity", alternator_control_inv, {alternator_opt_mode}
+ field = "Control Frequency", alternator_freq, {(alternator_opt_mode == 3) || (alternator_opt_mode == 4)}
+ field = "Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+
+ dialog = alt_settings_b, ""
+ field = "Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ field = "Capture Polarity", alternator_freq_currinv, {alternator_opt_mode && alternator_freq_currin}
+ field = "Start Delay", alternator_startdelay, {alternator_opt_mode}
+ field = "Ramp Up Time", alternator_ramptime, {alternator_opt_mode > 1}
+ field = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ field = "Charge Mode Target Voltage", alternator_targv, {(alternator_tempin == 0) && alternator_opt_mode}
+ field = "Charge Time", alternator_chargetime, {alternator_opt_mode > 1}
+ field = "Run Mode Target Voltage", alternator_targvr, {alternator_opt_mode > 1}
+ field = "WOT TPS%", alternator_wot, {alternator_opt_mode > 1}
+ field = "WOT Target Voltage", alternator_wotv, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "WOT Timeout", alternator_wottimeout, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "Over-Run Target Voltage", alternator_overrv, {alternator_opt_mode > 1}
+
+ dialog = alt_settings, ""
+ panel = alt_settings_t
+ panel = alt_pidorload
+ panel = alt_settings_b
+
+ dialog = alt_outcurve, "", card
+ panel = alternator_outfreq, Center, {alternator_opt_mode == 2}
+ panel = alternator_outduty, Center, {alternator_opt_mode == 3}
+ panel = alternator_linearise, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_curves, "", yAxis
+ panel = alternator_tempcurve, North, {alternator_opt_mode && alternator_tempin}
+ panel = alt_outcurve
+
+ dialog = alternator, "Alternator Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#altctl"
+ panel = alt_settings, West
+ panel = alt_curves, East
+
+ dialog = eaecombi1top, "", border
+ panel = EAEBSOCcurve, West
+ panel = EAEBAWCcurve, East
+
+ dialog = eaecombi1bot, "", yAxis
+ liveGraph = eaeGraph, "AE Graph", North
+ graphLine = EAEFuelCorr1
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+
+ dialog = EAEcombi1, "EAE Sucked/Adhered Coefficients", border
+ panel = eaecombi1top, Center
+ panel = eaecombi1bot, South
+
+ dialog = ms3_pe_t, ""
+ field = "Do not try to enable an output port that is already in use for another function."
+
+ dialog = ms3_port_edit_wrap, "", yAxis
+ panel = ms3_port_edit, North
+ panel = ms3_pe_t
+
+ dialog = fuelpump_set, ""
+ field = "Fuel Pump Mode", fp_opt_mode
+ field = "Control Interval", fp_ctl_ms
+ field = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ field = "Output Frequency", fp_freq, {fp_opt_mode}
+ field = "Fuel Pump Output Polarity", fp_opt_inv, {fp_opt_mode}
+ field = "Pressure Regulation/Correction", fp_opt_reg, {fp_opt_mode == 0}
+ field = "'Fixed' automatically adjusts fuel PW."
+ field = "Static/Target Rail Differential Pressure", rail_pressure_psig
+ field = "Static/Target Rail Differential Pressure", rail_pressure_kpag
+ field = "Priming Duty", fp_prime_duty, {fp_opt_mode}
+ field = "Off Duty", fp_off_duty, {fp_opt_mode}
+ field = "Minimum Duty", fp_min_duty, {fp_opt_mode}
+ field = "Maximum Duty", fp_max_duty, {fp_opt_mode}
+ field = "Pressure Sensor Input (kPa)", fp_press_in
+ field = "Sensor Type", fp_press_type, {fp_press_in}
+ field = "Temperature Sensor Input", fueltemp1
+ field = "Temperature Correction", fueltemp1_corr, {fueltemp1}
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", fp_Kp, {fp_opt_mode == 2}
+ field = "Integral Gain", fp_Ki, {fp_opt_mode == 2}
+ field = "Derivative Gain", fp_Kd, {fp_opt_mode == 2}
+
+ dialog = fuelpump, "Fuel Pump and Pressure Control", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpump"
+ panel = fuelpump_set, West
+ panel = fp_dutyTbl, East, {fp_opt_mode == 1}
+
+ dialog = boostvss_curve, "", card
+ panel = boostvss_duty_curve, Center, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) && ((boost_vss == 1) || (boost_vss == 2))}
+ panel = boostvss_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl)&& ((boost_vss == 1) || (boost_vss == 2))}
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = tcslip_set, "", yAxis
+ field = "0-5V knob Input", tc_knob
+ dialog = tcslip_menu, "Traction Control - External Slip% Input", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionslip"
+ panel = tc_slip_curve
+ panel = tcslip_set
+
+ dialog = blend1_set, "", yAxis
+ field = "X Axis Parameter", blend_opt1
+ field = "%VE2. 0% = Fully VE1. 100% = Fully VE2."
+ dialog = blend1menu, "Blend Curve (1)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend1"
+ panel = blend1_curve
+ panel = blend1_set
+
+ dialog = blend2_set
+ field = "X Axis Parameter", blend_opt2
+ field = "%Spk2. 0% = Fully Spk1. 100% = Fully Spk2."
+ dialog = blend2menu, "Blend Curve (2)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend2"
+ panel = blend2_curve
+ panel = blend2_set
+
+ dialog = blend3_set
+ field = "X Axis Parameter", blend_opt3
+ field = "%VE3/4. 0% = Fully VE1/2. 100% = Fully VE3/4."
+ dialog = blend3menu, "Blend Curve (3)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend3"
+ panel = blend3_curve
+ panel = blend3_set
+
+ dialog = blend4_set
+ field = "X Axis Parameter", blend_opt4
+ field = "%Spk3/4. 0% = Fully Spk1/2. 100% = Fully Spk3/4."
+ dialog = blend4menu, "Blend Curve (4)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend4"
+ panel = blend4_curve
+ panel = blend4_set
+
+ dialog = blend5_set
+ field = "X Axis Parameter", blend_opt5
+ field = "%AFR2. 0% = Fully AFR1. 100% = Fully AFR2."
+ dialog = blend5menu, "Blend Curve (5)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend5"
+ panel = blend5_curve
+ panel = blend5_set
+
+ dialog = blend6_set
+ field = "X Axis Parameter", blend_opt6
+ field = "%Boost2. 0% = Fully Boost1. 100% = Fully Boost2."
+ dialog = blend6menu, "Blend Curve (6)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend6"
+ panel = blend6_curve
+ panel = blend6_set
+
+ dialog = blend7_set
+ field = "X Axis Parameter", blend_opt7
+ field = "%Crank%2. 0% = Fully Cranking curve1. 100% = Fully Cranking curve2."
+ dialog = blend7menu, "Blend Curve (7)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend7_curve
+ panel = blend7_set
+
+ dialog = blend8_set
+ field = "Flex blend%. 0% = Fully Tables1. 100% = Fully Tables2."
+ dialog = blend8menu, "Blend Curve (8)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend8_curve
+ panel = blend8_set
+
+ dialog = airden_words
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ field = "Firmwares 1.1.x and earlier used an embedded curve and a correction curve on top."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = checkengine_l, "Sensor Validation"
+ field = "Sensor Checking", cel_opt_on
+ field = "Light Output", cel_port, {cel_opt_on}
+ field = "CEL Solid/Flash Codes", cel_opt_flash, {cel_opt_on}
+ field = "Light When Not Running", cel_opt_when, {cel_opt_on && cel_port}
+ field = "Ignore Fluctuations For First", cel_runtime, {cel_opt_on}
+ field = "#MAP Sensor Check", cel_opt2_map, {cel_opt_on}
+ field = "Minimum ADC", map_minadc, {cel_opt_on}
+ field = "Maximum ADC", map_maxadc, {cel_opt_on}
+ field = "Minimum Fluctuation", map_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", map_var_upper, {cel_opt_on}
+ field = "#MAT Sensor Check", cel_opt2_mat, {cel_opt_on}
+ field = "Minimum ADC", mat_minadc, {cel_opt_on}
+ field = "Maximum ADC", mat_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", mat_var_upper, {cel_opt_on}
+ field = "#CLT Sensor Check", cel_opt2_clt, {cel_opt_on}
+ field = "Minimum ADC", clt_minadc, {cel_opt_on}
+ field = "Maximum ADC", clt_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", clt_var_upper, {cel_opt_on}
+ field = "#TPS Check", cel_opt2_tps, {cel_opt_on}
+ field = "Minimum ADC", tps_minadc, {cel_opt_on}
+ field = "Maximum ADC", tps_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", tps_var_upper, {cel_opt_on}
+
+ dialog = checkengine_r, ""
+ field = "#Battery Check", cel_opt2_batt, {cel_opt_on}
+ field = "Minimum Voltage", batt_minv, {cel_opt_on}
+ field = "Maximum Voltage", batt_maxv, {cel_opt_on}
+ field = "Maximum Fluctuation", batt_var_upper, {cel_opt_on}
+ field = "#EGO1 Sensor Check", cel_opt2_afr0, {cel_opt_on}
+ field = "Minimum AFR", afr_min, {cel_opt_on}
+ field = "Maximum AFR", afr_max, {cel_opt_on}
+ field = "Minimum Fluctuation", afr_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", afr_var_upper, {cel_opt_on}
+ field = "#Sync-Loss Check", cel_opt2_sync, {cel_opt_on}
+ field = "No. Sync Losses Allowed", cel_synctol, {cel_opt_on}
+ field = "#EGT Sensor Check", cel_opt2_egt, {cel_opt_on}
+ field = "Minimum EGT", egt_minvalid, {cel_opt_on}
+ field = "Maximum EGT", egt_maxvalid, {cel_opt_on}
+ field = "Minimum Fluctuation", egt_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", egt_var_upper, {cel_opt_on}
+ field = "#Flex Sensor Check", cel_opt3_flex, {cel_opt_on && flexFuel}
+ field = "AFR safety, oil pressure set CEL."
+ field = ""
+ field = "status5 Input", cel_opt_stat, {cel_opt_on}
+ field = "status5 Shows", cel_opt_adc, {cel_opt_on && cel_opt_stat}
+
+ dialog = limpmode, "Limp Mode"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#limp"
+ field = "MAP Triggers Limp Mode", cel_action1_map, {cel_opt_on && cel_opt2_map}
+ field = "Use Fallback MAP Table", cel_action1_map_an, {cel_opt_on && cel_opt2_map && cel_action1_map}
+ field = "MAT Triggers Limp Mode", cel_action1_mat, {cel_opt_on && cel_opt2_mat}
+ field = "Fallback MAT", cel_mat_default, {cel_opt_on && cel_opt2_mat && cel_action1_mat}
+ field = "CLT Triggers Limp Mode", cel_action1_clt, {cel_opt_on && cel_opt2_clt}
+ field = "Fallback Cold CLT", cel_clt_cold, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Fallback Warmed Up CLT", cel_clt_warm, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Time To Warmup Engine", cel_warmtime, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "TPS Triggers Limp Mode", cel_action1_tps, {cel_opt_on && cel_opt2_tps}
+ field = "TPS-accel is disabled in fault conditions"
+ field = "Batt Triggers Limp Mode", cel_action1_batt, {cel_opt_on && cel_opt2_batt}
+ field = "EGO Triggers Limp Mode", cel_action1_ego, {cel_opt_on && cel_opt2_afr0}
+ field = "Flex Triggers Limp Mode", cel_action2_flex, {cel_opt_on && cel_opt3_flex}
+ field = "EGT Triggers Limp Mode", cel_action2_egt, {cel_opt_on && cel_opt2_egt}
+ field = "The following apply in limp mode:"
+ field = "Limp Rev Limit", cel_revlim
+ field = "Limp Boost Limit", cel_overboost
+ field = "Limp Boost Valve Duty", cel_boost_duty
+ field = "Limp Boost Valve2 Duty", cel_boost_duty2
+ field = "Limp Retard Timing By", cel_retard
+
+ dialog = checkengine, "Check Engine Light", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#cel"
+ panel = checkengine_l
+ panel = checkengine_r
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn level", rpmwarn
+ field = "RPM - Danger level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "VE Value - Max", vehigh
+ field = "Allow WUE Below 100% (only for LPG)", wue_lpg
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+ field = "Air-Cooled Expanded CLT Range", clt_exp
+
+; list of features and what pins they use
+ dialog = iopinlist1, ".", yAxis
+ displayOnlyField = "Main Fuel Outputs", hardware_fuel
+ displayOnlyField = "Inj1, Inj2", hardware_fuel, {hardware_fuel== 0}
+ displayOnlyField = "MS3X InjA, InjB etc.", hardware_fuel, {hardware_fuel}
+ displayOnlyField = "Spark Hardware In Use", hardware_spk
+ displayOnlyField = "LED D14, D16, D15, JS11 etc.", hardware_spk, {hardware_spk== 0}
+ displayOnlyField = "MS3X SpkA, SpkB etc.", hardware_spk, {hardware_spk}
+ displayOnlyField = "Cam Input (If Used)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ displayOnlyField = "Programmable On/Off Output: PM3 - Injection LED D14", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: PM4 - Accel LED D16", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: PM5 - Warmup LED D15", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: PJ0 - IAC2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PJ1 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PJ7 - JS11", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: PP2 - Idle", psEnabled[6], {psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: PP3 - Boost", psEnabled[7], {psEnabled[7]}
+ displayOnlyField = "Programmable On/Off Output: PP4 - Nitrous 1", psEnabled[8], {psEnabled[8]}
+ displayOnlyField = "Programmable On/Off Output: PP5 - Nitrous 2", psEnabled[9], {psEnabled[9]}
+ displayOnlyField = "Programmable On/Off Output: PP6 - VVT", psEnabled[10], {psEnabled[10]}
+ displayOnlyField = "Programmable On/Off Output: PP7 - Fidle", psEnabled[11], {psEnabled[11]}
+ displayOnlyField = "Programmable On/Off Output: PT1 - V3 Inj 1", psEnabled[12], {psEnabled[12]}
+ displayOnlyField = "Programmable On/Off Output: PT3 - V3 Inj 2", psEnabled[13], {psEnabled[13]}
+ displayOnlyField = "Programmable On/Off Output: PT5 - JS10", psEnabled[14], {psEnabled[14]}
+ displayOnlyField = "Programmable On/Off Output: PK0 - Tacho", psEnabled[15], {psEnabled[15]}
+ displayOnlyField = "Programmable On/Off Output: PA0 - Inj A", psEnabled[16], {psEnabled[16]}
+ displayOnlyField = "Programmable On/Off Output: PA1 - Inj B", psEnabled[17], {psEnabled[17]}
+ displayOnlyField = "Programmable On/Off Output: PA2 - Inj C", psEnabled[18], {psEnabled[18]}
+ displayOnlyField = "Programmable On/Off Output: PA3 - Inj D", psEnabled[19], {psEnabled[19]}
+ displayOnlyField = "Programmable On/Off Output: PA4 - Inj E", psEnabled[20], {psEnabled[20]}
+ displayOnlyField = "Programmable On/Off Output: PA5 - Inj F", psEnabled[21], {psEnabled[21]}
+ displayOnlyField = "Programmable On/Off Output: PA6 - Inj G", psEnabled[22], {psEnabled[22]}
+ displayOnlyField = "Programmable On/Off Output: PA7 - Inj H", psEnabled[23], {psEnabled[23]}
+ displayOnlyField = "Programmable On/Off Output: PB0 - Spk A", psEnabled[24], {psEnabled[24]}
+ displayOnlyField = "Programmable On/Off Output: PB1 - Spk B", psEnabled[25], {psEnabled[25]}
+ displayOnlyField = "Programmable On/Off Output: PB2 - Spk C", psEnabled[26], {psEnabled[26]}
+ displayOnlyField = "Programmable On/Off Output: PB3 - Spk D", psEnabled[27], {psEnabled[27]}
+ displayOnlyField = "Programmable On/Off Output: PB4 - Spk E", psEnabled[28], {psEnabled[28]}
+ displayOnlyField = "Programmable On/Off Output: PB5 - Spk F", psEnabled[29], {psEnabled[29]}
+ displayOnlyField = "Programmable On/Off Output: PB6 - Spk G", psEnabled[30], {psEnabled[30]}
+ displayOnlyField = "Programmable On/Off Output: PB7 - Spk H", psEnabled[31], {psEnabled[31]}
+
+
+ displayOnlyField = "Programmable On/Off Output: CANout01", psEnabled[32], {psEnabled[32]}
+ displayOnlyField = "Programmable On/Off Output: CANout02", psEnabled[33], {psEnabled[33]}
+ displayOnlyField = "Programmable On/Off Output: CANout03", psEnabled[34], {psEnabled[34]}
+ displayOnlyField = "Programmable On/Off Output: CANout04", psEnabled[35], {psEnabled[35]}
+ displayOnlyField = "Programmable On/Off Output: CANout05", psEnabled[36], {psEnabled[36]}
+ displayOnlyField = "Programmable On/Off Output: CANout06", psEnabled[37], {psEnabled[37]}
+ displayOnlyField = "Programmable On/Off Output: CANout07", psEnabled[38], {psEnabled[38]}
+ displayOnlyField = "Programmable On/Off Output: CANout08", psEnabled[39], {psEnabled[39]}
+ displayOnlyField = "Programmable On/Off Output: CANout09", psEnabled[40], {psEnabled[40]}
+ displayOnlyField = "Programmable On/Off Output: CANout10", psEnabled[41], {psEnabled[41]}
+ displayOnlyField = "Programmable On/Off Output: CANout11", psEnabled[42], {psEnabled[42]}
+ displayOnlyField = "Programmable On/Off Output: CANout12", psEnabled[43], {psEnabled[43]}
+ displayOnlyField = "Programmable On/Off Output: CANout13", psEnabled[44], {psEnabled[44]}
+ displayOnlyField = "Programmable On/Off Output: CANout14", psEnabled[45], {psEnabled[45]}
+ displayOnlyField = "Programmable On/Off Output: CANout15", psEnabled[46], {psEnabled[46]}
+ displayOnlyField = "Programmable On/Off Output: CANout16", psEnabled[47], {psEnabled[47]}
+ displayOnlyField = "Programmable On/Off Output: Loop 1", psEnabled[48], {psEnabled[48]}
+ displayOnlyField = "Programmable On/Off Output: Loop 2", psEnabled[49], {psEnabled[49]}
+ displayOnlyField = "Programmable On/Off Output: Loop 3", psEnabled[50], {psEnabled[50]}
+
+ displayOnlyField = "EGO 1 Port", egoport1
+ displayOnlyField = "EGO 2 Port", egoport2, {egonum > 1}
+ displayOnlyField = "EGO 3 Port", egoport3, {egonum > 2}
+ displayOnlyField = "EGO 4 Port", egoport4, {egonum > 3}
+ displayOnlyField = "EGO 5 Port", egoport5, {egonum > 4}
+ displayOnlyField = "EGO 6 Port", egoport6, {egonum > 5}
+ displayOnlyField = "EGO 7 Port", egoport7, {egonum > 6}
+ displayOnlyField = "EGO 8 Port", egoport8, {egonum > 7}
+#ifdef CYL_12_16_SUPPORT
+ displayOnlyField = "EGO 9 Port", egoport9, {egonum > 8}
+ displayOnlyField = "EGO 10 Port", egoport10, {egonum > 9}
+ displayOnlyField = "EGO 11 Port", egoport11, {egonum > 10}
+ displayOnlyField = "EGO 12 Port", egoport12, {egonum > 11}
+ displayOnlyField = "EGO 13 Port", egoport13, {egonum > 12}
+ displayOnlyField = "EGO 14 Port", egoport14, {egonum > 13}
+ displayOnlyField = "EGO 15 Port", egoport15, {egonum > 14}
+ displayOnlyField = "EGO 16 Port", egoport16, {egonum > 15}
+#endif
+ displayOnlyField = "Generic Sensor 01 Input", sensor01_source, {sensor01_source}
+ displayOnlyField = "Generic Sensor 02 Input", sensor02_source, {sensor02_source}
+ displayOnlyField = "Generic Sensor 03 Input", sensor03_source, {sensor03_source}
+ displayOnlyField = "Generic Sensor 04 Input", sensor04_source, {sensor04_source}
+ displayOnlyField = "Generic Sensor 05 Input", sensor05_source, {sensor05_source}
+ displayOnlyField = "Generic Sensor 06 Input", sensor06_source, {sensor06_source}
+ displayOnlyField = "Generic Sensor 07 Input", sensor07_source, {sensor07_source}
+ displayOnlyField = "Generic Sensor 08 Input", sensor08_source, {sensor08_source}
+ displayOnlyField = "Generic Sensor 09 Input", sensor09_source, {sensor09_source}
+ displayOnlyField = "Generic Sensor 10 Input", sensor10_source, {sensor10_source}
+ displayOnlyField = "Generic Sensor 11 Input", sensor11_source, {sensor11_source}
+ displayOnlyField = "Generic Sensor 12 Input", sensor12_source, {sensor12_source}
+ displayOnlyField = "Generic Sensor 13 Input", sensor13_source, {sensor13_source}
+ displayOnlyField = "Generic Sensor 14 Input", sensor14_source, {sensor14_source}
+ displayOnlyField = "Generic Sensor 15 Input", sensor15_source, {sensor15_source}
+ displayOnlyField = "Generic Sensor 16 Input", sensor16_source, {sensor16_source}
+ displayOnlyField = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ displayOnlyField = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ displayOnlyField = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ displayOnlyField = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ displayOnlyField = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ displayOnlyField = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ displayOnlyField = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ displayOnlyField = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ displayOnlyField = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ displayOnlyField = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ displayOnlyField = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ displayOnlyField = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ displayOnlyField = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ displayOnlyField = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ displayOnlyField = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ displayOnlyField = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ displayOnlyField = "Internal Knock Module Uses D14,D15,D16,JS11,PM2", knk_option_an, {(knk_option_an == 2)}
+
+ dialog = iopinlist2, ".", yAxis
+ displayOnlyField = "PWM Idle Output", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "PWM Idle 3 Wire Mode", pwmidle_freq_pin3, { (IdleCtl == 2) && pwmidle_freq_pin3 }
+ displayOnlyField = "Fan Control Output", fanctl_settings_pin, { fanctl_settings_on }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && ac_idleup_io_out }
+ displayOnlyField = "AC Idle-up Input", ac_idleup_io_in, { ac_idleup_settings }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport_t == 0}
+ displayOnlyField = "MAP Frequency Input", mapport_f, {mapport_t == 1}
+ displayOnlyField = "MAP 2nd Port", map2port, {(mapport_t == 0) && (mapport != 7) && map2port}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {(MAFOption_t == 0)}
+ displayOnlyField = "MAF Frequency Input", MAFOption_f, {(MAFOption_t == 1)}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Flex Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+ displayOnlyField = "VVT1 Output", vvt_out1, {vvt_opt1_on}
+ displayOnlyField = "VVT2 Output", vvt_out2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Output", vvt_out3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Output", vvt_out4, {vvt_opt1_on > 3}
+ displayOnlyField = "VVT1 Output (complementary)", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT2 Output (complementary)", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT3 Output (complementary)", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT4 Output (complementary)", vvt_softout4, {(vvt_opt1_on > 3) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT1 Input", vvt_opt3_cam1, {0}
+ displayOnlyField = "VVT2 Input", vvt_opt3_cam2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Input", vvt_opt3_cam3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Input", vvt_opt3_cam4, {vvt_opt1_on > 3}
+ displayOnlyField = "Fuel Table Switching Input", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ displayOnlyField = "Spark Table Switching Input", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ displayOnlyField = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ displayOnlyField = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ displayOnlyField = "Dual Fuel Input", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ displayOnlyField = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ displayOnlyField = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ displayOnlyField = "Boost Control Output (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control Output (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Boost Control2 Output (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control2 Output (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Gen PWM A Output", pwm_opt2_a, {pwm_opt_on_a}
+ displayOnlyField = "Gen PWM B Output", pwm_opt2_b, {pwm_opt_on_b}
+ displayOnlyField = "Gen PWM C Output", pwm_opt2_c, {pwm_opt_on_c}
+ displayOnlyField = "Gen PWM D Output", pwm_opt2_d, {pwm_opt_on_d}
+ displayOnlyField = "Gen PWM E Output", pwm_opt2_e, {pwm_opt_on_e}
+ displayOnlyField = "Gen PWM F Output", pwm_opt2_f, {pwm_opt_on_f}
+ displayOnlyField = "Generic Closed-Loop A Output", generic_pid_pwm_outs_a, {generic_pid_flags_a_on}
+ displayOnlyField = "Generic Closed-Loop B Output", generic_pid_pwm_outs_b, {generic_pid_flags_b_on}
+
+ displayOnlyField = "WI Pump Output", water_pins_pump, {water_freq_on}
+ displayOnlyField = "WI Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ displayOnlyField = "VSS1 Analogue sensor", vss1_an, {vss_opt0_1 == 2}
+ displayOnlyField = "VSS1 Digi Input", vss_opt1, {vss_opt0_1 == 1}
+ displayOnlyField = "VSS1 CAN PWM Port", vss1_pwmseq, {vss_opt1 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "VSS2 Analogue Sensor", vss2_an, {vss_opt0_2 == 2}
+ displayOnlyField = "VSS2 Digi Input", vss_opt2, {vss_opt0_2 == 1}
+ displayOnlyField = "VSS2 CAN PWM Port", vss2_pwmseq, {vss_opt2 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "Shaft Sensor 1", ss_opt1, {ss_opt1}
+ displayOnlyField = "Shaft Sensor 2", ss_opt2, {ss_opt2}
+ displayOnlyField = "VSS Output", vssout_opt, {vssout_opt}
+ displayOnlyField = "Gear Pos. Input", gear_port_an, { (gear_method == 2) }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+ displayOnlyField = "Accelerometer X Input", accXport, {accXport}
+ displayOnlyField = "Accelerometer Y Input", accYport, {accYport}
+ displayOnlyField = "Accelerometer Z Input", accZport, {accZport}
+ displayOnlyField = "SDcard Datalog button", log_style2_but, {log_style_on2 == 2}
+ displayOnlyField = "SDcard LED indicator", log_style_led, {log_style_on2}
+ displayOnlyField = "SDcard Stream Input", log_style3_adc, {log_style_block == 1}
+ displayOnlyField = "SDcard trigger output", sdpulse_out, {log_style_on2 >= 2}
+ displayOnlyField = "Nitrous Stage 1 output - nitrous", n2o1n_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 1 output - fuel", n2o1f_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable input on:", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 2 output - nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "Nitrous Stage 2 output - fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "AFR safety Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action }
+ displayOnlyField = "Internal RTC uses PM1 and PM3", opt142_rtc, {opt142_rtc == 1}
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Variable launch Input", launch_var_on, { launch_opt_on >0 }
+ displayOnlyField = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ displayOnlyField = "Anti-Lag Enable Input", als_in_pin, {als_in_pin}
+ displayOnlyField = "ALS On/off Output", als_out_pin, {als_in_pin}
+ displayOnlyField = "ALS PWM Output", als_opt_pwmout, {als_in_pin}
+ displayOnlyField = "ALS Output", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ displayOnlyField = "Traction Control Enable Input", tc_enin, {tc_opt_on}
+ displayOnlyField = "Traction Control Light output", tc_led_out, {tc_opt_on}
+ displayOnlyField = "Torque Convertor Lockup", tclu_outpin, {tclu_outpin}
+ displayOnlyField = "TCLU Enable Input", tclu_enablepin, {tclu_outpin}
+ displayOnlyField = "TCLU Brake switch", tclu_brakepin, {tclu_outpin}
+ displayOnlyField = "Staged Injection Relay Output 1", staged_out1, { staged_first_param }
+ displayOnlyField = "Staged Injection Relay Output 2", staged_out2, { staged_first_param }
+ displayOnlyField = "Alternator Control Output", alternator_controlout, {alternator_opt_mode}
+ displayOnlyField = "Alternator Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+ displayOnlyField = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ displayOnlyField = "Battery Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ displayOnlyField = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ displayOnlyField = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ displayOnlyField = "Primary Pressure Input", fp_press_in, {fp_press_in}
+ displayOnlyField = "Primary Fuel Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Secondary Fuel Pressure Input", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press}
+ displayOnlyField = "Secondary Fuel Temperature Input", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp}
+
+ dialog = iopinlist, "Feature List Showing I/O pins", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iopins"
+ panel = iopinlist1, West
+ panel = iopinlist2, East
+
+; now list of pins and what features they are assigned to.
+ dialog = pinusage1, ".", yAxis
+ displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) }
+ displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) }
+ displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) }
+ displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) }
+ displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) }
+ displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) }
+ displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) }
+ displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) }
+
+ displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) }
+ displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) }
+ displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) }
+ displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) }
+ displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) }
+ displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) }
+ displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) }
+ displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) }
+
+ displayOnlyField = "Hardware PWM A", { bitStringValue( portLabels , portusage_pwmscl[1] ) }
+ displayOnlyField = "Hardware PWM B", { bitStringValue( portLabels , portusage_pwmscl[3] ) }
+
+ dialog = pinusage2, ".", yAxis
+ displayOnlyField = "PE0", { bitStringValue( portLabels , portusage_e[0] ) }
+ displayOnlyField = "PE1", { bitStringValue( portLabels , portusage_e[1] ) }
+ displayOnlyField = "Flex", { bitStringValue( portLabels , portusage_e[2] ) }
+
+ displayOnlyField = "FP", { bitStringValue( portLabels , portusage_e[4] ) }
+
+ displayOnlyField = "Tableswitch in", { bitStringValue( portLabels , portusage_h[6] ) }
+ displayOnlyField = "Nitrous in", { bitStringValue( portLabels , portusage_h[7] ) }
+
+ displayOnlyField = "IAC1", { bitStringValue( portLabels , portusage_j[0] ) }
+ displayOnlyField = "IAC2", { bitStringValue( portLabels , portusage_j[1] ) }
+
+ displayOnlyField = "JS11", { bitStringValue( portLabels , portusage_j[7] ) }
+ displayOnlyField = "Tacho Out", { bitStringValue( portLabels , portusage_k[0] ) }
+ displayOnlyField = "(PK1)", { bitStringValue( portLabels , portusage_k[1] ) }
+ displayOnlyField = "Launch In", { bitStringValue( portLabels , portusage_k[2] ) }
+ displayOnlyField = "(PK3)", { bitStringValue( portLabels , portusage_k[3] ) }
+ displayOnlyField = "(PK7)", { bitStringValue( portLabels , portusage_k[7] ) }
+ displayOnlyField = "(PM2)", { bitStringValue( portLabels , portusage_m[2] ) }
+ displayOnlyField = "Inject LED", { bitStringValue( portLabels , portusage_m[3] ) }
+ displayOnlyField = "Accel LED", { bitStringValue( portLabels , portusage_m[4] ) }
+ displayOnlyField = "Warmup LED", { bitStringValue( portLabels , portusage_m[5] ) }
+
+
+ dialog = pinusage3, ".", yAxis
+ displayOnlyField = "Idle", { bitStringValue( portLabels , portusage_p[2] ) }
+ displayOnlyField = "Boost", { bitStringValue( portLabels , portusage_p[3] ) }
+ displayOnlyField = "Nitrous 1", { bitStringValue( portLabels , portusage_p[4] ) }
+ displayOnlyField = "Nitrous 2", { bitStringValue( portLabels , portusage_p[5] ) }
+ displayOnlyField = "VVT", { bitStringValue( portLabels , portusage_p[6] ) }
+ displayOnlyField = "FIDLE", { bitStringValue( portLabels , portusage_p[7] ) }
+
+; displayOnlyField = "Primary tach", { bitStringValue( portLabels , portusage_t[0] ) }
+ displayOnlyField = "Inj Bank 1", { bitStringValue( portLabels , portusage_t[1] ) }
+ displayOnlyField = "MS3X Cam", { bitStringValue( portLabels , portusage_t[2] ) }
+ displayOnlyField = "Inj Bank 2", { bitStringValue( portLabels , portusage_t[3] ) }
+ displayOnlyField = "PT4", { bitStringValue( portLabels , portusage_t[4] ) }
+ displayOnlyField = "PT5/JS10", { bitStringValue( portLabels , portusage_t[5] ) }
+ displayOnlyField = "Datalog In", { bitStringValue( portLabels , portusage_t[6] ) }
+
+; displayOnlyField = "PT7", { bitStringValue( portLabels , portusage_t[7] ) }
+
+ displayOnlyField = "EXT_MAP (ADC11)", { bitStringValue( portLabels , portusage_ad0h[3] ) }
+ displayOnlyField = "EGO2 (ADC12)", { bitStringValue( portLabels , portusage_ad0h[4] ) }
+ displayOnlyField = "SPAREADC (ADC13)", { bitStringValue( portLabels , portusage_ad0h[5] ) }
+
+ displayOnlyField = "MAP (ADC0)", { bitStringValue( portLabels , portusage_ad0l[0] ) }
+; displayOnlyField = "ADC1", { bitStringValue( portLabels , portusage_ad0l[1] ) }
+; displayOnlyField = "ADC2", { bitStringValue( portLabels , portusage_ad0l[2] ) }
+; displayOnlyField = "ADC3", { bitStringValue( portLabels , portusage_ad0l[3] ) }
+; displayOnlyField = "ADC4", { bitStringValue( portLabels , portusage_ad0l[4] ) }
+; displayOnlyField = "ADC5", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ displayOnlyField = "JS5 (ADC6)", { bitStringValue( portLabels , portusage_ad0l[6] ) }
+ displayOnlyField = "JS4 (ADC7)", { bitStringValue( portLabels , portusage_ad0l[7] ) }
+
+
+ dialog = pinusage4, ".", yAxis
+ displayOnlyField = "CANIN 1", { bitStringValue( portLabels , portusage_canin[0] ) }
+ displayOnlyField = "CANIN 2", { bitStringValue( portLabels , portusage_canin[1] ) }
+ displayOnlyField = "CANIN 3", { bitStringValue( portLabels , portusage_canin[2] ) }
+ displayOnlyField = "CANIN 4", { bitStringValue( portLabels , portusage_canin[3] ) }
+ displayOnlyField = "CANIN 5", { bitStringValue( portLabels , portusage_canin[4] ) }
+ displayOnlyField = "CANIN 6", { bitStringValue( portLabels , portusage_canin[5] ) }
+ displayOnlyField = "CANIN 7", { bitStringValue( portLabels , portusage_canin[6] ) }
+ displayOnlyField = "CANIN 8", { bitStringValue( portLabels , portusage_canin[7] ) }
+
+ displayOnlyField = "CANPWM 1", { bitStringValue( portLabels , portusage_canpwm[0] ) }
+ displayOnlyField = "CANPWM 2", { bitStringValue( portLabels , portusage_canpwm[1] ) }
+ displayOnlyField = "CANPWM 3", { bitStringValue( portLabels , portusage_canpwm[2] ) }
+ displayOnlyField = "CANPWM 4", { bitStringValue( portLabels , portusage_canpwm[3] ) }
+ displayOnlyField = "CANPWM 5", { bitStringValue( portLabels , portusage_canpwm[4] ) }
+ displayOnlyField = "CANPWM 6", { bitStringValue( portLabels , portusage_canpwm[5] ) }
+ displayOnlyField = "CANPWM 7", { bitStringValue( portLabels , portusage_canpwm[6] ) }
+ displayOnlyField = "CANPWM 8", { bitStringValue( portLabels , portusage_canpwm[7] ) }
+
+ dialog = pinusage5, ".", yAxis
+ displayOnlyField = "CANOUT 1", { bitStringValue( portLabels , portusage_canout[0] ) }
+ displayOnlyField = "CANOUT 2", { bitStringValue( portLabels , portusage_canout[1] ) }
+ displayOnlyField = "CANOUT 3", { bitStringValue( portLabels , portusage_canout[2] ) }
+ displayOnlyField = "CANOUT 4", { bitStringValue( portLabels , portusage_canout[3] ) }
+ displayOnlyField = "CANOUT 5", { bitStringValue( portLabels , portusage_canout[4] ) }
+ displayOnlyField = "CANOUT 6", { bitStringValue( portLabels , portusage_canout[5] ) }
+ displayOnlyField = "CANOUT 7", { bitStringValue( portLabels , portusage_canout[6] ) }
+ displayOnlyField = "CANOUT 8", { bitStringValue( portLabels , portusage_canout[7] ) }
+ displayOnlyField = "CANOUT 9", { bitStringValue( portLabels , portusage_canout[8] ) }
+ displayOnlyField = "CANOUT 10", { bitStringValue( portLabels , portusage_canout[9] ) }
+ displayOnlyField = "CANOUT 11", { bitStringValue( portLabels , portusage_canout[10] ) }
+ displayOnlyField = "CANOUT 12", { bitStringValue( portLabels , portusage_canout[11] ) }
+ displayOnlyField = "CANOUT 13", { bitStringValue( portLabels , portusage_canout[12] ) }
+ displayOnlyField = "CANOUT 14", { bitStringValue( portLabels , portusage_canout[13] ) }
+ displayOnlyField = "CANOUT 15", { bitStringValue( portLabels , portusage_canout[14] ) }
+ displayOnlyField = "CANOUT 16", { bitStringValue( portLabels , portusage_canout[15] ) }
+
+ dialog = pinusage6, ".", yAxis
+ displayOnlyField = "Loop 1", { bitStringValue( portLabels , portusage_loop[0] ) }
+ displayOnlyField = "Loop 2", { bitStringValue( portLabels , portusage_loop[1] ) }
+ displayOnlyField = "Loop 3", { bitStringValue( portLabels , portusage_loop[2] ) }
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pinusage7, ".", yAxis
+ displayOnlyField = "CANADC 1", { bitStringValue( portLabels , portusage_canadc[0] ) }
+ displayOnlyField = "CANADC 2", { bitStringValue( portLabels , portusage_canadc[1] ) }
+ displayOnlyField = "CANADC 3", { bitStringValue( portLabels , portusage_canadc[2] ) }
+ displayOnlyField = "CANADC 4", { bitStringValue( portLabels , portusage_canadc[3] ) }
+ displayOnlyField = "CANADC 5", { bitStringValue( portLabels , portusage_canadc[4] ) }
+ displayOnlyField = "CANADC 6", { bitStringValue( portLabels , portusage_canadc[5] ) }
+ displayOnlyField = "CANADC 7", { bitStringValue( portLabels , portusage_canadc[6] ) }
+ displayOnlyField = "CANADC 8", { bitStringValue( portLabels , portusage_canadc[7] ) }
+
+ dialog = pinusage8, ".", yAxis
+ displayOnlyField = "CANADC 9", { bitStringValue( portLabels , portusage_canadc[8] ) }
+ displayOnlyField = "CANADC 10", { bitStringValue( portLabels , portusage_canadc[9] ) }
+ displayOnlyField = "CANADC 11", { bitStringValue( portLabels , portusage_canadc[10] ) }
+ displayOnlyField = "CANADC 12", { bitStringValue( portLabels , portusage_canadc[11] ) }
+ displayOnlyField = "CANADC 13", { bitStringValue( portLabels , portusage_canadc[12] ) }
+ displayOnlyField = "CANADC 14", { bitStringValue( portLabels , portusage_canadc[13] ) }
+ displayOnlyField = "CANADC 15", { bitStringValue( portLabels , portusage_canadc[14] ) }
+ displayOnlyField = "CANADC 16", { bitStringValue( portLabels , portusage_canadc[15] ) }
+
+ dialog = pinusage9, ".", yAxis
+ displayOnlyField = "CANADC 17", { bitStringValue( portLabels , portusage_canadc[16] ) }
+ displayOnlyField = "CANADC 18", { bitStringValue( portLabels , portusage_canadc[17] ) }
+ displayOnlyField = "CANADC 19", { bitStringValue( portLabels , portusage_canadc[18] ) }
+ displayOnlyField = "CANADC 20", { bitStringValue( portLabels , portusage_canadc[19] ) }
+ displayOnlyField = "CANADC 21", { bitStringValue( portLabels , portusage_canadc[20] ) }
+ displayOnlyField = "CANADC 22", { bitStringValue( portLabels , portusage_canadc[21] ) }
+ displayOnlyField = "CANADC 23", { bitStringValue( portLabels , portusage_canadc[22] ) }
+ displayOnlyField = "CANADC 24", { bitStringValue( portLabels , portusage_canadc[23] ) }
+
+ dialog = pinusage, "I/O Pins List Showing Usage - only works when online", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusage"
+ panel = pinusage1, West
+ panel = pinusage2, Center
+ panel = pinusage3, East
+
+ dialog = pinusagem, "", xAxis
+ panel = pinusage4, West
+ panel = pinusage5, Center
+ panel = pinusage6, East
+
+ dialog = pinusageb, "", xAxis
+ panel = pinusage7, West
+ panel = pinusage8, Center
+ panel = pinusage9, East
+
+ dialog = pinusagecan, "Expansion I/O Pins List/Usage - only works when online", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusagecan"
+ panel = pinusagem, North
+ panel = pinusageb, South
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "Afterstart Enrichment (ASE) - Percent Adder"
+ panel = asePct
+ panel = ase_note
+
+ dialog = nestedasePct2, "Afterstart Enrichment (ASE) - Percent Adder 2"
+ panel = asePct2
+ panel = ase_note
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = nestedwarmup_curve2, "Warmup Enrichment (WUE) - Percent Multiplier 2"
+ panel = warmup_curve2
+ panel = wc_note
+
+ dialog = tcsettings, "Traction Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#traction"
+ field = "Traction Control", tc_opt_on
+ field = "Method", tc_opt_method, {tc_opt_on}
+ field = "Enable Input", tc_enin, {tc_opt_on}
+ field = "Light output", tc_led_out, {tc_opt_on}
+ field = "Minimum TPS", tc_mintps, {tc_opt_on}
+ field = "Minimum MAP", tc_minmap, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Minimum VSS", tc_minvss, {tc_opt_on && (tc_opt_method != 2) && (tc_opt_method != 3) }
+ field = "VSS1 = driven, VSS2 = undriven wheels"
+; field = "Maximum VSS", tc_maxvss, {tc_opt_on }
+ field = "Slip % Setting", tc_opt_slipcurve, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Slip Threshold", tc_slipthresh, {tc_opt_on && (tc_opt_method == 1) && !tc_opt_slipcurve}
+ field = "Nitrous Control", tc_opt_n2o, {tc_opt_on }
+ field = "Add Fuel To:", tc_opt_bank, {tc_opt_on }
+ field = "When staging bank 1 = primary, bank 2 = secondary"
+
+ dialog = tc_top, "", xAxis
+ panel = tc_retard_curve, West
+ panel = tc_spkcut_curve, East, {spk_mode0 > 1}
+
+ dialog = tc_mid, "", xAxis
+ panel = tc_addfuel_curve, West
+ panel = tc_nitrous_curve, East, {N2Oopt_2}
+
+ dialog = tc_btm, "", xAxis
+
+ panel = tc_boost_curve, West, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ panel = tc_boost_duty_delta_curve, East, {boost_ctl_settings_on && (boost_ctl_settings_cl != 1)}
+
+ dialog = tc_curves, "Traction Control Reactions", yAxis
+ panel = tc_top, North
+ panel = tc_mid, Center
+ panel = tc_btm, South
+
+ dialog = tcluparams, "Torque Convertor Lockup"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tclu"
+ field = "Output Pin", tclu_outpin
+ field = "Enable Input", tclu_enablepin, {tclu_outpin}
+ field = "Brake Switch", tclu_brakepin, {tclu_outpin}
+ field = "Minimum TPS", tclu_tpsmin, {tclu_outpin}
+ field = "Maximum TPS", tclu_tpsmax, {tclu_outpin}
+ field = "Minimum MAP", tclu_mapmin, {tclu_outpin}
+ field = "Maximum MAP", tclu_mapmax, {tclu_outpin}
+ field = "Use VSS", tclu_opt_vss, {tclu_outpin}
+ field = "Minimum Speed", tclu_vssmin, {tclu_outpin && tclu_opt_vss}
+ field = "Use Gear Value", tclu_opt_gear, {tclu_outpin}
+ field = "Minimum Gear", tclu_gearmin, {tclu_outpin && tclu_opt_gear}
+ field = "Activation Delay", tclu_delay, {tclu_outpin}
+
+ dialog = vvtct, ""
+ field = "."
+ field = "Input"
+ field = "Polarity"
+ field = "No. Teeth"
+ field = "Output"
+ field = "Minimum"
+ field = "Maximum"
+ field = "Int./Exh."
+ field = "Tooth 1"
+ field = "Tooth 2"
+ field = "More Duty Means"
+ field = "Output (2)"
+
+ dialog = vvtc1, ""
+ field = "#CAM1"
+ field = "", vvt_opt3_cam1, {vvt_opt1_on}
+ field = "", vvt_opt2_cam1pol,{vvt_opt1_on && ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3) && (vvt_opt4_decode ==0 )}
+ field = "", vvt_tth1, {(vvt_opt1_on > 0) && (spk_mode0 == 4)}
+ field = "", vvt_out1, {vvt_opt1_on}
+ field = "", vvt_min_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_max_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_cam1tth1, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam1tth2, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_out1_dir, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc2, ""
+ field = "#CAM2"
+ field = "", vvt_opt3_cam2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam2pol,{(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_tth2, {(vvt_opt1_on > 1) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_min_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_max_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_cam2tth1, {0}
+ field = "", vvt_cam2tth2, {0}
+ field = "", vvt_out2_dir, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc3, ""
+ field = "#CAM3"
+ field = "", vvt_opt3_cam3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam3pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth3, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam3tth1, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam3tth2, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_out3_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc4, ""
+ field = "#CAM4"
+ field = "", vvt_opt3_cam4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam4pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth4, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam4tth1, {0}
+ field = "", vvt_cam4tth2, {0}
+ field = "", vvt_out4_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtcams, "Cam Settings", xAxis
+ panel = vvtct
+ panel = vvtc1
+ panel = vvtc2
+ panel = vvtc3
+ panel = vvtc4
+
+ dialog = vvtinext, ""
+ field = "."
+ field = "Use Hold Duty"
+ field = "Hold/Neutral Duty"
+ field = "Proportional Gain"
+ field = "Integral Gain"
+ field = "Differential Gain"
+ field = "Table is Advance/Retard"
+
+ dialog = vvtinexi, ""
+ field = "#Intake"
+ field = "", vvt_opt2_use_hold_intake, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_hold_duty, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt2_use_hold_intake}
+ field = "", vvt_ctl_Kp, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Ki, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Kd, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Advance"
+
+ dialog = vvtinexe, ""
+ field = "#Exhaust"
+ field = "", vvt_opt2_use_hold_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_hold_duty_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) && vvt_opt2_use_hold_exhaust }
+ field = "", vvt_ctl_Kp_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Ki_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Kd_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_opt1_dir_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+
+ dialog = vvtinex, "PID Parameters", xAxis
+ panel = vvtinext
+ panel = vvtinexi
+ panel = vvtinexe
+
+ dialog = vvt_test, "Test", xAxis
+ field = "Cam", vvt_opt1_tst, {vvt_opt1_on}
+ field = "Duty", vvt_test_duty, {vvt_opt1_on && vvt_opt1_tst}
+
+ dialog = vvtl, ""
+ field = "No. VVTs", vvt_opt1_on
+ field = "Cam Decoder", vvt_opt4_decode,{vvt_opt1_on && (spk_mode0 == 4)}
+ field = "Frequency", vvt_opt6_freq, {vvt_opt1_on && vvt_out1}
+ field = "On/off or Variable (PID)", vvt_opt2_pid2, {vvt_opt1_on}
+ field = "Adjust Inj. Timing Based On", vvt_opt5_add1, {vvt_opt1_on}
+ field = "Commanded vs. Actual", vvt_opt5_add2, {vvt_opt1_on && vvt_opt5_add1}
+ field = "Inj. Timing Adjustment", vvt_onoff_ang, {vvt_opt1_on && !vvt_opt2_pid2 && vvt_opt5_add1}
+ field = "Load Y Axis In Tables", vvt_opt7_yaxis, {vvt_opt1_on}
+ field = "Minimum CLT", vvt_minclt, {vvt_opt1_on}
+ field = "VVT Maximum Slew", vvt_slew, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvt_test
+
+ dialog = vvtr, ""
+ field = "Control Interval", vvt_opt1_int, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Control Interval Time", vvt_ctl_ms, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt1_int}
+ field = "Range Check Measured Angles", vvt_opt5_err, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Tooth filter", vvt_opt1_filter, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Minimum VVT Duty", vvt_minduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Maximum VVT Duty", vvt_maxduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvtinex
+
+ dialog = vvtparams2, "VVT Settings", xAxis
+ panel = vvtl
+ panel = vvtr
+
+ dialog = vvtparams, "VVT Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvt"
+ panel = vvtparams2
+ panel = vvtcams
+
+ dialog = spk_trimaTblTitle, "Cyl #1"
+ panel = spk_trimaTbl
+ dialog = spk_trimbTblTitle, "Cyl #2"
+ panel = spk_trimbTbl
+ dialog = spk_trimcTblTitle, "Cyl #3"
+ panel = spk_trimcTbl
+ dialog = spk_trimdTblTitle, "Cyl #4"
+ panel = spk_trimdTbl
+
+ dialog = spk_trimadt, "", xAxis
+ panel = spk_trimaTblTitle
+ panel = spk_trimbTblTitle
+ dialog = spk_trimadb, "", xAxis
+ panel = spk_trimcTblTitle
+ panel = spk_trimdTblTitle
+
+ dialog = spk_trimad,"Spark Cyl 1-4 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimadt
+ panel = spk_trimadb
+
+ dialog = spk_trimeTblTitle, "Cyl #5"
+ panel = spk_trimeTbl
+ dialog = spk_trimfTblTitle, "Cyl #6"
+ panel = spk_trimfTbl
+ dialog = spk_trimgTblTitle, "Cyl #7"
+ panel = spk_trimgTbl
+ dialog = spk_trimhTblTitle, "Cyl #8"
+ panel = spk_trimhTbl
+
+ dialog = spk_trimeht, "", xAxis
+ panel = spk_trimeTblTitle
+ panel = spk_trimfTblTitle
+ dialog = spk_trimehb, "", xAxis
+ panel = spk_trimgTblTitle
+ panel = spk_trimhTblTitle
+
+ dialog = spk_trimeh,"Spark Cyl 5-8 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimeht
+ panel = spk_trimehb
+
+#if CYL_12_16_SUPPORT
+ dialog = spk_trimiTblTitle, "Cyl #9"
+ panel = spk_trimiTbl
+ dialog = spk_trimjTblTitle, "Cyl #10"
+ panel = spk_trimjTbl
+ dialog = spk_trimkTblTitle, "Cyl #11"
+ panel = spk_trimkTbl
+ dialog = spk_trimlTblTitle, "Cyl #12"
+ panel = spk_trimlTbl
+
+ dialog = spk_trimilt, "", xAxis
+ panel = spk_trimiTblTitle
+ panel = spk_trimjTblTitle
+
+ dialog = spk_trimilb, "", xAxis
+ panel = spk_trimkTblTitle
+ panel = spk_trimlTblTitle
+
+ dialog = spk_trimil,"Spark Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimilt
+ panel = spk_trimilb
+
+ dialog = spk_trimmTblTitle, "Cyl #13"
+ panel = spk_trimmTbl
+ dialog = spk_trimnTblTitle, "Cyl #14"
+ panel = spk_trimnTbl
+ dialog = spk_trimoTblTitle, "Cyl #15"
+ panel = spk_trimoTbl
+ dialog = spk_trimpTblTitle, "Cyl #16"
+ panel = spk_trimpTbl
+
+ dialog = spk_trimmpt, "", xAxis
+ panel = spk_trimmTblTitle
+ panel = spk_trimnTblTitle
+ dialog = spk_trimmpb, "", xAxis
+ panel = spk_trimoTblTitle
+ panel = spk_trimpTblTitle
+
+ dialog = spk_trimmp,"Spark Cyl 13-16 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimmpt
+ panel = spk_trimmpb
+#endif
+
+ dialog = inj_trimaTblTitle, "Cyl #1"
+ panel = inj_trimaTbl, Center
+ dialog = inj_trimbTblTitle, "Cyl #2"
+ panel = inj_trimbTbl
+ dialog = inj_trimcTblTitle, "Cyl #3"
+ panel = inj_trimcTbl
+ dialog = inj_trimdTblTitle, "Cyl #4"
+ panel = inj_trimdTbl
+
+ dialog = inj_trimadt, "", xAxis
+ panel = inj_trimaTblTitle
+ panel = inj_trimbTblTitle
+ dialog = inj_trimadb, "", xAxis
+ panel = inj_trimcTblTitle
+ panel = inj_trimdTblTitle
+
+ dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimadt
+ panel = inj_trimadb
+
+ dialog = inj_trimeTblTitle, "Cyl #5"
+ panel = inj_trimeTbl, Center
+ dialog = inj_trimfTblTitle, "Cyl #6"
+ panel = inj_trimfTbl
+ dialog = inj_trimgTblTitle, "Cyl #7"
+ panel = inj_trimgTbl
+ dialog = inj_trimhTblTitle, "Cyl #8"
+ panel = inj_trimhTbl
+
+ dialog = inj_trimeht, "", xAxis
+ panel = inj_trimeTblTitle
+ panel = inj_trimfTblTitle
+ dialog = inj_trimehb, "", xAxis
+ panel = inj_trimgTblTitle
+ panel = inj_trimhTblTitle
+
+ dialog = inj_trimeh,"Injector Cyl 5-7 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimeht
+ panel = inj_trimehb
+
+#if CYL_12_16_SUPPORT
+ dialog = inj_trimiTblTitle, "Cyl #9"
+ panel = inj_trimiTbl
+ dialog = inj_trimjTblTitle, "Cyl #10"
+ panel = inj_trimjTbl
+ dialog = inj_trimkTblTitle, "Cyl #11"
+ panel = inj_trimkTbl
+ dialog = inj_trimlTblTitle, "Cyl #12"
+ panel = inj_trimlTbl
+
+ dialog = inj_trimilt, "", xAxis
+ panel = inj_trimiTblTitle
+ panel = inj_trimjTblTitle
+ dialog = inj_trimilb, "", xAxis
+ panel = inj_trimkTblTitle
+ panel = inj_trimlTblTitle
+
+ dialog = inj_trimil,"Injector Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimilt
+ panel = inj_trimilb
+
+ dialog = inj_trimmTblTitle, "Cyl #13"
+ panel = inj_trimmTbl
+ dialog = inj_trimnTblTitle, "Cyl #14"
+ panel = inj_trimnTbl
+ dialog = inj_trimoTblTitle, "Cyl #15"
+ panel = inj_trimoTbl
+ dialog = inj_trimpTblTitle, "Cyl #16"
+ panel = inj_trimpTbl
+
+ dialog = inj_trimmpt, "", xAxis
+ panel = inj_trimmTblTitle
+ panel = inj_trimnTblTitle
+ dialog = inj_trimmpb, "", xAxis
+ panel = inj_trimoTblTitle
+ panel = inj_trimpTblTitle
+
+ dialog = inj_trimmp,"Injector Cyl 13-16 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimmpt
+ panel = inj_trimmpb
+#endif
+
+ dialog = antilag, "Turbo Anti-Lag (ALS)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#als"
+ field = "#Caution! Anti-lag is very hard on your turbo"
+ field = "# and engine. Use at your risk."
+ field = "Anti-lag Enable Input", als_in_pin
+; field = "Minimum TPS", als_mintps, {als_in_pin}
+ field = "Maximum TPS", als_maxtps, {als_in_pin}
+ field = "Minimum RPM", als_minrpm, {als_in_pin}
+ field = "Maximum RPM", als_maxrpm, {als_in_pin}
+ field = "Maximum MAT", als_maxmat, {als_in_pin}
+ field = "Maximum ALS time", als_maxtime, {als_in_pin}
+ field = "Time Between Activations", als_pausetime,{als_in_pin}
+ field = "Minimum CLT", als_minclt, {als_in_pin}
+ field = "Maximum CLT", als_maxclt, {als_in_pin}
+ field = "Enable Cyclic Fuel Cut", als_opt_fc, {als_in_pin && hardware_fuel && sequential}
+ field = "Fuel cut likely unsafe with Staging"
+ field = "Enable Cyclic Spark Cut", als_opt_sc, {als_in_pin}
+ field = "-"
+ field = "Enable Roving Idle Fuel Cut", als_opt_ri, {als_in_pin}
+ field = "-"
+ field = "Use Idle Valve", als_opt_idle, {als_in_pin}
+ field = "Idle Valve Duty", als_iac_duty, { als_in_pin && als_opt_idle && (IdleCtl == 2) }
+ field = "Idle Valve Steps", als_iac_steps, { als_in_pin && als_opt_idle && (IdleCtl == 3)}
+ field = "-"
+ field = "On/off Output", als_out_pin, {als_in_pin}
+ field = "-"
+ field = "PWM Output", als_opt_pwmout, {als_in_pin}
+ field = "Output Port/Pin", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ field = "Output Duty", als_pwm_duty, {als_in_pin && als_opt_pwmout}
+ field = "Frequency", als_pwm_opt_freq, {als_in_pin && als_opt_pwmout}
+ field = ""
+
+ dialog = als_left1, "Added Fuel %age"
+ panel = als_addfuel_tbl
+
+ dialog = als_left2, "ALS Timing"
+ panel = als_timing_tbl
+
+ dialog = als_right1, "Spark Cut %"
+ panel = als_sparkcut_tbl, North, {als_opt_sc}
+
+ dialog = als_right2, "Fuel Cut %"
+ panel = als_fuelcut_tbl, South, {als_opt_fc && hardware_fuel && sequential}}
+
+ dialog = antilag_left, ""
+ panel = als_left1, North
+ panel = als_left2, South
+
+ dialog = antilag_right, "", border
+ panel = als_right1, North
+ panel = als_right2, South
+
+ dialog = antilagtables, "Turbo Anti-lag Tables", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alstables"
+ panel = antilag_left, West
+ panel = antilag_right, East
+
+ dialog = flash_unlock, "Un/Lock Calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+
+ field = "Always re-lock after use"
+
+ dialog = gen_pwm_left_a, ""
+ field = "Enable Generic PWM A", pwm_opt_on_a
+ field = "Output Port/Pin", pwm_opt2_a, {pwm_opt_on_a}
+ field = "Frequency / On-Off", pwm_opt_freq_a, {pwm_opt_on_a}
+ field = "On Above Duty", pwm_onabove_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ field = "Off Below Duty", pwm_offbelow_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_a_offset, pwm_opt_load_a_size, {pwm_opt_on_a}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_a, {pwm_opt_on_a}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_grapha, "", card
+ panel = pwm_duties_Tbl_a, Center, {pwm_opt_on_a && (pwm_opt_curve_a == 0)}
+ panel = pwm_curve_a, Center, {pwm_opt_on_a && pwm_opt_curve_a}
+
+ dialog = gen_pwm_a, "Generic PWM A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_a, West
+ panel = gen_pwm_curve_grapha, Center
+
+ dialog = gen_pwm_left_b, ""
+ field = "Enable Generic PWM B", pwm_opt_on_b
+ field = "Output Port/Pin", pwm_opt2_b, {pwm_opt_on_b}
+ field = "Frequency / On-Off", pwm_opt_freq_b, {pwm_opt_on_b}
+ field = "On Above Duty", pwm_onabove_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ field = "Off Below Duty", pwm_offbelow_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_b_offset, pwm_opt_load_b_size, {pwm_opt_on_b}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_b, {pwm_opt_on_b}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphb, "", card
+ panel = pwm_duties_Tbl_b, Center, {pwm_opt_on_b && (pwm_opt_curve_b == 0)}
+ panel = pwm_curve_b, Center, {pwm_opt_on_b && pwm_opt_curve_b}
+
+ dialog = gen_pwm_b, "Generic PWM B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_b, West
+ panel = gen_pwm_curve_graphb, Center
+
+ dialog = gen_pwm_left_c, ""
+ field = "Enable Generic PWM C", pwm_opt_on_c
+ field = "Output Port/Pin", pwm_opt2_c, {pwm_opt_on_c}
+ field = "Frequency / On-Off", pwm_opt_freq_c, {pwm_opt_on_c}
+ field = "On Above Duty", pwm_onabove_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ field = "Off Below Duty", pwm_offbelow_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_c_offset, pwm_opt_load_c_size, {pwm_opt_on_c}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_c, {pwm_opt_on_c}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphc, "", card
+ panel = pwm_duties_Tbl_c, Center, {pwm_opt_on_c && (pwm_opt_curve_c == 0)}
+ panel = pwm_curve_c, Center, {pwm_opt_on_c && pwm_opt_curve_c}
+
+ dialog = gen_pwm_c, "Generic PWM C", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_c, West
+ panel = gen_pwm_curve_graphc, Center
+
+ dialog = gen_pwm_left_d, ""
+ field = "Enable Generic PWM D", pwm_opt_on_d
+ field = "Output Port/Pin", pwm_opt2_d, {pwm_opt_on_d}
+ field = "Frequency / On-Off", pwm_opt_freq_d, {pwm_opt_on_d}
+ field = "On Above Duty", pwm_onabove_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ field = "Off Below Duty", pwm_offbelow_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_d_offset, pwm_opt_load_d_size, {pwm_opt_on_d}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_d, {pwm_opt_on_d}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphd, "", card
+ panel = pwm_duties_Tbl_d, Center, {pwm_opt_on_d && (pwm_opt_curve_d == 0)}
+ panel = pwm_curve_d, Center, {pwm_opt_on_d && pwm_opt_curve_d}
+
+ dialog = gen_pwm_d, "Generic PWM D", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_d, West
+ panel = gen_pwm_curve_graphd, Center
+
+ dialog = gen_pwm_left_e, ""
+ field = "Enable Generic PWM E", pwm_opt_on_e
+ field = "Output Port/Pin", pwm_opt2_e, {pwm_opt_on_e}
+ field = "Frequency / On-Off", pwm_opt_freq_e, {pwm_opt_on_e}
+ field = "On Above Duty", pwm_onabove_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ field = "Off Below Duty", pwm_offbelow_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_e_offset, pwm_opt_load_e_size, {pwm_opt_on_e}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_e, {pwm_opt_on_e}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphe, "", card
+ panel = pwm_duties_Tbl_e, Center, {pwm_opt_on_e && (pwm_opt_curve_e == 0)}
+ panel = pwm_curve_e, Center, {pwm_opt_on_e && pwm_opt_curve_e}
+
+ dialog = gen_pwm_e, "Generic PWM E", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_e, West
+ panel = gen_pwm_curve_graphe, Center
+
+ dialog = gen_pwm_left_f, ""
+ field = "Enable Generic PWM F", pwm_opt_on_f
+ field = "Output Port/Pin", pwm_opt2_f, {pwm_opt_on_f}
+ field = "Frequency / On-Off", pwm_opt_freq_f, {pwm_opt_on_f}
+ field = "On Above Duty", pwm_onabove_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ field = "Off Below Duty", pwm_offbelow_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_f_offset, pwm_opt_load_f_size, {pwm_opt_on_f}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_f, {pwm_opt_on_f}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphf, "", card
+ panel = pwm_duties_Tbl_f, Center, {pwm_opt_on_f && (pwm_opt_curve_f == 0)}
+ panel = pwm_curve_f, Center, {pwm_opt_on_f && pwm_opt_curve_f}
+
+ dialog = gen_pwm_f, "Generic PWM F", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_f, West
+ panel = gen_pwm_curve_graphf, Center
+
+ dialog = map_sample_dialog_south, "MAP Sample General Settings"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "Map Sample Window", map_sample_duration, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = ""
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (hardware_cam == 2) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = map_sample_dialog, "MAP Sample Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mapsamp"
+ panel = mapsample_curve, Center, { !mapsample_opt2 }
+ panel = map_sample_dialog_south, South
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Mode", shift_cut_auto, { shift_cut_on }
+ field = "Cut fuel", shift_cut_fuel, { shift_cut_on }
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time (Base)", shift_cut_time, { shift_cut_on }
+ field = "Gear Based Delay", shift_cut_gear, { shift_cut_on }
+ field = "Additional Delay 1-2", shift_cut_add12, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 2-3", shift_cut_add23, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 3-4", shift_cut_add34, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 4-5", shift_cut_add45, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 5-6", shift_cut_add56, { shift_cut_on && shift_cut_gear }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_on}
+ field = "Re-Shift Hold-Off Time", shift_cut_reshift
+ field = "Automatic mode shift points"
+ field = "Shift RPM 1-2", shift_cut_rpm12, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 2-3", shift_cut_rpm23, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 3-4", shift_cut_rpm34, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 4-5", shift_cut_rpm45, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 5-6", shift_cut_rpm56, { shift_cut_on && shift_cut_auto }
+
+ dialog = fan_control, "Fan Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fanctl"
+ field = "Fan Control On", fanctl_settings_on
+ field = "Fan Control Idles up?", fanctl_settings_idleup, { fanctl_settings_on }
+ field = "Output Pin", fanctl_settings_pin, { fanctl_settings_on }
+ field = "Idle-up Delay", fanctl_idleup_delay, { fanctl_settings_on && fanctl_settings_idleup }
+ field = "Idle-up Duty", fanctl_idleup_adder_duty, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 2) }
+ field = "Idle-up Steps", fanctl_idleup_adder_steps, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 3) }
+ field = "Idle-up Target Increase", fan_idleup_cl_targetadder, { fanctl_settings_on && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Fan On Temperature", fanctl_ontemp, { fanctl_settings_on }
+ field = "Fan Off Temperature", fanctl_offtemp, { fanctl_settings_on }
+ field = "Allow fan When Engine Off", fanctl_opt2_engineoff, { fanctl_settings_on }
+ field = "Fan On With AC On?", fan_ctl_settings_acfan, { fanctl_settings_on && ac_idleup_settings }
+ field = "Fan Shutoff"
+ field = "TPS Shutoff", fan_idleup_tps_offpoint, { fanctl_settings_on }
+ field = "TPS Hysteresis", fan_idleup_tps_hyst, { fanctl_settings_on }
+ field = "VSS Shutoff", fan_idleup_vss_offpoint, { fanctl_settings_on && (vss_opt0_1) }
+ field = "VSS Hyst", fan_idleup_vss_hyst, { fanctl_settings_on && (vss_opt0_1) }
+
+ dialog = ac_idleup, "Air Conditioning Idle-Up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#acidle"
+ field = "A/C Idle-Up", ac_idleup_settings
+ field = "Idle-Up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-Up Input", ac_idleup_io_in, { ac_idleup_settings }
+ field = "Input Polarity", ac_idleup_settings_inv, { ac_idleup_settings }
+ field = "Idle-Up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-Up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor delay since last on", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty", ac_idleup_adder_duty, { (IdleCtl == 2) && ac_idleup_settings }
+ field = "Idle-up Steps", ac_idleup_adder_steps, { (IdleCtl == 3) && ac_idleup_settings }
+ field = "Idle-up Target RPM Adder", ac_idleup_cl_targetadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Idle-up CL load Allowance", ac_idleup_cl_lockout_mapadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "A/C compressor Shutoff"
+ field = "TPS Shutoff", ac_idleup_tps_offpoint, { ac_idleup_settings }
+ field = "TPS Hysteresis", ac_idleup_tps_hyst, { ac_idleup_settings }
+ field = "VSS Shutoff", ac_idleup_vss_offpoint, { ac_idleup_settings && (vss_opt0_1) }
+ field = "VSS Hysteresis", ac_idleup_vss_hyst, { ac_idleup_settings && (vss_opt0_1) }
+ field = "Maximum RPM", ac_idleup_max_rpm, { ac_idleup_settings }
+
+ dialog = sensor_source, "", yAxis
+ field = "Sensor - Source"
+ field = "01", sensor01_source
+ field = "02", sensor02_source
+ field = "03", sensor03_source
+ field = "04", sensor04_source
+ field = "05", sensor05_source
+ field = "06", sensor06_source
+ field = "07", sensor07_source
+ field = "08", sensor08_source
+
+ dialog = sensor_sourceb, "", yAxis
+ field = "Sensor - Source"
+ field = "09", sensor09_source
+ field = "10", sensor10_source
+ field = "11", sensor11_source
+ field = "12", sensor12_source
+ field = "13", sensor13_source
+ field = "14", sensor14_source
+ field = "15", sensor15_source
+ field = "16", sensor16_source
+
+ dialog = sensor_alias, "", yAxis
+ field = "Field Name"
+ field = "", sensor01Alias
+ field = "", sensor02Alias
+ field = "", sensor03Alias
+ field = "", sensor04Alias
+ field = "", sensor05Alias
+ field = "", sensor06Alias
+ field = "", sensor07Alias
+ field = "", sensor08Alias
+
+ dialog = sensor_aliasb, "", yAxis
+ field = "Field Name"
+ field = "", sensor09Alias
+ field = "", sensor10Alias
+ field = "", sensor11Alias
+ field = "", sensor12Alias
+ field = "", sensor13Alias
+ field = "", sensor14Alias
+ field = "", sensor15Alias
+ field = "", sensor16Alias
+
+ dialog = sensor_trans, "", yAxis
+ field = "Transformation"
+ field = "", sensor01_trans, {sensor01_source}
+ field = "", sensor02_trans, {sensor02_source}
+ field = "", sensor03_trans, {sensor03_source}
+ field = "", sensor04_trans, {sensor04_source}
+
+ field = "", sensor05_trans, {sensor05_source}
+ field = "", sensor06_trans, {sensor06_source}
+ field = "", sensor07_trans, {sensor07_source}
+ field = "", sensor08_trans, {sensor08_source}
+
+ dialog = sensor_transb, "", yAxis
+ field = "Transformation"
+ field = "", sensor09_trans, {sensor09_source}
+ field = "", sensor10_trans, {sensor10_source}
+ field = "", sensor11_trans, {sensor11_source}
+ field = "", sensor12_trans, {sensor12_source}
+ field = "", sensor13_trans, {sensor13_source}
+ field = "", sensor14_trans, {sensor14_source}
+ field = "", sensor15_trans, {sensor15_source}
+ field = "", sensor16_trans, {sensor16_source}
+
+ dialog = sensor_val0, "", yAxis
+ field = "0V value"
+ field = "", sensor01_val0, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_val0, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_val0, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_val0, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_val0, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_val0, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_val0, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_val0, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_val0b, "", yAxis
+ field = "0V value"
+ field = "", sensor09_val0, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_val0, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_val0, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_val0, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_val0, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_val0, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_val0, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_val0, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_max, "", yAxis
+ field = "5V value"
+ field = "", sensor01_max, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_max, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_max, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_max, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_max, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_max, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_max, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_max, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_maxb, "", yAxis
+ field = "5V value"
+ field = "", sensor09_max, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_max, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_max, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_max, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_max, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_max, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_max, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_max, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_lag, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor01LF, {sensor01_source}
+ field = "", sensor02LF, {sensor02_source}
+
+ field = "", sensor03LF, {sensor03_source}
+ field = "", sensor04LF, {sensor04_source}
+ field = "", sensor05LF, {sensor05_source}
+ field = "", sensor06LF, {sensor06_source}
+ field = "", sensor07LF, {sensor07_source}
+ field = "", sensor08LF, {sensor08_source}
+
+ dialog = sensor_lagb, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor09LF, {sensor09_source}
+ field = "", sensor10LF, {sensor10_source}
+ field = "", sensor11LF, {sensor11_source}
+ field = "", sensor12LF, {sensor12_source}
+ field = "", sensor13LF, {sensor13_source}
+ field = "", sensor14LF, {sensor14_source}
+ field = "", sensor15LF, {sensor15_source}
+ field = "", sensor16LF, {sensor16_source}
+
+ dialog = sensors_top, "Sensors 1-8", xAxis
+ panel = sensor_source
+ panel = sensor_alias
+ panel = sensor_trans
+ panel = sensor_val0
+ panel = sensor_max
+ panel = sensor_lag
+
+ dialog = sensors_btm, "Sensors 9-16", xAxis
+ panel = sensor_sourceb
+ panel = sensor_aliasb
+ panel = sensor_transb
+ panel = sensor_val0b
+ panel = sensor_maxb
+ panel = sensor_lagb
+
+ dialog = sensors_data, "", yAxis
+ panel = sensors_top
+ panel = sensors_btm
+
+ dialog = sensors_temp, "", xAxis
+ field = "Allow Input Sharing", opt142_gs_share
+ field = "CLT/MAT Units", sensor_temp
+
+ dialog = sensors, "Generic Sensor Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gensens"
+ panel = sensors_data, North
+ panel = sensors_temp, South
+
+ dialog = ITB_settings, "ITB settings"
+ field = "Percent Baro Switchpoint", ITB_load_mappoint
+ field = "Idle TPS Threshold", ITB_load_idletpsthresh
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#itbload"
+ panel = ITB_settings, South
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, East
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafset"
+ field = "Sensor Type", MAFOption_t
+ field = "Voltage Input Port", MAFOption, {MAFOption_t == 0}
+ field = "Frequency Input Port", MAFOption_f, {MAFOption_t == 1}
+ field = "Low Frequency", maf_freq0, {MAFOption_t == 1}
+ field = "High Frequency", maf_freq1, {MAFOption_t == 1}
+ field = "MAT Correction Curve", feature7_mafmat, {MAFOption_t < 2}
+ field = "Use VE1 As Trim Table", feature7_maftrim, {(algorithm == 5) && (MAFOption_t < 2) }
+ field = "MAF Sensor Range", maf_range, {MAFOption_t < 2}
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-Style Calibration Curve (See Tools Menu)", feature7_mafcalib, {MAFOption_t < 2}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical values are 0.0V and 29.7V"
+
+ dialog = waterinj_topl, ""
+ field = "Enable Water/Meth Injection", water_freq_on
+ field = "Pump Output", water_pins_pump, {water_freq_on}
+ field = "Valve Style", water_freq_type, {water_freq_on}
+ field = "Frequency", water_freq, {water_freq_on && (water_freq_type ==2)}
+ field = "Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ dialog = waterinj_topr, ""
+ field = "Enable When.."
+ field = "TPS >", water_tps, {water_freq_on}
+ field = "RPM >", water_rpm, {water_freq_on}
+ field = "MAP >", water_map, {water_freq_on}
+ field = "MAT >", water_mat, {water_freq_on}
+ field = ""
+ field = "Low Fluid Level Input", water_pins_in_shut, {water_freq_on}
+
+ dialog = waterinj_top, "", border
+ panel = waterinj_topl, West
+ panel = waterinj_topr, East
+
+ dialog = waterinj, "Water Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#water"
+ panel = waterinj_top, North
+ panel = waterinjTbl, Center
+
+ dialog = vss1, "Vehicle Speed Sensor 1"
+ field = "VSS1 Input Type", vss_opt0_1
+ field = "Analogue Input", vss1_an, {vss_opt0_1 == 2}
+ field = "Full Scale Speed", vss1_an_max, {vss_opt0_1 == 2}
+ field = "Digital Input", vss_opt1, {vss_opt0_1 == 1}
+ field = "Wheel Diameter", wheeldia1, {vss_opt1 && (((vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss1_pos, {vss_opt0_1 == 1}
+ field = "Pulses", vss1_can_scale_pulse, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth1, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)}
+ field = "PWM Port", vss1_pwmseq, {(vss_opt1 ==15) && (vss_opt0_1 == 1)}
+ field = "Scaler", vss1_can_scale, {(vss_opt1 ==14) && (vss_opt0_1 == 1)}
+ field = "Smoothing lag factor", vss1LF, {vss_opt0_1}
+
+ dialog = vss2, "Vehicle speed sensor 2"
+ field = "VSS2 Input Type", vss_opt0_2
+ field = "Analogue Input", vss2_an, {vss_opt0_2 == 2}
+ field = "Full Scale Speed", vss2_an_max, {vss_opt0_2 == 2}
+ field = "Digital Input", vss_opt2, {vss_opt0_2 == 1}
+ field = "Wheel Diameter", wheeldia2, {vss_opt2 && (((vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss2_pos, {vss_opt0_2 == 1}
+ field = "Pulses", vss2_can_scale_pulse, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth2, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)}
+ field = "PWM Port", vss2_pwmseq, {(vss_opt2 ==15) && (vss_opt0_2 == 1)}
+ field = "Scaler", vss2_can_scale, {(vss_opt2 ==14) && (vss_opt0_2 == 1)}
+ field = "Smoothing Lag Factor", vss2LF, {vss_opt0_2}
+
+ dialog = vss3, "Vehicle Speed Sensor 3 (Matches VSS1)"
+ field = "VSS3 Input Type", vss_opt0_3, {vss_opt0_1}
+ field = "Analogue Input", vss3_an, {vss_opt0_3 && (vss_opt0_1 == 2)}
+ field = "Digital Input", vss_opt3, {vss_opt0_3 && (vss_opt0_1 == 1)}
+ field = "PWM Port", vss3_pwmseq, {(vss_opt3 ==15) && vss_opt0_3 && (vss_opt0_1 == 1)}
+
+ dialog = vss4, "Vehicle speed sensor 4 (matches VSS2)"
+ field = "VSS4 input type", vss_opt0_4, {vss_opt0_2}
+ field = "Analogue Input", vss4_an, {vss_opt0_4 && (vss_opt0_2 == 2)}
+ field = "Digital Input", vss_opt4, {vss_opt0_4 && (vss_opt0_2 == 1)}
+ field = "PWM Port", vss4_pwmseq, {(vss_opt4 ==15) && vss_opt0_4 && (vss_opt0_4 == 1)}
+
+ dialog = vssout, "VSS Output"
+ field = "VSS Output", vssout_opt
+ field = "VSSout Units", vssout_optunits, { vssout_opt }
+ field = "Scale", vssout_scale, { vssout_opt }
+
+ dialog = vssdotlag, "VSSdot Smoothing"
+ field = "Sample Interval", vssdot_int
+ field = "Lag factor", vssdotLF
+
+ dialog = vsssamp, "VSS Sampling"
+ field = "VSS Sample Interval", vss_samp_int
+
+ dialog = gears, "Gear detection"
+ field = "Final Drive Ratio", fdratio1
+
+ field = "Method", gear_method
+ field = "Number Of Gears", gear_no, {gear_method}
+ field = "1st Ratio", gear1ratio, { (gear_method == 1) }
+ field = "2nd Ratio", gear2ratio, { (gear_method == 1) && (gear_no > 1) } ; would be pretty pointless otherwise!
+ field = "3rd Ratio", gear3ratio, { (gear_method == 1) && (gear_no > 2) }
+ field = "4th Ratio", gear4ratio, { (gear_method == 1) && (gear_no > 3) }
+ field = "5th Ratio", gear5ratio, { (gear_method == 1) && (gear_no > 4) }
+ field = "6th Ratio", gear6ratio, { (gear_method == 1) && (gear_no > 5) }
+ field = ""
+ field = "Input Port", gear_port_an, { (gear_method == 2) }
+ field = "Neutral Voltage", gear0v, { (gear_method == 2) }
+ field = "1st Gear Voltage", gear1v, { (gear_method == 2) }
+ field = "2nd Gear Voltage", gear2v, { (gear_method == 2) && (gear_no > 1) }
+ field = "3rd Gear Voltage", gear3v, { (gear_method == 2) && (gear_no > 2) }
+ field = "4th Gear Voltage", gear4v, { (gear_method == 2) && (gear_no > 3) }
+ field = "5th Gear Voltage", gear5v, { (gear_method == 2) && (gear_no > 4) }
+ field = "6th Gear Voltage", gear6v, { (gear_method == 2) && (gear_no > 5) }
+
+ dialog = vssunits, "Units"
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+
+ dialog = ssnorth, "", border
+ panel = vss1, West
+ panel = vss2, East
+
+ dialog = vss34, "", border
+ panel = vss3, West
+ panel = vss4, East
+
+ dialog = gearsunits, "", border
+ panel = gears, North
+ panel = vssunits, South
+
+ dialog = vssoutdotr, "", border
+ panel = vssdotlag, East
+ panel = vsssamp, South
+
+ dialog = vssoutdot, "", border
+ panel = vssout, West
+ panel = vssoutdotr, East
+
+ dialog = sssouth, "", border
+ panel = vss34, North
+ panel = vssoutdot, South
+
+ dialog = speedsensorsmain, "", yAxis
+ panel = ssnorth
+ panel = sssouth
+
+ dialog = speedsensors, "Speed and Gear Sensors", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#speedgear"
+ panel = speedsensorsmain, West
+ panel = gearsunits, East
+
+ dialog = ss, "Shaft Speed Sensors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shaftspeed"
+ field = "Sensor 1", ss_opt1
+ field = "Speed sensor #teeth", reluctorteeth3, {ss_opt1 && ss_opt1<15}
+ field = "High Speed Input", ss_opt1_spd, {(ss_opt1 == 4) || (ss_opt1 == 10) || (ss_opt1 == 11) || (ss_opt1 == 12)}
+ field = "Smoothing Lag Factor", ss1LF ;, {ss_opt2 && ss_opt2<15}
+ field = ""
+ field = "Sensor 2", ss_opt2
+ field = "Speed Sensor #Teeth", reluctorteeth4, {ss_opt2 && ss_opt2<15}
+ field = "High Speed Input", ss_opt2_spd, {(ss_opt2 == 4) || (ss_opt2 == 10) || (ss_opt2 == 11) || (ss_opt2 == 12)}
+ field = "Smoothing Lag Factor", ss2LF ;, {ss_opt2 && ss_opt2<15}
+
+ dialog = accelerometer, "Accelerometer Parameters"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelerometer"
+ field = "X Input", accXport
+ field = "Y Input", accYport
+ field = "Z Input", accZport
+ field = "X -1g Calib.", accXcal1, { accXport }
+ field = "X +1g Calib.", accXcal2, { accXport }
+ field = "Y -1g Calib.", accYcal1, { accYport }
+ field = "Y +1g Calib.", accYcal2, { accYport }
+ field = "Z -1g Calib.", accZcal1, { accZport }
+ field = "Z +1g Calib.", accZcal2, { accZport }
+ field = "Lag factor", accxyzLF
+
+ dialog = sdcard_top, ""
+ field = "SD Card Logging:", log_style_on2
+ field = "Datalog Button", log_style2_but, {log_style_on2 == 2}
+ field = "Trigger", log_style4_opt, {log_style_on2 == 3}
+ field = "RPM >", log_trig_rpm, {(log_style_on2 == 3) && (log_style4_opt == 0)}
+ field = "TPS >", log_trig_tps, {(log_style_on2 == 3) && (log_style4_opt == 1)}
+ field = "MAP >", log_trig_map, {(log_style_on2 == 3) && (log_style4_opt == 2)}
+ field = "LED Indicator", log_style_led, {log_style_on2}
+ field = "Log Data Block Size", log_style_block, {log_style_on2}
+ field = "Interleave GPS Data", log_style_gps, {log_style_on2}
+ field = "Sampling", log_style2_samp, {(log_style_block != 1) && log_style_on2 }
+ field = "Sample Interval", log_int, {(log_style_block != 1) && log_style_on2 }
+ displayOnlyField = "Frames/Second", log_rate, {(log_style_block != 1) && log_style_on2 }
+ field = "Log File Max Duration", log_length, {log_style_on2}
+ field = "Stream Input", log_style3_adc, {log_style_block == 1}
+ field = "SPI Comms Speed", log_style_ledspd, {log_style_on2}
+ field = "Trigger pulse output", sdpulse_out, {log_style_on2 >= 2}
+
+ dialog = sdcard_btm, ""
+ logFieldSelector = dataLogFieldSelector, "Log Field Selection", logFieldOffset, logFieldLength, 55
+
+ dialog = sdcard_datalog, "SD Card Datalogging", yAxis
+ panel = sdcard_top
+ panel = dataLogFieldSelector
+
+ dialog = N2OSystem_topl, ""
+ field = "Nitrous Control", N2Oopt_2
+ field = "Enable N2O When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Enrich Which Bank", N2Oopt_01, { N2Oopt_2 }
+
+ dialog = N2OSystem_topr, ""
+ field = "On/Off vs Progressive Mode", N2Oopt2_prog, { N2Oopt_2 }
+ field = "Time, RPM, VSS-Based", N2Oopt2_prog_time, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Solenoid Frequency", N2Oopt2_prog_freq, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Fuel Solenoid Frequency", N2Oopt2_prog_freqf, { N2Oopt_2 && N2Oopt2_prog && (n2o1f_pins > 0) }
+ field = "AFR Safety Uses AFR2 Targets", N2Oopt_4, { N2Oopt_2 }
+ field = ""
+ field = "READ THE MANUAL BEFORE USING NITROUS"
+
+ dialog = N2OSystem1, "Nitrous System Stage 1"
+ field = "Stage 1 Output - Nitrous", n2o1n_pins, { N2Oopt_2 }
+ field = "Stage 1 Output - Fuel", n2o1f_pins, { N2Oopt_2 }
+ field = "Enable Input On:", N2Oopt_pins, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Min RPM", N2OPWLo, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 && !N2Oopt2_prog }
+ field = "Retard Ignition By", N2OAngle, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = "Allow Nitrous During Launch", N2Oopt_5, { N2Oopt_2 && launch_opt_on }
+ field = "Max MAP During Launch", N2Olaunchmaxmap,{ N2Oopt_2 && launch_opt_on && N2Oopt_5}
+
+ dialog = N2OSystem2, "Nitrous System Stage 2"
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+ field = "Stage 2 Output - Nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Stage 2 Output - Fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Enable Stage 2 Above", N2O2Rpm, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Max RPM", N2O2RpmMax, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Delay After Stage1", N2O2delay, { N2Oopt_2 && N2Oopt_3 && (!N2Oopt2_prog || (N2Oopt2_prog_time==0)) }
+ field = "Retard Ignition By", N2O2Angle, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+
+ dialog = N2OSystem_top, "", border
+ panel = N2OSystem_topl, West
+ panel = N2OSystem_topr, East
+
+ dialog = N2OSystems, "", border
+ panel = N2OSystem1, West
+ panel = N2OSystem2, East
+
+ dialog = nitrous, "Nitrous System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = N2OSystem_top, North
+ panel = N2OSystems, South
+
+ dialog = n2o1_curves_time, ""
+ panel = n2o1_duty_time
+ panel = n2o1_pw_time
+ panel = n2o1_retard_time
+
+ dialog = n2o2_curves_time, ""
+ panel = n2o2_duty_time
+ panel = n2o2_pw_time
+ panel = n2o2_retard_time
+
+ dialog = nitrous_curves_time, "Nitrous - Time-Based Progressive", border
+ panel = n2o1_curves_time, West
+ panel = n2o2_curves_time, East
+
+ dialog = n2o1_curves_rpm, ""
+ panel = n2o1_duty_rpm
+ panel = n2o1_pw_rpm
+ panel = n2o1_retard_rpm
+
+ dialog = n2o2_curves_rpm, ""
+ panel = n2o2_duty_rpm
+ panel = n2o2_pw_rpm
+ panel = n2o2_retard_rpm
+
+ dialog = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", border
+ panel = n2o1_curves_rpm, West
+ panel = n2o2_curves_rpm, East
+
+ dialog = n2o1_curves_vss, ""
+ panel = n2o1_duty_vss
+ panel = n2o1_pw_vss
+ panel = n2o1_retard_vss
+
+ dialog = n2o2_curves_vss, ""
+ panel = n2o2_duty_vss
+ panel = n2o2_pw_vss
+ panel = n2o2_retard_vss
+
+ dialog = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", border
+ panel = n2o1_curves_vss, West
+ panel = n2o2_curves_vss, East
+
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ field = "Alt. Maximum Boost", OverBoostKpa2, { (tsw_pin_ob && (OverBoostOption > 0)) || dualfuel_sw2_ob }
+
+ dialog = boostfeat, ""
+ field = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ field = "Boost Table Switching Gear", boost_gear_switch, { boost_feats_tsw == 15 }
+ field = "Boost Timed From Launch", boost_feats_timed, {boost_ctl_settings_on && launch_opt_on}
+ field = "Specific Launch Duty/Target", boost_feats_launch, {boost_ctl_settings_on && launch_opt_on}
+ field = "Launch Boost Duty", boost_launch_duty, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl == 0}
+ field = "Launch Boost Target", boost_launch_target, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl}
+ field = "Boost vs Speed / Gear", boost_vss, {boost_ctl_settings_on}
+ field = "Above TPS", boost_vss_tps, {boost_ctl_settings_on && boost_vss}
+ field = "Per Gear Targets:"
+
+ dialog = boostgeartargsl, "", yAxis
+ field = "1", boost_geartarg1, {(boost_vss == 3) && gear_method && (gear_no > 0) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "2", boost_geartarg2, {(boost_vss == 3) && gear_method && (gear_no > 1) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "3", boost_geartarg3, {(boost_vss == 3) && gear_method && (gear_no > 2) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargsr, "", yAxis
+ field = "4", boost_geartarg4, {(boost_vss == 3) && gear_method && (gear_no > 3) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "5", boost_geartarg5, {(boost_vss == 3) && gear_method && (gear_no > 4) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "6", boost_geartarg6, {(boost_vss == 3) && gear_method && (gear_no > 5) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargs, "", border
+ panel = boostgeartargsl, West
+ panel = boostgeartargsr, East
+
+ dialog = boostctlSettings, "Boost Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost"
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Solenoid Freq. Range", boost_ctl_pwm, {boost_ctl_settings_on}
+ field = "Solenoid Frequency (Mid)", boost_ctl_pwm_scale, { boost_ctl_settings_on && (boost_ctl_pwm == 1)}
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ field = "Solenoid Frequency (Slow)", boost_ctl_settings_freq, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Minimum Duty", boost_ctl_closeduty, {boost_ctl_settings_on }
+ field = "Maximum Duty", boost_ctl_openduty, {boost_ctl_settings_on }
+ field = "Boost Control Lower CLT Threshold",boost_ctl_clt_threshold, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on && boost_ctl_settings_on}
+ field = "Tuning Mode", boost_ctl_flags, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl && ((boost_ctl_flags == 2) || (boost_ctl_flags == 3)) }
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+
+ dialog = boosteast, ""
+ panel = overboost, North
+ panel = boostfeat, Center
+ panel = boostgeartargs, South
+
+ dialog = boost, "Boost Control Setings", border
+ panel = boostctlSettings, West
+ panel = boosteast, East
+
+ dialog = boostctlSettings2, "Boost Control Settings 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost2"
+ field = "Boost Control Enabled", boost_ctl_settings_on2, {boost_ctl_settings_on}
+ field = "Target duty and boost tables 2 are used."
+ field = "Boost vs VSS or time or tableswitch not supported."
+ field = "Frequencies same as channel 1"
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ field = ""
+ field = "Minimum Duty", boost_ctl_closeduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Maximum Duty", boost_ctl_openduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Boost Control Lower Limit", boost_ctl_lowerlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 }
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl2, {boost_ctl_settings_on && boost_ctl_settings_on2}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity2, horizontal, {boost_ctl_settings_on2 && boost_ctl_settings_cl2 && ((boost_ctl_flags2 == 2) || (boost_ctl_flags2 == 3)) }
+ field = "Tuning Mode", boost_ctl_flags2, {boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Proportional Gain", boost_ctl_Kp2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Integral Gain", boost_ctl_Ki2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Differential Gain", boost_ctl_Kd2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "MAP Sensor To Target", boost_ctl_sensor2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && 0}
+ field = "Must be defined in Generic Sensors"
+
+ dialog = maxafrset, ""
+ field = "Enable AFR Safety", maxafr_opt1_on
+ field = "Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "Load Axis", maxafr_opt1_load, { maxafr_opt1_on }
+ field = "Check above Load", maxafr_en_load, { maxafr_opt1_on }
+ field = "Check above RPM", maxafr_en_rpm, { maxafr_opt1_on }
+ field = "Wait for", maxafr_en_time, { maxafr_opt1_on }
+ field = "Kill spark For", maxafr_spkcut_time, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ field = "Then kill fuel until..." ;, "", { maxafr_opt1_on || egt_conf_action}
+ field = "TPS Below", maxafr_ret_tps, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "MAP Below", maxafr_ret_map, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "RPM Below", maxafr_ret_rpm, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ dialog = maxafrTbls, "AFR Difference Table", border
+ panel = maxafr1Tbl, West
+
+ dialog = maxafr, "AFR Safety System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afrsafety"
+ panel = maxafrset, West
+ panel = maxafrTbls, East
+
+ dialog = egtwestn, "Configuration"
+ field = "No. EGT inputs", egt_num
+ field = ""
+ field = "Calibration - see documentation"
+ field = "Temp At 0V", egtcal_temp0, {egt_num}
+ field = "Temp At 5V", egtcal_tempmax, {egt_num}
+
+ dialog = egtwests, "Actions"
+ field = "EGT Actions", egt_conf_action
+ field = "Warning LED same as AFR safety"
+ field = "Warn Temperature", egt_warn, {egt_conf_action}
+ field = "Added Fuel", egt_addfuel, {egt_conf_action}
+ field = "Add To", egt_conf_bank, {egt_conf_action}
+ field = "Per cylinder", egt_conf_percyl, {egt_conf_action && (sequential == 2) }
+ field = "Shutdown Engine", egt_conf_shutdown, {egt_conf_action}
+ field = "Time > Warn Temp", egt_time, {egt_conf_action && egt_conf_shutdown}
+ field = "Max Temperature", egt_max, {egt_conf_action && egt_conf_shutdown}
+ field = "See AFR safety for shutdown options"
+
+ dialog = egtwest, "", yAxis
+ panel = egtwestn, North
+ panel = egtwests, South
+
+ dialog = egteast, "Data capture"
+ field = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ field = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ field = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ field = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ field = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ field = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ field = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ field = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ field = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ field = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ field = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ field = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ field = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ field = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ field = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ field = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+
+ dialog = egt, "EGT / Thermocouple Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egt"
+ panel = egtwest, West
+ panel = egteast, East
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable sequenced batch fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_enable_on
+ field = "Enable PWM Polling", enable_pollPWM, {can_enable_on}
+ field = "Remote CAN Id", can_poll_id, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Number For PWM Data", poll_tablePWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Offset For PWM Data", poll_offsetPWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Clock", canpwm_clk, { enable_pollPWM && can_enable_on}
+ field = "Remote Prescale", canpwm_pre, { enable_pollPWM && can_enable_on}
+ field = "Remote Divider", canpwm_div, { enable_pollPWM && can_enable_on}
+ field = ""
+ field = "Enable ADC Polling", enable_pollADC, {can_enable_on}
+
+ dialog = caneast, ""
+ field = "Digital ports"
+ field = "Remote CAN Id", can_poll_id_ports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Table", poll_tableports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Enable Input Port", enable_pollports_digin
+ field = "Offset", can_poll_digin_offset, { enable_pollports_digin}
+ field = "Enable Output Port", enable_pollports_digout
+ field = "Offset", can_poll_digout_offset, { enable_pollports_digout}
+ field = ""
+ field = "Enable PWM Outputs", enable_pwmout
+
+ field = "Remote CAN Id", can_pwmout_id, { enable_pwmout }
+ field = "Table", can_pwmout_tab, { enable_pwmout }
+ field = "Offset", can_pwmout_offset, { enable_pwmout }
+ field = "Force Duty To 0-255", enable_pwmout255
+
+ ;CAN adcs
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC group on/off"
+ field = "CAN ADC 1- 4", canadc_opt1, { enable_pollADC }
+ field = "CAN ADC 5- 8", canadc_opt2, { enable_pollADC }
+ field = "CAN ADC 9-12", canadc_opt3, { enable_pollADC }
+ field = "CAN ADC 13-16", canadc_opt4, { enable_pollADC }
+ field = "CAN ADC 17-20", canadc_opt5, { enable_pollADC }
+ field = "CAN ADC 21-24", canadc_opt6, { enable_pollADC }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", canadc_id1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_id2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_id3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_id4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_id5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_id6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", canadc_tab1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_tab2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_tab3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_tab4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_tab5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_tab6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", canadc_off1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_off2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_off3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_off4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_off5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_off6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadcs, "CAN ADC selection", xAxis
+
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest, West
+ panel = caneast, East, {can_enable_on}
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canparams"
+ panel = can_top, North
+ panel = canadcs, South, {can_enable_on}
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = canvss, "CAN VSS and gear selection"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canvss"
+ field = "This is for polling the actual vehicle speed"
+ field = "mph/kph from a remote device."
+ field = "For a pulse input use the CAN PWM instead"
+ field = "Mode", can_poll2_vss
+ field = "Remote CAN Id", vss1_can_id, {can_poll2_vss}
+ field = "Remote CAN Table", vss1_can_table, {can_poll2_vss}
+ field = ""
+ field = "VSS1 Offset", vss1_can_offset, {(vss_opt0_1 == 1) && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss1_can_size, {vss_opt1 == 0x0e}
+ field = ""
+ field = "VSS2 Offset", vss2_can_offset, {(vss_opt0_2 == 1) && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss2_can_size, {vss_opt2 == 0x0e}
+ field = ""
+ field = "VSS3 Offset", vss3_can_offset, {(vss_opt0_1 == 1) && vss_opt0_3 && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "VSS4 Offset", vss4_can_offset, {(vss_opt0_2 == 1) && vss_opt0_4 && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = ""
+ field = "Gear# Offset", gear_can_offset, {((gear_method & 0x03) == 0x03)}
+
+ dialog = canrtc, "Real Time Clock"
+ field = "Enable Real Time Clock", opt142_rtc
+ field = "Trim +/-", rtc_trim, {opt142_rtc}
+ field = "Remote CAN Id", can_poll_id_rtc, {(opt142_rtc == 2) && can_enable_on}
+ field = "Table", poll_table_rtc, {(opt142_rtc == 2) && can_enable_on }
+ field = "Offset", poll_offset_rtc, {(opt142_rtc == 2) && can_enable_on}
+
+ dialog = canego1, "EGO Data Via CAN"
+ field = "Fetch EGO Data", can_poll2_ego2
+ field = "Remote CAN Id", can_ego_id, {can_poll2_ego2}
+ field = "Table", can_ego_table, {can_poll2_ego2}
+ field = "Offset", can_ego_offset, {can_poll2_ego2}
+ field = "Smoothing", can_poll2_egolag, {can_poll2_ego2}
+
+ dialog = cangps, "GPS Data Via CAN"
+ field = "Fetch GPS Data", can_poll2_gps
+ field = "Remote CAN Id", can_gps_id, {can_poll2_gps}
+ field = "Table", can_gps_table, {can_poll2_gps}
+ field = "Offset", can_gps_offset, {can_poll2_gps}
+
+ dialog = canego, "CAN EGO, GPS", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canegogps"
+ panel = canego1
+ panel = cangps
+
+ dialog = realtimeclock, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rtc"
+ panel = canrtc
+ panel = std_ms3Rtc
+
+ dialog = tablesw1, "Table Switching"
+ field = "Fuel Table Switching", f5_0_tsf, { !(dualfuel_sw_on && dualfuel_sw_fuel) }
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "Input pin", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "RPM greater than", tsf_rpm, { f5_0_tsf && (f5_0_tsf_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "MAP greater than", tsf_kpa, { f5_0_tsf && (f5_0_tsf_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "TPS greater than", tsf_tps, { f5_0_tsf && (f5_0_tsf_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = ""
+ field = "Spark Table Switching", f5_0_tss, { !(dualfuel_sw_on && dualfuel_sw_spk) }
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "Input Pin", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && (f5_0_tss_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && (f5_0_tss_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && (f5_0_tss_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = ""
+ field = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ field = "Alternate ReqFuel (Lower Number)", ReqFuel_alt, { tsw_pin_rf || (dualfuel_sw_on && dualfuel_sw_rf)}
+ field = ""
+ field = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ field = ""
+ field = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = "Alternate Stoich", stoich_alt, { tsw_pin_stoich || (dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = ""
+ field = "Boost control table switching is on the boost control menu"
+
+ dialog = dualfuel, "Dual Fuel switching"
+ field = "Dual Fuel Enable", dualfuel_sw_on
+ field = "Mode", dualfuel_opt_mode, { dualfuel_sw_on }
+ field = "Outputs Mode", dualfuel_opt_out, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { dualfuel_sw_on && (dualfuel_opt_mode < 2) && (dualfuel_opt_out || dualfuel_opt_mode) }
+;was { ((dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && ((nCylinders <= 4)) || ((nCylinders > 4) && (sequential == 1))) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { (dualfuel_opt_mode < 2) && ((dualfuel_opt_out || dualfuel_opt_mode) && staged_extended_opts_use_v3) || ((nCylinders > 4) && (dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && !(sequential & 0x1)) }
+ field = "Input Pin", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Fuel Tables", dualfuel_sw_fuel, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Spark Tables", dualfuel_sw_spk, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AFR Tables", dualfuel_sw_afr, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. ReqFuel", dualfuel_sw_rf, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Stoich", dualfuel_sw_stoich, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Warmup", dualfuel_sw_wue, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AfterStart", dualfuel_sw_ase, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Priming", dualfuel_sw2_prime, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Cranking Pulse", dualfuel_sw2_crank, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Injector Params", dualfuel_sw2_injp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Small Pulsewidths", dualfuel_sw2_smpw, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Overboost", dualfuel_sw2_ob, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Boost Table", dualfuel_sw2_boosw, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Accel Enrich", dualfuel_sw2_ae, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = ""
+ field = "Enable Temperature Adjustment", dualfuel_opt_temp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Temperature On", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp && (dualfuel_opt_mode == 0)}
+ field = "Enable Pressure Adjustment", dualfuel_opt_press, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Pressure In kPa On", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press && (dualfuel_opt_mode == 0)}
+ field = "Sensor Type", dualfuel_press_type, { dualfuel_sw_on && dualfuel_opt_press && dualfuel_press_sens && (dualfuel_opt_mode == 0)}
+
+ dialog = tablesw, "Table Switch/Dual Fuel", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tablesw"
+ panel = tablesw1, West
+ panel = dualfuel, East
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-on-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "Injector PWM parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testinjspk"
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtesta0, "Inj A", yAxis
+ commandButton = "Off", cmdtesta0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta0on, { status3 & 8 }
+ dialog = outputtesta1, "Inj B", yAxis
+ commandButton = "Off", cmdtesta1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta1on, { status3 & 8 }
+ dialog = outputtesta2, "Inj C", yAxis
+ commandButton = "Off", cmdtesta2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta2on, { status3 & 8 }
+ dialog = outputtesta3, "Inj D", yAxis
+ commandButton = "Off", cmdtesta3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta3on, { status3 & 8 }
+ dialog = outputtesta4, "Inj E", yAxis
+ commandButton = "Off", cmdtesta4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta4on, { status3 & 8 }
+ dialog = outputtesta5, "Inj F", yAxis
+ commandButton = "Off", cmdtesta5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta5on, { status3 & 8 }
+ dialog = outputtesta6, "Inj G", yAxis
+ commandButton = "Off", cmdtesta6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta6on, { status3 & 8 }
+ dialog = outputtesta7, "Inj H", yAxis
+ commandButton = "Off", cmdtesta7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta7on, { status3 & 8 }
+
+ dialog = outputtest_io1inj, "Inj Outputs", xAxis
+ panel = outputtesta0
+ panel = outputtesta1
+ panel = outputtesta2
+ panel = outputtesta3
+ panel = outputtesta4
+ panel = outputtesta5
+ panel = outputtesta6
+ panel = outputtesta7
+
+ dialog = outputtestb0, "Spk A", yAxis
+ commandButton = "Off", cmdtestb0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb0on, { status3 & 8 }
+ dialog = outputtestb1, "Spk B", yAxis
+ commandButton = "Off", cmdtestb1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb1on, { status3 & 8 }
+ dialog = outputtestb2, "Spk C", yAxis
+ commandButton = "Off", cmdtestb2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb2on, { status3 & 8 }
+ dialog = outputtestb3, "Spk D", yAxis
+ commandButton = "Off", cmdtestb3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb3on, { status3 & 8 }
+ dialog = outputtestb4, "Spk E", yAxis
+ commandButton = "Off", cmdtestb4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb4on, { status3 & 8 }
+ dialog = outputtestb5, "Spk F", yAxis
+ commandButton = "Off", cmdtestb5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb5on, { status3 & 8 }
+ dialog = outputtestb6, "Spk G", yAxis
+ commandButton = "Off", cmdtestb6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb6on, { status3 & 8 }
+ dialog = outputtestb7, "Spk H", yAxis
+ commandButton = "Off", cmdtestb7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb7on, { status3 & 8 }
+
+ dialog = outputtest_io1spk, "Spk Outputs", xAxis
+ panel = outputtestb0
+ panel = outputtestb1
+ panel = outputtestb2
+ panel = outputtestb3
+ panel = outputtestb4
+ panel = outputtestb5
+ panel = outputtestb6
+ panel = outputtestb7
+
+ dialog = outputtestcano0, "OUT1", yAxis
+ commandButton = "Off", cmdtestcano0off, { (status3 & 8) && (canout1_8 & 1) }
+; commandButton = "Pulsed", cmdtestcano0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano0on, { (status3 & 8) && ((canout1_8 & 1) == 0) }
+ dialog = outputtestcano1, "OUT2", yAxis
+ commandButton = "Off", cmdtestcano1off, { (status3 & 8) && (canout1_8 & 2) }
+; commandButton = "Pulsed", cmdtestcano1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano1on, { (status3 & 8) && ((canout1_8 & 2) == 0) }
+ dialog = outputtestcano2, "OUT3", yAxis
+ commandButton = "Off", cmdtestcano2off, { (status3 & 8) && (canout1_8 & 4) }
+; commandButton = "Pulsed", cmdtestcano2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano2on, { (status3 & 8) && ((canout1_8 & 4) == 0) }
+ dialog = outputtestcano3, "OUT4", yAxis
+ commandButton = "Off", cmdtestcano3off, { (status3 & 8) && (canout1_8 & 8) }
+; commandButton = "Pulsed", cmdtestcano3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano3on, { (status3 & 8) && ((canout1_8 & 8) == 0) }
+ dialog = outputtestcano4, "OUT5", yAxis
+ commandButton = "Off", cmdtestcano4off, { (status3 & 8) && (canout1_8 & 16) }
+; commandButton = "Pulsed", cmdtestcano4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano4on, { (status3 & 8) && ((canout1_8 & 16) == 0) }
+ dialog = outputtestcano5, "OUT6", yAxis
+ commandButton = "Off", cmdtestcano5off, { (status3 & 8) && (canout1_8 & 32) }
+; commandButton = "Pulsed", cmdtestcano5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano5on, { (status3 & 8) && ((canout1_8 & 32) == 0) }
+ dialog = outputtestcano6, "OUT7", yAxis
+ commandButton = "Off", cmdtestcano6off, { (status3 & 8) && (canout1_8 & 64) }
+; commandButton = "Pulsed", cmdtestcano6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano6on, { (status3 & 8) && ((canout1_8 & 64) == 0) }
+ dialog = outputtestcano7, "OUT8", yAxis
+ commandButton = "Off", cmdtestcano7off, { (status3 & 8) && (canout1_8 & 128) }
+; commandButton = "Pulsed", cmdtestcano7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano7on, { (status3 & 8) && ((canout1_8 & 128) == 0) }
+
+ dialog = outputtest_iocano, "CANOUT1-8", xAxis
+ panel = outputtestcano0
+ panel = outputtestcano1
+ panel = outputtestcano2
+ panel = outputtestcano3
+ panel = outputtestcano4
+ panel = outputtestcano5
+ panel = outputtestcano6
+ panel = outputtestcano7
+
+ dialog = outputtestcano8, "OUT9", yAxis
+ commandButton = "Off", cmdtestcano8off, { (status3 & 8) && (canout9_16 & 1) }
+; commandButton = "Pulsed", cmdtestcano8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano8on, { (status3 & 8) && ((canout9_16 & 1) == 0) }
+ dialog = outputtestcano9, "OUT10", yAxis
+ commandButton = "Off", cmdtestcano9off, { (status3 & 8) && (canout9_16 & 2) }
+; commandButton = "Pulsed", cmdtestcano9pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano9on, { (status3 & 8) && ((canout9_16 & 2) == 0) }
+ dialog = outputtestcano10, "OUT11", yAxis
+ commandButton = "Off", cmdtestcano10off, { (status3 & 8) && (canout9_16 & 4) }
+; commandButton = "Pulsed", cmdtestcano10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano10on, { (status3 & 8) && ((canout9_16 & 4) == 0) }
+ dialog = outputtestcano11, "OUT12", yAxis
+ commandButton = "Off", cmdtestcano11off, { (status3 & 8) && (canout9_16 & 8) }
+; commandButton = "Pulsed", cmdtestcano11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano11on, { (status3 & 8) && ((canout9_16 & 8) == 0) }
+ dialog = outputtestcano12, "OUT13", yAxis
+ commandButton = "Off", cmdtestcano12off, { (status3 & 8) && (canout9_16 & 16) }
+; commandButton = "Pulsed", cmdtestcano12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano12on, { (status3 & 8) && ((canout9_16 & 16) == 0) }
+ dialog = outputtestcano13, "OUT14", yAxis
+ commandButton = "Off", cmdtestcano13off, { (status3 & 8) && (canout9_16 & 32) }
+; commandButton = "Pulsed", cmdtestcano13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano13on, { (status3 & 8) && ((canout9_16 & 32) == 0) }
+ dialog = outputtestcano14, "OUT15", yAxis
+ commandButton = "Off", cmdtestcano14off, { (status3 & 8) && (canout9_16 & 64) }
+; commandButton = "Pulsed", cmdtestcano14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano14on, { (status3 & 8) && ((canout9_16 & 64) == 0) }
+ dialog = outputtestcano15, "OUT16", yAxis
+ commandButton = "Off", cmdtestcano15off, { (status3 & 8) && (canout9_16 & 128) }
+; commandButton = "Pulsed", cmdtestcano15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano15on, { (status3 & 8) && ((canout9_16 & 128) == 0) }
+
+ dialog = outputtest_iocano2, "CANOUT9-16", xAxis
+ panel = outputtestcano8
+ panel = outputtestcano9
+ panel = outputtestcano10
+ panel = outputtestcano11
+ panel = outputtestcano12
+ panel = outputtestcano13
+ panel = outputtestcano14
+ panel = outputtestcano15
+
+ dialog = outputtestcani0, "IN1", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 1 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 1) == 0 }
+ dialog = outputtestcani1, "IN2", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 2 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 2) == 0 }
+ dialog = outputtestcani2, "IN3", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 4 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 4) == 0 }
+ dialog = outputtestcani3, "IN4", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 8 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 8) == 0 }
+ dialog = outputtestcani4, "IN5", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 16 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 16) == 0 }
+ dialog = outputtestcani5, "IN6", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 32 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 32) == 0 }
+ dialog = outputtestcani6, "IN7", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 64 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 64) == 0 }
+ dialog = outputtestcani7, "IN8", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 128 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 128) == 0 }
+
+ dialog = outputtest_iocani, "CANIN1-8 - read-only", xAxis
+ panel = outputtestcani0
+ panel = outputtestcani1
+ panel = outputtestcani2
+ panel = outputtestcani3
+ panel = outputtestcani4
+ panel = outputtestcani5
+ panel = outputtestcani6
+ panel = outputtestcani7
+
+; "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H",
+
+ dialog = outputtest16, "PP2-Idle", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest10, "PP3-Boost", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "PP4-Nitrous1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "PP5-Nitrous2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "PP6-VVT", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "PP7-Fidle", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "PK0-Tacho", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "The Inj/Spk outputs must be used with additional caution to avoid flooding your engine or melting coils."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io2_text, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+ field = ""
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest16
+ panel = outputtest10
+ panel = outputtest11
+ panel = outputtest12
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+
+ dialog = outputteste0, "IAC1", yAxis
+ commandButton = "Off", cmdteste0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste0pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste0on, { status3 & 8 }
+
+ dialog = outputteste4, "IAC2", yAxis
+ commandButton = "Off", cmdteste4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste4pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste4on, { status3 & 8 }
+
+ dialog = outputteste8, "Inj1", yAxis
+ commandButton = "Off", cmdteste8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste8pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste8on, { status3 & 8 }
+
+ dialog = outputtestec, "Inj2", yAxis
+ commandButton = "Off", cmdtestecoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestecpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestecon, { status3 & 8 }
+
+ dialog = outputtestf0, "PM2", yAxis
+ commandButton = "Off", cmdtestf0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf0on, { status3 & 8 }
+
+ dialog = outputtestf4, "PK1", yAxis
+ commandButton = "Off", cmdtestf4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf4on, { status3 & 8 }
+
+ dialog = outputtestf8, "PK3", yAxis
+ commandButton = "Off", cmdtestf8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf8on, { status3 & 8 }
+
+ dialog = outputtestfc, "PK7", yAxis
+ commandButton = "Off", cmdtestfcoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestfcpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestfcon, { status3 & 8 }
+
+ dialog = outputtest_io2, "Outputs", xAxis
+ panel = outputteste0
+ panel = outputteste4
+ panel = outputteste8
+ panel = outputtestec
+ panel = outputtestf0
+ panel = outputtestf4
+ panel = outputtestf8
+ panel = outputtestfc
+
+ dialog = outputtest_io, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io2
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io2, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1inj
+ panel = outputtest_io1spk
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io3, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_iocano
+ panel = outputtest_iocano2
+ panel = outputtest_io2_text
+ panel = outputtest_iocani
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-255)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Enable Test - In/Out Cycle", cmdtestiaccycle, { IdleCtl == 3 }
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = injseqtest, "Injector Sequential Testing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injseqtest"
+ commandButton = "Stop Testing", cmdtestinjnorm
+ commandButton = "Batch Fire", cmdtestinjbat
+ commandButton = "Semi Sequential", cmdtestinjsem
+ commandButton = "Full Sequential", cmdtestinjseq
+
+ dialog = special, "Special Options"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#special"
+ field = "Pulsewidth Scaling", feature3_pw4x
+ field = "Nitrous-In Pulldown", feature3_n2oin
+
+; field = "U08 Debug 134, SPI baud", u08_debug134
+; field = "U16 Debug 640", u16_debug640
+; field = "SDcard Run/Test", u08_debug38_0
+ field = "Log trigger times to sensors9-16", u08_debug38_1
+ field = "Fuel flow/consumption calculation interval", fuelcalctime
+ field = "Maximum SpkAdj Value", spkadj_max
+ field = "Minimum SpkAdj Value", spkadj_min
+
+ dialog = lttrim, "Long Term Trim Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#lttrim"
+ field = "Enable Experi. Long Term Trim", ltt_opt_on
+ field = "Sample Interval", ltt_samp_time, {ltt_opt_on}
+ field = "Correction Softness", ltt_agg, {ltt_opt_on}
+ field = "Write Method", ltt_opt_mode, {ltt_opt_on}
+ field = "Burn Button", ltt_but_in, {ltt_opt_on && (ltt_opt_mode == 1)}
+ field = "Burn Interval", ltt_int, {ltt_opt_on && (ltt_opt_mode == 0)}
+ field = "LED Output", ltt_led_out,{ltt_opt_on}
+ field = "Total Change Before Burning", ltt_thresh, {ltt_opt_on}
+ field = "Display Current %Change In Sensor15", ltt_opt_feedback, {ltt_opt_on}
+ commandButton = "Read Table 1 To RAM", cmdlttr1
+ commandButton = "Read Table 2 To RAM", cmdlttr2
+ commandButton = "Burn Table To Flash", cmdlttw
+ commandButton = "Zero Tables", cmdlttz
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { (twoStroke == 3) && (nCylinders == 2) && (spk_mode3 == 2) }
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell Time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#noise"
+ field = "#GLOBAL TIMER NOISE FILTER DELAY"
+ field = "Noise Filter Period", dlyct
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launchwest, ""
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input On:", launch_opt_pins, { launch_opt_on }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_on }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_on}
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Disable Launch When VSS1 Above", launch_maxvss, { (launch_opt_on ) && (vss_opt0_1) }
+ field = "Limiter Settings",launchlimopt_adv , { launch_opt_on }
+ field = "Spark Limiter Type",launchlimopt_cut , { launch_opt_on && launchlimopt_adv}
+ field = "Spark Cut Zone",launchcutzone , { launch_opt_on && launchlimopt_adv}
+ field = "Cut Zone Timing",launchcuttiming , { launch_opt_on && launchlimopt_adv}
+ field = "FLAT SHIFT"
+ field = "Disable Flat-Shift When VSS1 Below", flats_minvss, { (launch_opt_on > 1) && (vss_opt0_1) }
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To : ", flats_deg, { launch_opt_on >1 }
+ field = "Cut Fuel Above", launch_fcut_rpm, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "TIMED RETARD"
+ field = "Timed Retard After Launch", launch_opt_retard, { launch_opt_on }
+
+ dialog = launchnortheast, "Variable Launch"
+ field = "Variable Launch Input", launch_var_on, { launch_opt_on >0 }
+ field = " -Minimum Setting", launch_var_low, {launch_var_on && launch_opt_on >0 }
+ field = " -Maximum Setting", launch_var_up, {launch_var_on && launch_opt_on >0 }
+
+ dialog = launchsoutheast, "3-Step / Burnout Limiter"
+ field = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ field = " -Soft Limit Retard To", launch_sft_deg3, {launch_3step_in && launch_opt_on >0}
+ field = " -Hard Limit", launch_hrd_lim3, {launch_3step_in && launch_opt_on >0}
+
+ dialog = llstg, "Line-Lock Staging"
+ field = "Button Input", llstg_in, {launch_opt_on >0 }
+ field = "Relay Output", llstg_out, {launch_opt_on && llstg_in }
+
+ dialog = launchtbtstop, "Transbrake, Throttle Stop"
+ field = "Transbrake Button Input", timedout1_in
+ field = "Transbrake Output", timedout1_out, {timedout1_in}
+ field = "Delay", timedout1_offdelay, {timedout1_in && timedout1_out}
+ field = "Turbo Staging Button", tcs_in, {timedout1_in}
+ field = "Release Time", tcs_offtime, {tcs_in && timedout1_in}
+ field = "On Time", tcs_ontime, {tcs_in && timedout1_in}
+ field = "Main # Moves", tcs_moves, {tcs_in && timedout1_in}
+ field = "Throttle Stop Output", tstop_out, { launch_opt_on }
+ field = "On Delay After Launch", tstop_delay, {tstop_out && launch_opt_on}
+ field = "Keep On For", tstop_hold, {tstop_out && launch_opt_on}
+
+ dialog = launcheast, "", yAxis
+ panel = launchnortheast
+ panel = launchtbtstop
+ panel = launchsoutheast
+ panel = llstg
+
+ dialog = launch, "Launch Control/ 2-Step / 3-Step / T-brake", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#launch"
+ panel = launchwest, West
+ panel = launcheast, East
+
+ dialog = vsslaunch1, ""
+ field = "Wheel-Speed Based Launch", launch_opt_vss
+ field = "ACTIVATION"
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_vss}
+ field = "Timeout (0 = None)", launchvsstime, { launch_opt_vss}
+ field = "Re-arm Below Speed", launchvss_minvss, { launch_opt_vss}
+ field = "Enable Gear Checking", launch_opt_vssgear, { launch_opt_vss && gear_method }
+ field = "Maximum Gear", launchvss_maxgear, { launch_opt_vss && launch_opt_vssgear && gear_method}
+ field = "LIMITER"
+ field = "Limiter Method", launchlimopt, { launch_opt_vss}
+ field = "Hard limit is taken from the curve"
+ field = "Soft Limit Zone", launch_sft_zone, { launch_opt_vss }
+ field = "Retard To", launch_sft_deg, {launch_opt_vss }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_vss }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_vss}
+ field = "Limiter settings are shared with the launch control page."
+
+ dialog = vsslaunch, "Speed-Based Launch Control", border
+ panel = vsslaunch1, West
+ panel = vsslaunch_curve, East
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = "Output On:", tacho_opt3f, { tacho_opt80 }
+ field = "Fixed or variable", tacho_optvar, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 && (tacho_optvar == 0) }
+ field = "Scaling", tacho_scale, { tacho_opt80 && (tacho_optvar == 1) }
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut fuel when:"
+ field = "RPM Greater Than:", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than: ", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than: ", fc_tps, { OvrRunC }
+ field = "And CLT Greater Than:", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = "Progressive Fuel Cut", OvrRunC_progcut, { OvrRunC }
+ field = "Ignition Timing Transition (Cut)", OvrRunC_progign, {OvrRunC}
+ field = "Ignition Timing During Over-Run", fc_timing, { OvrRunC && (OvrRunC_progign || OvrRunC_retign)}
+ field = "Cut Transition Time", fc_transition_time, { OvrRunC && (OvrRunC_progcut || OvrRunC_progign)}
+ field = "Progressive Fuel Return", OvrRunC_progret, { OvrRunC }
+ field = "Ignition Timing Transition Return", OvrRunC_retign, { OvrRunC }
+ field = "Return Transition Time", fc_trans_time_ret, { OvrRunC && (OvrRunC_progret || OvrRunC_retign) }
+ field = "Lowest RPM To Re-Engage Fuel:", fc_rpm_lower, { OvrRunC }
+ field = "RPMdot For Upper RPM Re-Engagement", fuelcut_fuelon_upper_rpmdot, { OvrRunC }
+ field = "RPMdot For Lower RPM Re-Engagement", fuelcut_fuelon_lower_rpmdot, { OvrRunC }
+ field = "Duration Of Fuel Adder", fc_ae_time, { OvrRunC }
+ field = "Size Of Fuel Adder", fc_ae_pct, { OvrRunC && fc_ae_time }
+ field = "Delay EGO After Fuel Return:", fc_ego_delay, { OvrRunC }
+
+ dialog = staging, "Staged Injection"
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = "Transition Fully To Secondaries", staged_extended_opts_pw1off, { staged_first_param }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { staged_first_param && (staged_out1 == 0) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { ((staged_extended_opts_use_v3 && staged_first_param) || ((nCylinders > 4) && (staged_first_param) && (hardware_fuel) && !(sequential & 0x1))) && (staged_out1 == 0) }
+ field = ""
+ field = "Gradual Transition", staged_transition_on, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Transition Events", staged_transition_events, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Reduction Delay", staged_primary_delay, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = "Secondary Enrichment", staged_secondary_enrichment, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param }
+ field = ""
+ field = "Relay Output", staged_out1, { staged_first_param }
+ field = "Relay Output Polarity", staged_out1_inv, { staged_first_param && staged_out1}
+ field = "Pre-Relay Output", staged_out2, { staged_first_param }
+ field = "Pre-Relay Output Polarity", staged_out2_inv, { staged_first_param && staged_out2}
+ field = "Pre-Relay Timer", staged_out2_time, { staged_first_param && staged_out2}
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Batch Fire During Crank", feature7_batchcrank, {sequential}
+ field = "Cranking Taper Curve", feature7_cranktaper
+ field = "Cranking Taper Curve Units", feature7_crtpunits, {feature7_cranktaper}
+ field = "Cranking Fuel Pulse Rate ", altcrank
+ field = "Blended Cranking Curves", alternate_blend
+ field = ""
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+ field = "ASE Count Units", feature3_aseunit
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#barocor"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Type", mapport_t
+ field = "Voltage Input Port", mapport, {mapport_t == 0}
+ field = "Frequency Input Port", mapport_f, {mapport_t == 1}
+ field = "Low Frequency", map_freq0, {mapport_t == 1}
+ field = "High Frequency", map_freq1, {mapport_t == 1}
+ field = "2nd MAP Port", map2port, { (mapport_t == 0) }
+ field = "(See also Tools->Calibrate MAP/Baro)"
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MegaView Temp. Units", tempUnits
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = "Auto-zero TPS", feature3_tps
+
+ dialog = secondaryLoad, "Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (VE1/3)", loadMult
+ field = "99% of Speed-Density installs should use Multiply"
+ field = "Multiply MAP (VE2/4)", loadMult2, {algorithm2 && (loadCombine == 2)}
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich ;, { loadStoich } needed for lambda calc even if not incl AFR
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "Secondary Ignition", loadCombineign, {IgnAlgorithm2}
+ field = "AFR table Load", afrload
+ field = "EAE curve Load", eaeload
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = revlimiter, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#revlim"
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/Fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+ field = "#Temp Sense"
+ field = "Sensor PW"
+ field = "Fuel Temp"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+ field = "Low"
+ field = "", ff_tpw0, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp0, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+ field = "High"
+ field = "", ff_tpw1, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp1, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback For Sensor Failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+ field = "#Flex Blending (enabled on Dual Fuel menu)"
+ field = "Dual Fuel Mode", dualfuel_opt_mode, { 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ field = "Temperature Input", fueltemp1
+ panel = ff_fallback
+
+ dialog = sequentialOptions, "Sequential Fuel Injection"
+ field = "Main Fuel Outputs", hardware_fuel
+ field = "Sequential On", sequential
+ field = "Angle Specifies:", sequential_angle_spec, { sequential != 0 }
+ field = "Injector Trim", sequential_trim_on_off
+#if CYL_12_16_SUPPORT
+ field = "Injector I/J Outputs", hardware_injij, { nCylinders > 8}
+#endif
+
+ dialog = firingorder1, "Firing Order"
+ field = "A.", firea
+ field = "B.", fireb, { nCylinders > 1}
+ field = "C.", firec, { nCylinders > 2}
+ field = "D.", fired, { nCylinders > 3}
+ field = "E.", firee, { nCylinders > 4}
+ field = "F.", firef, { nCylinders > 5}
+ field = "G.", fireg, { nCylinders > 6}
+ field = "H.", fireh, { nCylinders > 7}
+
+#if CYL_12_16_SUPPORT
+ dialog = firingorder2, "Firing Order"
+ field = "I.", firei, { nCylinders > 8}
+ field = "J.", firej, { nCylinders > 9}
+ field = "K.", firek, { nCylinders > 10}
+ field = "L.", firel, { nCylinders > 11}
+ field = "M.", firem, { nCylinders > 12}
+ field = "N.", firen, { nCylinders > 13}
+ field = "O.", fireo, { nCylinders > 14}
+ field = "P.", firep, { nCylinders > 15}
+#endif
+ field = ""
+
+ dialog = firingorder, "", xAxis
+ panel = firingorder1, West
+#if CYL_12_16_SUPPORT
+ panel = firingorder2, East
+#endif
+
+ dialog = seqfo, "", border
+ panel = sequentialOptions, North
+ panel = firingorder, South
+
+ dialog = base3, "", yAxis
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#engseq"
+ panel = base2, West
+ panel = seqfo, East
+
+;main injector parameters
+ dialog = ot_ot, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", injOpen1
+ field = "B", injOpen2, {opentime_opt1_master}
+ field = "C", injOpen3, {opentime_opt1_master}
+ field = "D", injOpen4, {opentime_opt1_master}
+ field = "E", injOpen5, {opentime_opt1_master}
+ field = "F", injOpen6, {opentime_opt1_master}
+ field = "G", injOpen7, {opentime_opt1_master}
+ field = "H", injOpen8, {opentime_opt1_master}
+
+ dialog = ot_curve, "", yAxis
+ field = "", opentime_opt1_master
+
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime_opt1
+ field = "", opentime_opt2, {opentime_opt1_master}
+ field = "", opentime_opt3, {opentime_opt1_master}
+ field = "", opentime_opt4, {opentime_opt1_master}
+ field = "", opentime_opt5, {opentime_opt1_master}
+ field = "", opentime_opt6, {opentime_opt1_master}
+ field = "", opentime_opt7, {opentime_opt1_master}
+ field = "", opentime_opt8, {opentime_opt1_master}
+
+ dialog = injchar_ms3x, "MS3X Injectors", xAxis
+ panel = ot_ot
+ panel = ot_curve
+
+ dialog = injchar_v3, "Mainboard Injectors", yAxis
+ field = "BANK 1 Dead-Time @ 100%", injOpena
+ field = "Correction Curve", opentime_opta
+ field = "PWM Current Limiting", opentime_opta_pwm
+ field = "PWM Current Limit", injPwmP, {opentime_opta_pwm}
+ field = "PWM Time Threshold", injPwmT, {opentime_opta_pwm}
+ field = "Injector PWM Period", injPwmPd, {opentime_opta_pwm}
+ field = ""
+ field = "BANK 2 Different Settings", opentime_optb_own
+ field = "Dead Time", injOpenb, {opentime_optb_own}
+ field = "Correction Curve", opentime_optb, {opentime_optb_own}
+ field = "PWM Current Limiting", opentime_optb_pwm, {opentime_optb_own}
+ field = "PWM Current Limit", injPwmP2, {opentime_optb_own && opentime_optb_pwm}
+ field = "PWM Time Threshold", injPwmT2, {opentime_optb_own && opentime_optb_pwm}
+ field = "Injector PWM Period", injPwmPd2, {opentime_optb_own && opentime_optb_pwm}
+; 9-16
+ dialog = ot_otb, "", yAxis
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "I", injOpena, {opentime_opt1_master}
+ field = "J", injOpenb, {opentime_opt1_master}
+ field = "K", injOpen11, {opentime_opt1_master}
+ field = "L", injOpen12, {opentime_opt1_master}
+ field = "M", injOpen13, {opentime_opt1_master}
+ field = "N", injOpen14, {opentime_opt1_master}
+ field = "O", injOpen15, {opentime_opt1_master}
+ field = "P", injOpen16, {opentime_opt1_master}
+
+ dialog = ot_curveb, "", yAxis
+ field = "Voltage Cead"
+ field = "Time Curve"
+ field = "", opentime_opta, {opentime_opt1_master}
+ field = "", opentime_optb, {opentime_opt1_master}
+ field = "", opentime_opt11, {opentime_opt1_master}
+ field = "", opentime_opt12, {opentime_opt1_master}
+ field = "", opentime_opt13, {opentime_opt1_master}
+ field = "", opentime_opt14, {opentime_opt1_master}
+ field = "", opentime_opt15, {opentime_opt1_master}
+ field = "", opentime_opt16, {opentime_opt1_master}
+
+ dialog = injcurveswest, "", yAxis
+ panel = opencurve0, North
+ panel = opencurve2, South
+
+ dialog = injcurveseast, "", yAxis
+ panel = opencurve1, North
+ panel = opencurve3, South
+
+ dialog = injcurves, "", xAxis
+ panel = injcurveswest
+ panel = injcurveseast
+
+ dialog = injsettingsb, "Injector Dead-Time/PWM (9-16)", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = ot_otb
+ panel = ot_curveb
+
+ dialog = injCharswest, "", yAxis
+ panel = injchar_ms3x, North
+ panel = injchar_v3, South
+
+ dialog = injsettings, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = injCharswest, West
+ panel = injcurves, Center
+
+; table-switched alternate parameters
+ dialog = ot_ot2b, "", yAxis
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "I", inj2Opena, {opentime2_opt1_master}
+ field = "J", inj2Openb, {opentime2_opt1_master}
+ field = "K", inj2Open11, {opentime2_opt1_master}
+ field = "L", inj2Open12, {opentime2_opt1_master}
+ field = "M", inj2Open13, {opentime2_opt1_master}
+ field = "N", inj2Open14, {opentime2_opt1_master}
+ field = "O", inj2Open15, {opentime2_opt1_master}
+ field = "P", inj2Open16, {opentime2_opt1_master}
+
+ dialog = ot_curve2b, "", yAxis
+ field = "Voltage Dead"
+ field = "Time curve"
+ field = "", opentime2_opta, {opentime2_opt1_master}
+ field = "", opentime2_optb, {opentime2_opt1_master}
+ field = "", opentime2_opt11, {opentime2_opt1_master}
+ field = "", opentime2_opt12, {opentime2_opt1_master}
+ field = "", opentime2_opt13, {opentime2_opt1_master}
+ field = "", opentime2_opt14, {opentime2_opt1_master}
+ field = "", opentime2_opt15, {opentime2_opt1_master}
+ field = "", opentime2_opt16, {opentime2_opt1_master}
+
+ dialog = injsettingsb2, "Injector Dead-Time/PWM 2 (9-16)", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = ot_ot2b
+ panel = ot_curve2b
+
+ dialog = ot_ot2, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", inj2Open1
+ field = "B", inj2Open2, {opentime2_opt1_master}
+ field = "C", inj2Open3, {opentime2_opt1_master}
+ field = "D", inj2Open4, {opentime2_opt1_master}
+ field = "E", inj2Open5, {opentime2_opt1_master}
+ field = "F", inj2Open6, {opentime2_opt1_master}
+ field = "G", inj2Open7, {opentime2_opt1_master}
+ field = "H", inj2Open8, {opentime2_opt1_master}
+
+ dialog = ot_curve2, "", yAxis
+ field = "", opentime2_opt1_master
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime2_opt1
+ field = "", opentime2_opt2, {opentime2_opt1_master}
+ field = "", opentime2_opt3, {opentime2_opt1_master}
+ field = "", opentime2_opt4, {opentime2_opt1_master}
+ field = "", opentime2_opt5, {opentime2_opt1_master}
+ field = "", opentime2_opt6, {opentime2_opt1_master}
+ field = "", opentime2_opt7, {opentime2_opt1_master}
+ field = "", opentime2_opt8, {opentime2_opt1_master}
+
+ dialog = injchar_ms3x_2, "MS3X Injectors", xAxis
+ panel = ot_ot2
+ panel = ot_curve2
+
+ dialog = injchar_v3_2, "Mainboard Injectors", yAxis
+ field = "BANK 1 Dead-Time @ 100%", inj2Opena
+ field = "Correction Curve", opentime2_opta
+ field = "PWM Current Limiting", opentime2_opta_pwm
+ field = "PWM Current Limit", inj2PwmP, {opentime2_opta_pwm}
+
+ field = "PWM Time Threshold", inj2PwmT, {opentime2_opta_pwm}
+ field = "Injector PWM Period", inj2PwmPd, {opentime2_opta_pwm}
+ field = ""
+ field = "BANK 2 Different Settings", opentime2_optb_own
+ field = "Dead-Time", inj2Openb, {opentime2_optb_own}
+ field = "Correction Curve", opentime2_optb, {opentime2_optb_own}
+ field = "PWM Current Limiting", opentime2_optb_pwm, {opentime2_optb_own}
+ field = "PWM Current Limit", inj2PwmP2, {opentime2_optb_own && opentime2_optb_pwm}
+ field = "PWM Time Threshold", inj2PwmT2, {opentime2_optb_own && opentime2_optb_pwm}
+ field = "Injector PWM Period", inj2PwmPd2, {opentime2_optb_own && opentime2_optb_pwm}
+
+ dialog = injCharswest2, "", yAxis
+ panel = injchar_ms3x_2, North
+ panel = injchar_v3_2, South
+
+ dialog = injsettings2, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = injCharswest2, West
+
+ dialog = smallpwwest2, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw2_opt1_master
+ field = "(This is for the alternate injectors from dual-fuel)"
+ field = "MS3X Injector A", smallpw2_opt1, { smallpw2_opt1_master }
+ field = "MS3X Injector B", smallpw2_opt2, { smallpw2_opt1_master }
+ field = "MS3X Injector C", smallpw2_opt3, { smallpw2_opt1_master }
+ field = "MS3X Injector D", smallpw2_opt4, { smallpw2_opt1_master }
+ field = "MS3X Injector E", smallpw2_opt5, { smallpw2_opt1_master }
+ field = "MS3X Injector F", smallpw2_opt6, { smallpw2_opt1_master }
+ field = "MS3X Injector G", smallpw2_opt7, { smallpw2_opt1_master }
+ field = "MS3X Injector H", smallpw2_opt8, { smallpw2_opt1_master }
+ field = ""
+ field = "Mainboard Bank 1", smallpw2_opta, { smallpw2_opt1_master }
+ field = ""
+ field = "Mainboard Bank 2", smallpw2_optb, { smallpw2_opt1_master }
+
+
+ dialog = smallpw2, "Injector Small Pulsewidths 2", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw2"
+ panel = smallpwwest2, West
+
+ dialog = smallpwwest, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw_opt1_master
+ field = "!CAUTION!"
+ field = "Unless you have specific injector data these"
+ field = "'curves' must be a straight line from 0-2"
+ field = "Ensure the start and end points are equal"
+ field = "(e.g. 0.000, 0.000 and 2.000, 2.000)"
+ field = "Select the pulsewidth curve for each injector"
+
+ field = "MS3X Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) }
+ field = "MS3X Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) }
+ field = "MS3X Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) }
+ field = "MS3X Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) }
+ field = "MS3X Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) }
+ field = "MS3X Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) }
+ field = "MS3X Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) }
+ field = "MS3X Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) }
+ field = ""
+ field = "Mainboard Bank 1", smallpw_opta, { smallpw_opt1_master }
+ field = ""
+ field = "Mainboard Bank 2", smallpw_optb, { smallpw_opt1_master }
+
+
+ dialog = smallcurveswest, "", yAxis
+ panel = smallcurve0
+ panel = smallcurve2
+
+ dialog = smallcurveseast, "", yAxis
+ panel = smallcurve1
+ panel = smallcurve3
+
+ dialog = smallcurves, "", xAxis
+ panel = smallcurveswest
+ panel = smallcurveseast
+
+ dialog = smallpw, "Injector Small Pulsewidths", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw"
+ panel = smallpwwest, West
+ panel = smallcurves, Center
+
+ dialog = smallpwb, ""
+ field = "Injector I", smallpw_opta, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw_optb, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw_opt11, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw_opt12, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+ field = "Injector M", smallpw_opt13, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
+ field = "Injector N", smallpw_opt14, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
+ field = "Injector O", smallpw_opt15, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
+ field = "Injector P", smallpw_opt16, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
+
+ dialog = smallpw2b, ""
+ field = "Injector I", smallpw2_opta, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw2_optb, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw2_opt11, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw2_opt12, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+ field = "Injector M", smallpw2_opt13, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
+ field = "Injector N", smallpw2_opt14, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
+ field = "Injector O", smallpw2_opt15, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
+ field = "Injector P", smallpw2_opt16, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
+
+ ; dialog = egoControl, "EGO Control"
+ dialog = egoControlright, ""
+ field = "Algorithm", egoAlgorithm, { egoType }
+ field = "Use EGO Delay Table", egoAlgorithm_delay_table, {egoType && (egoAlgorithm < 3)}
+ field = "Ignition Events Per Step", egoCount, { egoType && (egoAlgorithm < 3) && !egoAlgorithm_delay_table}
+ field = "EGO Sensor Response Time", ego_sensor_delay, { egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) }
+ field = "Use Authority Table", egoAlgorithm_auth, { egoType }
+ field = "Controller Auth +/-", egoLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Only Correct Above:", ego_lower_bound, { egoType && (egoAlgorithm < 3) }
+ field = "And Correct Below:", ego_upper_bound, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above RPM", egoRPM, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Below TPS", TPSOXLimit, { egoType && (egoAlgorithm < 3) }
+ field = "Active Below Load", MAPOXLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Above Load", MAPOXMin, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "EGO Delay After Start", ego_startdelay, { egoType && (egoAlgorithm < 3) }
+ field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
+ field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
+ field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
+
+ dialog = egoports, "",yAxis
+ field = "EGO 1 Port", egoport1
+ field = "EGO 2 Port", egoport2, {egonum > 1}
+ field = "EGO 3 Port", egoport3, {egonum > 2}
+ field = "EGO 4 Port", egoport4, {egonum > 3}
+ field = "EGO 5 Port", egoport5, {egonum > 4}
+ field = "EGO 6 Port", egoport6, {egonum > 5}
+ field = "EGO 7 Port", egoport7, {egonum > 6}
+ field = "EGO 8 Port", egoport8, {egonum > 7}
+
+; not implemented
+; dialog = egoports_tgt, "", yAxis
+; field = "AFR target"
+; field = "", egomap1t
+; field = "", egomap2t, {egonum > 1}
+; field = "", egomap3t, {egonum > 2}
+; field = "", egomap4t, {egonum > 3}
+; field = "", egomap5t, {egonum > 4}
+; field = "", egomap6t, {egonum > 5}
+; field = "", egomap7t, {egonum > 6}
+; field = "", egomap8t, {egonum > 7}
+
+ dialog = egoports2, "EGO ports", xAxis
+ panel = egoports
+ ; panel = egoports_tgt
+
+ dialog = egoControlleft, "", yAxis
+ field = "EGO Sensor Type", egoType
+ field = "Number Of Sensors", egonum, { egoType }
+ field = "#Remember to Calibrate and set Project Properties"
+ panel = egoports2
+
+ dialog = egoControlmain, "", xAxis
+ panel = egoControlright, West
+ panel = egoControlleft, East
+
+
+ dialog = egomap_inj, "", yAxis
+ field = "Injector"
+ field = "MS3X Inj A"
+ field = "MS3X Inj B"
+ field = "MS3X Inj C"
+ field = "MS3X Inj D"
+ field = "MS3X Inj E"
+ field = "MS3X Inj F"
+ field = "MS3X Inj G"
+ field = "MS3X Inj H"
+ field = "V3 Inj 1"
+ field = "V3 Inj 2"
+
+ dialog = egomap_ego, "", yAxis
+ field = "- Uses Sensor"
+ field = "", egomap1
+ field = "", egomap2
+ field = "", egomap3
+ field = "", egomap4
+ field = "", egomap5
+ field = "", egomap6
+ field = "", egomap7
+ field = "", egomap8
+ field = "", egomap9
+ field = "", egomap10
+
+ dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj
+ panel = egomap_ego
+
+ dialog = egoControl, "AFR / EGO Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egocont"
+ panel = egoControlmain, West
+ panel = egomapping, East
+
+ dialog = egomap_inj2, "", yAxis
+ field = "Injector"
+ field = "InjI"
+ field = "InjJ"
+ field = "InjK"
+ field = "InjL"
+ field = "InjM"
+ field = "InjN"
+ field = "InjO"
+ field = "InjP"
+
+ dialog = egomap_ego2, "", yAxis
+ field = "Sensor"
+ field = "", egomap9
+ field = "", egomap10
+ field = "", egomap11
+ field = "", egomap12
+ field = "", egomap13
+ field = "", egomap14
+ field = "", egomap15
+ field = "", egomap16
+
+ dialog = egomapping2, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj2
+ panel = egomap_ego2
+
+ dialog = egoports2a, "",yAxis
+ field = "EGO Channel"
+ field = "EGO 9 Port", egoport9, {egonum > 8}
+ field = "EGO 10 Port", egoport10, {egonum > 9}
+ field = "EGO 11 Port", egoport11, {egonum > 10}
+ field = "EGO 12 Port", egoport12, {egonum > 11}
+ field = "EGO 13 Port", egoport13, {egonum > 12}
+ field = "EGO 14 Port", egoport14, {egonum > 13}
+ field = "EGO 15 Port", egoport15, {egonum > 14}
+ field = "EGO 16 Port", egoport16, {egonum > 15}
+
+ dialog = egocont9_16, "AFR / EGO(9-16)", border
+ panel = egoports2a, West
+ panel = egomapping2, East
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy, EDIS, Wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 < 31) && (spk_conf2_oddodd != 3) }
+ field = "HEI/GMDIS, TFI, C3I Options", spk_conf2_gmtfi, {(spk_mode0 == 2) || (spk_mode0 == 4)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number Of Coils", spk_mode3
+ field = "Spark Hardware In Use", hardware_spk
+ field = "Cam Input (See tooltip)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ field = "Flip Polarity On Hi-Res Tach / Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell type", dwellmode
+ field = "Use Dwell vs Rpm Curve", spk_conf2_dwell, {dwellmode ==2}
+ field = "Use Dwell Table", spk_conf2_dwelltbl, {dwellmode ==0}
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) && (spk_conf2_dwelltbl==0)}
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) && (spk_conf2_dwell==0)}
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Spark Trim", spk_mode3_trim
+ field = "Kick-start crank delay", spk_mode3_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_mode3_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, { spk_mode0 == 4 }
+ field = "Trigger Wheel Teeth", triggerTeeth, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Main Wheel Speed", spk_config_camcrank, { (spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && spk_mode0 == 4}
+ field = "Level For Phase 1", spk_config_campol, {(spk_mode0 == 25) || ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "Check At Tooth#", poll_level_tooth, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && spk_mode0 == 4}
+
+ dialog = padignition
+ field = ""
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper Idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidle_freq_koeo, { IdleCtl == 2 }
+ field = "Output Port", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ field = "3 Wire Mode", pwmidle_freq_pin3, { IdleCtl == 2 }
+
+ field = "Frequency", pwmidle_freq_scale, { IdleCtl == 2 }
+ field = "This frequency may be shared with boost control"
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidle"
+ field = "Idle Valve Minimum Duty", pwmidle_closed_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Idle Valve Maximum Duty", pwmidle_open_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Dashpot Adder", pwmidle_dp_adder, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Use Last Value or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Minimum Steps", pwmidle_closed_steps, { (IdleCtl == 3) }
+ field = "Idle Valve Maximum Steps", pwmidle_open_steps, { (IdleCtl == 3) }
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ slider = "Closed-Loop Sensitivity", pwmidle_max_rpm_new, horizontal
+ field = "Tuning Mode", pwmidle_cl_opts_display_pid
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot", pwmidle_rpmdot_disablepid, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Use VSS To Activate PID", IdleCtl_vss
+ field = "Minimum VSS1", idleminvss, {IdleCtl_vss}
+ field = "Idle Activation TPS Threshold", pwmidle_tps_threshold
+ field = "RPMdot Threshold", pwmidle_rpmdot_threshold, { IdleCtl_vss != 1 }
+ field = "Max Decel Load", pwmidle_decelload_threshold, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_empty, ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, Center
+ panel = pwmidle_empty, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aeset"
+ field = "Use Time-Based or Accel-Pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE, X-tau)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+ field = "X-Tau MAPdot Thresholds for transition to X, Tau Decel Tables"
+ field = "Start Transition", MapThreshXTD, {EAEOption > 2}
+ field = "Finish Transition", MapThreshXTD2, {EAEOption > 2}
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", tpsasync_events, { feature7_aeevents }
+ field = "Accel Taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime, { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+;accel-pump
+
+ dialog = pump_ae_south_west, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier
+
+ dialog = pump_ae_south_east, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south, "", xAxis
+ panel = pump_ae_south_west
+ panel = pump_ae_south_east
+
+ dialog = pump_ae_south, "", yAxis
+ liveGraph = pump_ae_Graph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south
+
+ dialog = pump_ae_north, "", xAxis
+ panel = pump_accel_mapdot_curve, West, {accel_blend_percent < 100}
+ panel = pump_accel_tpsdot_curve, East, {accel_blend_percent > 0}
+
+ dialog = pump_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent, horizontal
+
+ dialog = AEpump_settings, "Accel-Pump Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north
+ panel = pump_ae_mid
+ panel = pump_ae_south
+
+;time based AE (2)
+ dialog = time_ae_south_west2, ""
+ field = "Accel MAPdot threshold", mapThresh2
+ field = "End Pulsewidth", aeEndPW2
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", taeTime_events2, { feature7_aeevents }
+ field = "Accel Taper", aeTaperTime_events2, { feature7_aeevents }
+ field = "Accel Time", taeTime2, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime2, { !feature7_aeevents }
+
+ dialog = time_ae_south_east2, ""
+ field = "Accel TPSdot Threshold", tpsThresh2
+ field = "Decel Fuel Amount", tdePct2
+ field = "Cold Accel Adder", taeColdA2
+ field = "Cold Accel Multiplier", taeColdM2
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = time_ae_south_south2, "", xAxis
+ panel = time_ae_south_west2
+ panel = time_ae_south_east2
+
+ dialog = time_ae_south2, "", yAxis
+ liveGraph = timeaeGraph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south2
+
+ dialog = time_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion2, horizontal
+
+ dialog = time_ae_north2, "", xAxis
+ panel = time_accel_mapdot_curve2, West, {tpsProportion2 < 100}
+ panel = time_accel_tpsdot_curve2, East, {tpsProportion2 > 0}
+
+ dialog = AEtime_settings2, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north2
+ panel = time_ae_mid2
+ panel = time_ae_south2
+
+;accel-pump (2)
+
+ dialog = pump_ae_south_west2, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold2, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold2, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier2
+
+ dialog = pump_ae_south_east2, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south2, "", xAxis
+ panel = pump_ae_south_west2
+ panel = pump_ae_south_east2
+
+ dialog = pump_ae_south2, "", yAxis
+ liveGraph = pump_ae_Graph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south2
+
+ dialog = pump_ae_north2, "", xAxis
+ panel = pump_accel_mapdot_curve2, West, {accel_blend_percent2 < 100}
+ panel = pump_accel_tpsdot_curve2, East, {accel_blend_percent2 > 0}
+
+ dialog = pump_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent2, horizontal
+
+ dialog = AEpump_settings2, "Accel-Pump Accel Enrichment 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north2
+ panel = pump_ae_mid2
+ panel = pump_ae_south2
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calmapbaro"
+ field = "#MAP Sensor"
+#if INI_VERSION_2
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", map0
+ field = "Value At 5.0 Volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+#if INI_VERSION_2
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings3, "Knock Sensor Settings"
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ field = "Knock Indicated By:", knkDirection, { knk_option && !knk_option_an }
+ field = "Pullup/Down On Input", knkpull, { knk_option && !knk_option_an }
+ field = "Input Pin", knkport_an, { knk_option && (knk_option_an == 1) }
+ field = "Window Sample Type", knk_option_wind, { knk_option && (knk_option_an == 1) }
+ field = "Window Output", knk_pin_out, { knk_option && (knk_option_an < 2) }
+ field = "Monitor Per Cylinder", knock_conf_percyl, { knk_option > 0 }
+ field = "Control Per Cylinder", knock_conf_percylact, { knk_option > 0 }
+ field = "DEBUG data", knock_conf_debug, { knk_option > 0 }
+ field = "#Detection"
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "Ignore During Launch/Flatshift", knock_conf_launch, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Coarse Step Size", knk_step1, { knk_option > 0 }
+ field = "Retard Fine Step Size", knk_step2, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step_adv, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = ks4a, "", yAxis
+ field = "Cyl#"
+ field = "1"
+ field = "2"
+ field = "3"
+ field = "4"
+ field = "5"
+ field = "6"
+ field = "7"
+ field = "8"
+#if CYL_12_16_SUPPORT
+ field = "9"
+ field = "10"
+ field = "11"
+ field = "12"
+ field = "13"
+ field = "14"
+ field = "15"
+ field = "16"
+#endif
+ dialog = ks4b, "", yAxis
+
+ field = "Gain"
+ field = "", knock_gain01
+ field = "", knock_gain02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_gain03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_gain04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_gain05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_gain06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_gain07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_gain08, {knock_conf_percyl && (nCylinders >7)}
+#if CYL_12_16_SUPPORT
+ field = "", knock_gain09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_gain10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_gain11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_gain12, {knock_conf_percyl && (nCylinders >11)}
+ field = "", knock_gain13, {knock_conf_percyl && (nCylinders >12)}
+ field = "", knock_gain14, {knock_conf_percyl && (nCylinders >13)}
+ field = "", knock_gain15, {knock_conf_percyl && (nCylinders >14)}
+ field = "", knock_gain16, {knock_conf_percyl && (nCylinders >15)}
+#endif
+
+ dialog = ks4c, "", yAxis
+ field = "Sensor"
+ field = "", knock_sens01
+ field = "", knock_sens02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_sens03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_sens04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_sens05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_sens06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_sens07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_sens08, {knock_conf_percyl && (nCylinders >7)}
+#if CYL_12_16_SUPPORT
+ field = "", knock_sens09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_sens10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_sens11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_sens12, {knock_conf_percyl && (nCylinders >11)}
+ field = "", knock_sens13, {knock_conf_percyl && (nCylinders >12)}
+ field = "", knock_sens14, {knock_conf_percyl && (nCylinders >13)}
+ field = "", knock_sens15, {knock_conf_percyl && (nCylinders >14)}
+ field = "", knock_sens16, {knock_conf_percyl && (nCylinders >15)}
+#endif
+ dialog = ks4bot, "", xAxis
+ panel = ks4a
+ panel = ks4b
+ panel = ks4c
+
+ dialog = ks4top, ""
+ field = "NOTE! This feature is only licensed for use"
+ field = "with JSM add-on board"
+ field = "Bandpass Frequency (kHz)", knock_bpass
+ field = "Integrator Time constant (us)", knock_int
+ field = "Number of Sensors", knock_conf_num
+ field = "Monitor Per Cylinder", knock_conf_percyl
+ field = "Knock gain:"
+
+ dialog = knockSettings4, "Knock Sensor Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockparam"
+ panel = ks4top, North
+ panel = ks4bot, South
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knock"
+ panel = knockSettings3, West
+ panel = knockthresh_curve, East
+
+ dialog = knockSettings2, "Knock Window Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockwindow"
+ panel = knockstart_curve, North
+ panel = knockduration_curve, South
+
+ dialog = idleAdvancemenu, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Idle RPM Timing Correction", idle_special_ops_timing_assist
+ field = "Go to idle advance/Idle RPM timing correction when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleadv, { idleadvance_on || idle_special_ops_timing_assist }
+ field = "TPS Is Below:", idleadvance_tps, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And RPM Is Below:", idleadvance_rpm, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And Load Is Above:", idleadvance_load, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And CLT Is Above:", idleadvance_clt, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And After Delay:", idleadvance_delay, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+
+ dialog = idleAdvance, "Idle Advance Settings", border
+ panel = idleAdvancemenu, West
+ panel = idleAdvance_curve, East
+
+ dialog = idleVemenu, "Idle VE settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleve"
+ field = "Idle VE On", idleve_on
+ field = "Go to idle VE when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleve, { idleve_on }
+ field = "TPS Is Below:", idleve_tps, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And RPM Is Below:", idleve_rpm, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And load Is Above:", idleve_load, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And CLT Is Above:", idleve_clt, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And VSS Zero?", idleve_vsson, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And After Delay:", idleve_delay, { idleve_on && !idleveadv_to_pid_idleve }
+
+ dialog = idleVeTables_n, "Idle VE Table"
+ panel = idleve1Tbl, North, { idleve_on }
+
+ dialog = idleVeTables_s, "Idle VE Table - Dual Fuel"
+ panel = idleve2Tbl, South, { idleve_on && dualfuel_sw_on }
+
+ dialog = idleVeTables, "", yAxis
+ panel = idleVeTables_n
+ panel = idleVeTables_s
+
+ dialog = idleVe, "Idle VE", border
+ panel = idleVemenu, West
+ panel = idleVeTables, Center
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#baud"
+ field = "#The main baud rate should normally be 115200"
+ field = "Megasquirt Baud Rate", baud
+ field = "9600, 19200, 38400, 57600, 115200 only"
+ field = "SDcard Readback Baud Rate", baudhigh
+ field = "up to 230400 only"
+ field = "Set these, Burn"
+ field = "Then adjust tuning software comms baud rate to match"
+ field = "Then powercycle Megasquirt"
+ field = "Use High Speed Runtime", scatterRuntimeEnabled
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = generic_pid_left_a, ""
+ field = "Enable", generic_pid_flags_a_on
+ field = "Closed-loop (PID) type", generic_pid_flags_a_type, { generic_pid_flags_a_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_a, generic_pid_load_size_a, { generic_pid_flags_a_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_a, generic_pid_PV_size_a, { generic_pid_flags_a_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_a, { generic_pid_flags_a_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_a, { generic_pid_flags_a_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_a, { generic_pid_flags_a_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_a, { generic_pid_flags_a_on }
+ field = "Max Control Output", generic_pid_output_upperlim_a, { generic_pid_flags_a_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_a, { generic_pid_flags_a_on }
+ field = "Output Polarity", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID direction", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID use stepper", generic_pid_flags_a_output_type, { generic_pid_flags_a_on }
+; field = "Generic PID use table or curve", generic_pid_flags_a_lookup_type, { generic_pid_flags_a_on }
+ field = "Control Interval", generic_pid_control_interval_a, { generic_pid_flags_a_on }
+ field = "P Term", generic_pid_P_a, { generic_pid_flags_a_on }
+ field = "I Term", generic_pid_I_a, { generic_pid_flags_a_on }
+ field = "D Term", generic_pid_D_a, { generic_pid_flags_a_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_grapha, "", card
+ panel = generic_pid_Tbl_a, Center, { generic_pid_flags_a_on }
+
+ dialog = generic_pid_a, "Generic Closed-Loop A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_a, West
+ panel = generic_pid_curve_grapha, Center
+
+ dialog = generic_pid_left_b, ""
+ field = "Enable", generic_pid_flags_b_on
+ field = "Closed-Loop (PID) Type", generic_pid_flags_b_type, { generic_pid_flags_b_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_b, generic_pid_load_size_b, { generic_pid_flags_b_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_b, generic_pid_PV_size_b, { generic_pid_flags_b_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_b, { generic_pid_flags_b_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_b, { generic_pid_flags_b_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_b, { generic_pid_flags_b_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_b, { generic_pid_flags_b_on }
+ field = "Max Control Output", generic_pid_output_upperlim_b, { generic_pid_flags_b_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_b, { generic_pid_flags_b_on }
+ field = "Output Polarity", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID direction", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID use stepper", generic_pid_flags_b_output_type, { generic_pid_flags_b_on }
+; field = "Generic PID use table or curve", generic_pid_flags_b_lookup_type, { generic_pid_flags_b_on }
+ field = "Control Interval", generic_pid_control_interval_b, { generic_pid_flags_b_on }
+ field = "P Term", generic_pid_P_b, { generic_pid_flags_b_on }
+ field = "I Term", generic_pid_I_b, { generic_pid_flags_b_on }
+ field = "D Term", generic_pid_D_b, { generic_pid_flags_b_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_graphb, "", card
+ panel = generic_pid_Tbl_b, Center, { generic_pid_flags_b_on }
+
+ dialog = generic_pid_b, "Generic Closed-Loop B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_b, West
+ panel = generic_pid_curve_graphb, Center
+
+ ;-------------------------------------------------------------------------------
+ ; General help text
+
+ help = helpGeneral, "Megasquirt 3 General Help"
+ webHelp = "http://www.msextra.com/"
+ text = "For current documentation, click the Web Help button,"
+ text = "or visit http://www.msextra.com/."
+ text = "
"
+ text = "
Megasquirt firmware is copyright and is only licensed for use on approved hardware."
+ text = "
See the LICENSE text supplied with your firmware."
+ text = "
"
+ text = "
To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+ ;-------------------------------------------------------------------------------
+#if INI_VERSION_2
+ [PortEditor]
+ ; spare ports
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = ms3_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = psEnabled, "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H", "PB0 - Spk A", "PB1 - Spk B", "PB2 - Spk C", "PB3 - Spk D", "PB4 - Spk E", "PB5 - Spk F", "PB6 - Spk G", "PB7 - Spk H", "CANout01", "CANout02", "CANout03", "CANout04", "CANout05", "CANout06", "CANout07", "CANout08", "CANout09", "CANout10", "CANout11", "CANout12", "CANout13", "CANout14", "CANout15", "CANout16", "Loop 1", "Loop 2", "Loop 3"
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+#endif
+ ;-------------------------------------------------------------------------------
+
+ [CurveEditor]
+ curve = vsslaunch_curve, "RPM Limit vs. Speed"
+ columnLabel = "Speed", "RPM limit", "Retard"
+ xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+ yAxis = 0, {rpmhigh}, 9
+; xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+; yAxis = 0, 30, 9
+ xBins = vsslaunch_vss
+ yBins = vsslaunch_rpm
+ yBins = vsslaunch_retard
+
+ curve = cranktaper_curvee, "Cranking Taper Curve (Events)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Events", "%fuel"
+ xAxis = 0, 1000, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_timeevents
+ yBins = cranktaper_pct
+
+ curve = cranktaper_curvet, "Cranking Taper Curve (Time)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Time", "%fuel"
+ xAxis = 0, 25.5, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_time
+ yBins = cranktaper_pct
+
+ curve = oil_curve, "Min/Max Oil Pressure vs. RPM"
+ columnLabel = "RPM", "Min", "Max"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 300, 6
+ xBins = oil_rpm, rpm
+ yBins = oil_press_min
+ yBins = oil_press_max
+ lineLabel = "Min. pressure"
+ lineLabel = "Max. pressure"
+
+ curve = hpte_curve, "Enrichment vs. Time"
+ columnLabel = "Time", "AFR decrease"
+ xAxis = 0, 25.5, 6
+ yAxis = 0, 3, 6
+ xBins = hpte_times
+ yBins = hpte_afrs
+
+ curve = fp_temp_curve, "Temperature Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp1"
+ columnLabel = "Temperature", "adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = fp_temps, fuel_temp1
+ yBins = fp_temp_adj
+
+ curve = fp_press_curve, "Pressure Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress1"
+ columnLabel = "Differential Pressure", "adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = fp_presss, fuel_press1
+ yBins = fp_press_adj
+
+ curve = alternator_linearise, "Duty linearisation"
+ columnLabel = "Calc", "Output"
+ xAxis = 0, 100, 7
+ yAxis = 0, 100, 7
+ xBins = alt_dutyin
+ yBins = alt_dutyout
+
+ curve = alternator_tempcurve, "Target Charge Voltage"
+ columnLabel = "Temperature", "Voltage"
+ xAxis = 0, 100, 6
+ yAxis = 12, 16, 6
+ xBins = alternator_temp
+ yBins = alternator_targvolts
+
+ curve = alternator_outduty, "Alternator Control Duty"
+ columnLabel = "Voltage", "Duty %"
+ xAxis = 12, 16, 6
+ yAxis = 0, 100, 6
+ xBins = alternator_dvolts, alt_targv
+ yBins = alternator_dutyv
+
+ curve = alternator_outfreq, "Alternator Control Frequency"
+ columnLabel = "Voltage", "Freq Hz"
+ xAxis = 12, 16, 6
+ yAxis = 0, 250, 6
+ xBins = alternator_fvolts, alt_targv
+ yBins = alternator_freqv
+
+ curve = pwm_curve_a, "PWM curve A"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_a, pwma_load
+ yBins = pwm_yaxis_a
+ size = 300, 240
+
+ curve = pwm_curve_b, "PWM curve B"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_b, pwmb_load
+ yBins = pwm_yaxis_b
+ size = 300, 240
+
+ curve = pwm_curve_c, "PWM curve C"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_c, pwmc_load
+ yBins = pwm_yaxis_c
+ size = 300, 240
+
+ curve = pwm_curve_d, "PWM curve D"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_d, pwmd_load
+ yBins = pwm_yaxis_d
+ size = 300, 240
+
+ curve = pwm_curve_e, "PWM curve E"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_e, pwme_load
+ yBins = pwm_yaxis_e
+ size = 300, 240
+
+ curve = pwm_curve_f, "PWM curve F"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_f, pwmf_load
+ yBins = pwm_yaxis_f
+ size = 300, 240
+
+ curve = tc_slip_curve, "Slip Threshold vs Knob Input"
+ columnLabel = "Knob Input", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = tcslipx
+ yBins = tcslipy
+
+ curve = blend1_curve, "VE1 -> VE2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx1
+ yBins = blendy1
+
+ curve = blend2_curve, "Spk1 -> Spk2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx2
+ yBins = blendy2
+
+ curve = blend3_curve, "VE1+2 -> VE3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx3
+ yBins = blendy3
+
+ curve = blend4_curve, "Spk1+2 -> Spk3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx4
+ yBins = blendy4
+
+ curve = blend5_curve, "AFR1 -> AFR2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx5
+ yBins = blendy5
+
+ curve = blend6_curve, "Boost1 -> Boost2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx6
+ yBins = blendy6
+
+ curve = blend7_curve, "Crank % 1 -> Crank % 2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx7
+ yBins = blendy7
+
+ curve = blend8_curve, "Flex Blending"
+ columnLabel = "Flex%", "Blend%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx8
+ yBins = blendy8
+
+ curve = tpswot_curve, "TPS for WOT"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ curve = launch_retard_time, "Timed Retard After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#timedretard"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = launch_time
+ yBins = launch_retard
+
+ curve = cl_idle_timing_curve, "Idle RPM Timing Correction Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadvrpm"
+ columnLabel = "RPM delta", "Timing Delta"
+ xAxis = -400, 400, 8
+ yAxis = -20, 20, 8
+ xBins = cl_idle_timing_target_deltas
+ yBins = cl_idle_timing_advance_deltas
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -10, 10, 6
+ xBins = idle_voltage_comp_voltage
+ yBins = idle_voltage_comp_delta
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+;time-based2
+ curve = time_accel_mapdot_curve2, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates2, MAPdot
+ yBins = maeBins2
+
+;time-based2
+ curve = time_accel_tpsdot_curve2, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates2, TPSdot
+ yBins = taeBins2
+
+;accel-pump
+ curve = pump_accel_mapdot_curve, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots, MAPdot
+ yBins = accel_mapdot_amts
+
+;accel-pump
+ curve = pump_accel_tpsdot_curve, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots, TPSdot
+ yBins = accel_tpsdot_amts
+
+;accel-pump2
+ curve = pump_accel_mapdot_curve2, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots2, MAPdot
+ yBins = accel_mapdot_amts2
+
+;accel-pump2
+ curve = pump_accel_tpsdot_curve2, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots2, TPSdot
+ yBins = accel_tpsdot_amts2
+
+ curve = knockstart_curve, "Knock Window Start"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -40, 10, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_starts
+
+ curve = knockduration_curve, "Knock Window Duration"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 40, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_durations
+
+ curve = knockthresh_curve, "Knock Input Threshold"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = knockupscale_curve, "Knock Coolant Scaling"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockcoolant"
+ columnLabel = "clt", "%"
+ xAxis = {cltlowlim}, {clthighlim}, 6
+ yAxis = 100, 500, 6
+ xBins = knock_clts, coolant
+ yBins = knock_upscale
+ gauge = cltGauge
+
+ curve = tc_perfect_curve, "Traction Control - Perfect Run VSS"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectvss"
+ columnLabel = "Time", "VSS"
+ xAxis = 0, 20, 9
+ yAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_vss
+
+ curve = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectrpm"
+ columnLabel = "Time", "RPM"
+ xAxis = 0, 20, 9
+ yAxis = 0, {rpmhigh}, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_rpm
+
+ curve = tc_retard_curve, "Spark Retard"
+ columnLabel = "Slip x time", "Retard"
+ xAxis = 0, 100, 5
+ yAxis = 0, 30, 5
+ xBins = tc_react_x
+ yBins = tc_retard
+
+ curve = tc_spkcut_curve, "Spark Cut"
+ columnLabel = "Slip x time", "Spark"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_spkcut
+
+ curve = tc_nitrous_curve, "Nitrous%"
+ columnLabel = "Slip x time", "Nitrous"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_nitrous
+
+ curve = tc_boost_curve, "Boost Cut"
+ columnLabel = "Slip x Time", "Boost"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost
+
+ curve = tc_boost_duty_delta_curve, "Boost Duty +/-"
+ columnLabel = "Slip x Time", "Boost Duty +/-"
+ xAxis = 0, 100, 5
+ yAxis = -100, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost_duty_delta
+
+ curve = tc_addfuel_curve, "Add Fuel"
+ columnLabel = "Slip x time", "Added Fuel"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_addfuel
+
+ curve = dualfuel_temp_curve, "Temperature Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp2"
+ columnLabel = "Temperature", "Adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_temp, fuel_temp2
+ yBins = dualfuel_temp_adj
+
+ curve = dualfuel_press_curve, "Pressure Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress2"
+ columnLabel = "Differential Pressure", "Adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_press, fuel_press2
+ yBins = dualfuel_press_adj
+
+ curve = primingPW2, "Priming Pulse 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep2"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p21, coolant, readonly
+ yBins = primePWTable2
+ gauge = cltGauge
+
+ curve = crankingPW2, "Cranking Pulse % 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp2"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant
+ yBins = crankPctTable2
+ gauge = cltGauge
+
+ curve = asePct2, "Afterstart Enrichment (ASE) Percentage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep2"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = asePctTable2
+ gauge = cltGauge
+
+ curve = aseTaper2, "Afterstart Enrichment (ASE) Taper 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset2"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = aseCntTable2
+ gauge = cltGauge
+
+ curve = warmup_curve2, "Warmup Enrichment (WUE) Curve 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue2"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = wueBins2
+ gauge = cltGauge
+
+ curve = MAFtable1f, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Freq", "Flow"
+ xAxis = {maf_freq0}, {maf_freq1}, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = maff, maf_freq
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellrpm_curve, "Dwell vs RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellvsrpm"
+ columnLabel = "RPM", "Dwell"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 6, 6
+ xBins = dwellrpm_rpm
+ yBins = dwellrpm_dwell
+
+
+ curve = boostvss_duty_curve, "Boost Duty vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "Duty"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 100, 6
+ xBins = boostvss_speed
+ yBins = boostvss_duty
+
+ curve = boostvss_target_curve, "Boost Target vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "kPa"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 400, 6
+ xBins = boostvss_speed
+ yBins = boostvss_target
+
+ ; nitrous 1 vs time
+ curve = n2o1_duty_time, "Nitrous1 - Duty vs Time"
+ columnLabel = "s", "Duty"
+
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_time
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_time, "Nitrous1 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_time
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_time, "Nitrous1 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_time
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs time
+ curve = n2o2_duty_time, "Nitrous2 - Duty vs Time"
+ columnLabel = "s", "Duty"
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_time
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_time, "Nitrous2 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_time
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_time, "Nitrous2 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_time
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs rpm
+ curve = n2o1_duty_rpm, "Nitrous1 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_rpm, "Nitrous1 - Added fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_rpm, "Nitrous1 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_rpm
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs rpm
+ curve = n2o2_duty_rpm, "Nitrous2 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_rpm, "Nitrous2 - Added Fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_rpm, "Nitrous2 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_rpm
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs VSS
+ curve = n2o1_duty_vss, "Nitrous1 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_vss
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_vss, "Nitrous1 - Added fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_vss
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_vss, "Nitrous1 - Retard vs VSS"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_vss
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs vss
+ curve = n2o2_duty_vss, "Nitrous2 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_vss
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_vss, "Nitrous2 - Added Fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_vss
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_vss, "Nitrous2 - Retard vs VSS"
+ columnLabel = "VSS", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_vss
+ yBins = n2o2_retard
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matcltcor"
+ columnLabel = "flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+ ;small pulsewidths
+ curve = smallcurve0, "Small Pulsewidth Curve 1"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw0
+
+ curve = smallcurve1, "Small Pulsewidth Curve 2"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw1
+
+ curve = smallcurve2, "Small Pulsewidth Curve 3"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw2
+
+ curve = smallcurve3, "Small Pulsewidth Curve 4"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw3
+
+ curve = opencurve0, "Dead Time Voltage % Curve 1"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct0
+
+ curve = opencurve1, "Injector Dead Time Curve 2"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct1
+
+ curve = opencurve2, "Injector Dead Time Curve 3"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct2
+
+ curve = opencurve3, "Injector Dead Time Curve 4"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct3
+
+ curve = boost_timed_curve, "Boost %age After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostdelay"
+ columnLabel = "Time", ""
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = boost_timed_time
+ yBins = boost_timed_pct
+
+ curve = mapsample_curve, "MAP Sample Timing"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 8
+ yAxis = 0, 180, 8
+ xBins = map_sample_rpms
+ yBins = map_sample_timing
+ gauge = tachometer
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant, readonly
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant, readonly
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant, readonly
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant, readonly
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment (ASE) Percentage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+ xAxis = -40, {mathigh}, 9
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = matGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air density"
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+; this is just as an example.. not yet finished
+ curve = EAEmanycurves, "Combined EAE Curve Graph - example to test TunerStudio features"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ xBins = EAESOCRPMbins2, rpm ; commented out to show last yAxis tied to previous xAxis
+ yBins = EAESON2
+ gauge = EAEGauge1 ; As always gauge is optional
+
+ lineLabel = "Sucked-from-walls const"
+ lineLabel = "Adhere-to-walls coef"
+ lineLabel = "Adhere-to-walls coef 2"
+ lineLabel = "Sucked-from-walls Correction"
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc2"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins2, fuelload
+ yBins = EAEBAWC2
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins2, fuelload
+ yBins = EAEBSOC2
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ gauge = EAEGauge1
+
+ curve = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins2, rpm
+ yBins = EAESON2
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins2, coolant
+ yBins = EAESOW2
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins2, coolant
+ yBins = EAEAWW2
+ gauge = EAEGauge1
+
+ curve = XAccTable, "X Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddlea"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 120, 4
+ xBins = XTrpms, rpm
+ yBins = XAcc
+ gauge = EAEGauge1
+
+ curve = XDecTable, "X Decel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddled"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 120, 9
+ xBins = XTrpms, rpm
+ yBins = XDec
+ gauge = EAEGauge1
+
+ curve = TauAccTable, "Tau Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimea"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauAcc
+ gauge = EAEGauge1
+
+ curve = TauDecTable, "Tau Decel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimed"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauDec
+ gauge = EAEGauge1
+
+ curve = XCltTable, "X (Puddling) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtxtemp"
+ columnLabel = "Temperature", "Correction"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = XClt_temps
+ yBins = XClt
+ gauge = cltGauge
+
+ curve = TCltTable, "Tau (Time) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtttemp"
+ columnLabel = "Temperature", "time"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = TauClt_temps
+ yBins = TauClt
+ gauge = cltGauge
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_curve, "Idle Advance Timing"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 4
+ yAxis = -10, 90, 4
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, {clthighlim}, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, 15000, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load at TPS Switchpoint"
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ [TableEditor]
+ ; table_id, map3d_id, "title", page
+ table = dwell_tbl, dwell_tblMap, "Dwell Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwelltable"
+ xBins = dwell_table_rpms, rpm
+ yBins = dwell_table_loads, ignload
+ zBins = dwell_table_values
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = ego_delay_Tbl, ego_delay_Map, "EGO Delay Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egodelay"
+ xBins = ego_delay_rpms, rpm
+ yBins = ego_delay_loads, afrload1
+ zBins = ego_delay_table
+ upDownLabel = "SHORTER", "LONGER"
+ gridOrient = 250, 0, 340
+
+ table = ego_auth_Tbl, ego_auth_Map, "EGO Authority Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egoauth"
+ xBins = ego_auth_rpms, rpm
+ yBins = ego_auth_loads, afrload1
+ zBins = ego_auth_table
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ltt_Table1Tbl, ltt_Table1Map, "Long Term Trim Table 1", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ltttable"
+ xBins = ltt_rpms, rpm
+ yBins = ltt_loads, fuelload
+ zBins = ltt_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = fp_dutyTbl, fp_dutyMap, "Fuel Pump Duty Table", 1
+ ; constant, variable
+ xBins = fpd_rpm rpm
+ yBins = fpd_load, fuelload
+ zBins = fpd_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = alphaMAPTbl, alphaMAPMap, "Fallback MAP Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fallbackmap"
+ xBins = amap_rpm, rpm
+ yBins = amap_tps, tps
+ zBins = alphaMAPtable
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;vvt timing
+ table = vvt_timing1_tbl, vvt_timing1_map, "VVT Intake (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtint"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing1
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = vvt_timing2_tbl, vvt_timing2_map, "VVT Exhaust (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtexh"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing2
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_rifuelcut_tbl, als_rifuelcut_map, "Turbo Anti-lag Roving Idle", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alsidle"
+ xBins = als_rirpms, rpm
+ yBins = als_ritpss, tps
+ zBins = als_rifuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_fuelcut_tbl, als_fuelcut_map, "ALS Fuel Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_fuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_sparkcut_tbl, als_sparkcut_map, "ALS Spark Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_sparkcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_timing_tbl, als_timing_map, "ALS Timing", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_addfuel_tbl, als_addfuel_map, "ALS Added Fuel %age", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_addfuel
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_a, pwm_duties_map_a, "Generic PWM Output A", 11
+ xBins = pwm_rpms_a, rpm
+ yBins = pwm_loadvals_a, pwma_load
+ zBins = pwm_duties_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_b, pwm_duties_map_b, "Generic PWM Output B", 2
+ xBins = pwm_rpms_b, rpm
+ yBins = pwm_loadvals_b, pwmb_load
+ zBins = pwm_duties_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_c, pwm_duties_map_c, "Generic PWM Output C", 2
+ xBins = pwm_rpms_c, rpm
+ yBins = pwm_loadvals_c, pwmc_load
+ zBins = pwm_duties_c
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_d, pwm_duties_map_d, "Generic PWM Output D", 2
+ xBins = pwm_rpms_d, rpm
+ yBins = pwm_loadvals_d, pwmd_load
+ zBins = pwm_duties_d
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_vvt, pwm_duties_map_vvt, "Generic PWM Output E / VVT", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtonoff"
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, vvt_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_e, pwm_duties_map_e, "Generic PWM Output E", 2
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, pwme_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_f, pwm_duties_map_f, "Generic PWM Output F", 2
+ xBins = pwm_rpms_f, rpm
+ yBins = pwm_loadvals_f, pwmf_load
+ zBins = pwm_duties_f
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_a, generic_pid_map_a, "Generic Closed-Loop A", 17
+ xBins = generic_pid_rpms_a, rpm
+ yBins = generic_pid_loadvals_a, generic_pid_load_a
+ zBins = generic_pid_targets_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_b, generic_pid_map_b, "Generic Closed-Loop B", 17
+ xBins = generic_pid_rpms_b, rpm
+ yBins = generic_pid_loadvals_b, generic_pid_load_b
+ zBins = generic_pid_targets_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = waterinjTbl, waterinjMap, "Water Injection Duty Table ", 1
+ xBins = waterinj_rpm, rpm
+ yBins = waterinj_map, map
+ zBins = waterinj_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = maxafr1Tbl, maxafr1Map, "Max AFR 1 in Lambda", 1
+#else
+ table = maxafr1Tbl, maxafr1Map, "Max AFR Difference", 1
+#endif
+ xBins = maxafr1_rpm, rpm
+ yBins = maxafr1_load, maxafrload
+ zBins = maxafr1_diff
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable4Tbl, veTable4Map, "Fuel VE Table 4", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve4"
+ ; constant, variable
+ xBins = frpm_table4, rpm
+ yBins = fmap_table4, fuelload2
+ zBins = veTable4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = idleve1Tbl, idleve1Map, "Idle VE table", 10
+ xBins = idleve_rpms1, rpm
+ yBins = idleve_loads1, fuelload
+ zBins = idleve_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = idleve2Tbl, idleve2Map, "Idle VE Table - Dual Fuel", 10
+ xBins = idleve_rpms2, rpm
+ yBins = idleve_loads2, fuelload
+ zBins = idleve_table2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = stagedTable, stagedMap, "Staged Injection Table", 6
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, fuelload
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl4, ignitionMap4, "Ignition Table 4 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign4"
+ xBins = srpm_table4, rpm
+ yBins = smap_table4, ignload2
+ zBins = advanceTable4
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Targets 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys2, boostctlDtyMap2, "Boost Control Duty 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty2"
+ xBins = boost_ctl_pwmtarg_rpm_bins2, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins2, throttle
+ zBins = boost_ctl_pwm_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Bias Duty 1", 15
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ_1
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs2, boostctlCLPWMtargsMap2, "Boost Control Bias Duty 2", 15
+ xBins = boost_ctl_cl_pwm_rpms2, rpm
+ yBins = boost_ctl_cl_pwm_targboosts2, boost_targ_2
+ zBins = boost_ctl_cl_pwm_targs2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs2, boostctlTargMap2, "Boost Control Targets 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg2"
+ xBins = boost_ctl_loadtarg_rpm_bins2, rpm
+ yBins = boost_ctl_loadtarg_tps_bins2, throttle
+ zBins = boost_ctl_load_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ ;injector trims
+ table = inj_trimaTbl, inj_trimaMap, "Cyl 1 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimbTbl, inj_trimbMap, "Cyl 2 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimcTbl, inj_trimcMap, "Cyl 3 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimdTbl, inj_trimdMap, "Cyl 4 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimeTbl, inj_trimeMap, "Cyl 5 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimfTbl, inj_trimfMap, "Cyl 6 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimgTbl, inj_trimgMap, "Cyl 7 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimhTbl, inj_trimhMap, "Cyl 8 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+ table = inj_trim1Tbl, inj_trim1Map, "Injector Trim 1", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trim2Tbl, inj_trim2Map, "Injector Trim 2", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim2"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimiTbl, inj_trimiMap, "Cyl 9 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimjTbl, inj_trimjMap, "Cyl 10 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimkTbl, inj_trimkMap, "Cyl 11 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimlTbl, inj_trimlMap, "Cyl 12 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimmTbl, inj_trimmMap, "Cyl 13 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimnTbl, inj_trimnMap, "Cyl 14 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimoTbl, inj_trimoMap, "Cyl 15 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimpTbl, inj_trimpMap, "Cyl 16 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;inj timing
+ table = inj_timing_tbl, inj_timing_map, "Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt1"
+ xBins = inj_timing_rpm, rpm
+ yBins = inj_timing_load, fuelload
+ zBins = inj_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = inj_timing_sec_tbl, inj_timing_sec_map, "Secondary Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt2"
+ xBins = inj_timing_sec_rpm, rpm
+ yBins = inj_timing_sec_load, fuelload
+ zBins = inj_timing_sec
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ ;spark trims
+ table = spk_trimaTbl, spk_trimaMap, "Spark Trim 1", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimbTbl, spk_trimbMap, "Spark Trim 2", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimcTbl, spk_trimcMap, "Spark Trim 3", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimdTbl, spk_trimdMap, "Spark Trim 4", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimeTbl, spk_trimeMap, "Spark Trim 5", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimfTbl, spk_trimfMap, "Spark Trim 6", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimgTbl, spk_trimgMap, "Spark Trim 7", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimhTbl, spk_trimhMap, "Spark Trim 8", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimiTbl, spk_trimiMap, "Spark Trim 9", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimjTbl, spk_trimjMap, "Spark Trim 10", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimkTbl, spk_trimkMap, "Spark Trim 11", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimlTbl, spk_trimlMap, "Spark Trim 12", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimmTbl, spk_trimmMap, "Spark Trim 13", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimnTbl, spk_trimnMap, "Spark Trim 14", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimoTbl, spk_trimoMap, "Spark Trim 15", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimpTbl, spk_trimpMap, "Spark Trim 16", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = narrowband_tgts_tbl, narrowband_tgts_map, "Narrowband EGO targets", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#narrowtargs"
+ xBins = narrowband_tgts_rpms, rpm
+ yBins = narrowband_tgts_loads, afrload1
+ zBins = narrowband_tgts
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ ;-------------------------------------------------------------------------------
+
+ [GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+ gaugeCategory = "Outputs 1"
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq1Gauge = pwseq1, "Pulse Width Seq 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq2Gauge = pwseq2, "Pulse Width Seq 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq3Gauge = pwseq3, "Pulse Width Seq 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq4Gauge = pwseq4, "Pulse Width Seq 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq5Gauge = pwseq5, "Pulse Width Seq 5", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq6Gauge = pwseq6, "Pulse Width Seq 6", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq7Gauge = pwseq7, "Pulse Width Seq 7", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq8Gauge = pwseq8, "Pulse Width Seq 8", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#if CYL_12_16_SUPPORT
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width Seq 9", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width Seq 10", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq11Gauge = pwseq11, "Pulse Width Seq 11", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq12Gauge = pwseq12, "Pulse Width Seq 12", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq13Gauge = pwseq13, "Pulse Width Seq 13", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq14Gauge = pwseq14, "Pulse Width Seq 14", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq15Gauge = pwseq15, "Pulse Width Seq 15", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq16Gauge = pwseq16, "Pulse Width Seq 16", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#else
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width V3 inj1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width V3 inj2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#endif
+
+ gaugeCategory = "Outputs 2"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ ; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ boostdutyGauge2 = boostduty2, "Boost Duty 2", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injtimingpriGauge = inj_timing_pri, "Injector timing (pri)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ injtimingsecGauge = inj_timing_sec, "Injector timing (sec)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+
+ gaugeCategory = "Outputs 3"
+ nitrous1_duty = nitrous1_duty, "Nitrous 1 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ nitrous2_duty = nitrous2_duty, "Nitrous 2 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ water_duty = water_duty, "Water Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_a = duty_pwm_a, "Generic PWM A Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_b = duty_pwm_b, "Generic PWM B Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_c = duty_pwm_c, "Generic PWM C Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_d = duty_pwm_d, "Generic PWM D Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_e = duty_pwm_e, "Generic PWM E Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_f = duty_pwm_f, "Generic PWM F Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ vvt_duty1 = vvt_duty1, "VVT 1 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty2 = vvt_duty2, "VVT 2 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty3 = vvt_duty3, "VVT 3 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty4 = vvt_duty4, "VVT 4 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ fp_duty = fp_duty, "Fuel pump duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ alt_duty = alt_duty, "Alternator Control Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ alt_freq = alt_freq, "Alternator Control Frequency", "Hz", 0, 255, 255, 255, 255, 255, 0, 0
+ alt_targv = alt_targv, "Alternator Target Volts", "V", 0, 16, 16, 16, 16, 16, 1, 1
+ generic_pid_duty_a = generic_pid_duty_a, "Generic Closed-Loop A Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ generic_pid_duty_b = generic_pid_duty_b, "Generic Closed-Loop B Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+
+ gaugeCategory = "Calculations 1"
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ gammaEnrichGauge = gammaEnrich, "Total cor", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ gammaairGauge = airCorrection, "Air density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ warmupgauge = warmupEnrich, "Warmup Enrichment", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ fuelcorr = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0
+ fueltemp_cor = fueltemp_cor, "Fuel Temperature Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ fuelpress_cor = fuelpress_cor, "Fuel Pressure Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ ltt_cor = ltt_cor, "Long Term Trim Correction", "%", -12.7, 12.7, -12.7, -12.7, 12.7, 12.7, 1, 1
+ veGauge1 = veCurr1, "VE1 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ nitrous_addfuel = n2o_addfuel, "Nitrous added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ tps_accel = tps_accel, "tps_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ map_accel = map_accel, "map_accel", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ total_accel = total_accel, "total_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ als_addfuel = als_addfuel, "ALS added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard, "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ coldAdvGauge = coldAdvDeg, "Cold advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ tc_retardGauge = tc_retard, "Traction Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ cel_retardGauge = cel_retard, "CEL Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ fc_retardGauge = fc_retard, "Fuel cut Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv4Gauge = adv4, "Spark Table 4", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ als_timingGauge = als_timing, "ALS Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launch_timingGauge = launch_timing, "Launch Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ step3_timingGauge = step3_timing, "3-step Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launchvss_retardGauge = launchvss_retard, "Launch VSS Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ timingerrGauge = timing_err, "Timing pred err", "%", -127, 127, 255,255,255,255,0,0
+; user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ nitrous_retard = n2o_retard, "Nitrous retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ launch_timer = launch_timer, "Launch timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+ launch_retard = launch_retard, "Launch timed retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ nitrous_timer = nitrous_timer, "Nitrous Timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+
+ gaugeCategory = "Calculations 3"
+ lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ vss1dot = vss1dot, "VSS1 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ vss2dot = vss2dot, "VSS2 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ vvttargGauge1 = vvt_target1, "VVT 1 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge2 = vvt_target2, "VVT 2 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge3 = vvt_target3, "VVT 3 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge4 = vvt_target4, "VVT 4 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ fuelflowGauge = fuelflow, "Fuel flow (avg)", "cc/min", 0, 65535, -1, -1, 99999, 99999, 0, 0
+ economy_l_100km = economy_l_100km, "Fuel economy", "l/100km", 0, 300, -1, -1, 900, 900, 1, 1
+ economy_mpg_us = economy_mpg_us, "Fuel economy", "mpg_us", 0, 60, -1, -1, 99, 99, 0, 0
+ economy_mpg_uk = economy_mpg_uk, "Fuel economy", "mpg_uk", 0, 60, -1, -1, 99, 99, 0, 0
+ boost_target_1 = boost_targ_1, "Boost Target 1", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ boost_target_2 = boost_targ_2, "Boost Target 2", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ tc_slipxtime = tc_slipxtime, "T/C Slip * Time", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+
+ gaugeCategory = "EGT inputs"
+#if CELSIUS
+ egtGauge1 = egt1, "EGT 01", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge2 = egt2, "EGT 02", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge3 = egt3, "EGT 03", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge4 = egt4, "EGT 04", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge5 = egt5, "EGT 05", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge6 = egt6, "EGT 06", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge7 = egt7, "EGT 07", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge8 = egt8, "EGT 08", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge9 = egt9, "EGT 09", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge10 = egt10, "EGT 10", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge11 = egt11, "EGT 11", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge12 = egt12, "EGT 12", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge13 = egt13, "EGT 13", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge14 = egt14, "EGT 14", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge15 = egt15, "EGT 15", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge16 = egt16, "EGT 16", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+#else
+ egtGauge1 = egt1, "EGT 01", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge2 = egt2, "EGT 02", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge3 = egt3, "EGT 03", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge4 = egt4, "EGT 04", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge5 = egt5, "EGT 05", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge6 = egt6, "EGT 06", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge7 = egt7, "EGT 07", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge8 = egt8, "EGT 08", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge9 = egt9, "EGT 09", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge10 = egt10, "EGT 10", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge11 = egt11, "EGT 11", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge12 = egt12, "EGT 12", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge13 = egt13, "EGT 13", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge14 = egt14, "EGT 14", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge15 = egt15, "EGT 15", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge16 = egt16, "EGT 16", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+#endif
+
+ gaugeCategory = "Sensor inputs1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ maf_freqGauge = maf_freq, "MAF Frequency", "Hz", 0, 30000, 0, 30000, 30000, 30000, 0, 0
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ gaugeCategory = "Sensor inputs2"
+ stream_levelGauge = stream_level, "Stream Level", "", 0, 128, 128, 128, 128, 128, 0, 0
+ vehiclespeed1 = vss1, "Vehicle Speed 1", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed2 = vss2, "Vehicle Speed 2", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed3 = vss3, "Vehicle Speed 3", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed4 = vss4, "Vehicle Speed 4", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+
+ shaftspeed1 = ss1, "Shaft Speed 1", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ shaftspeed2 = ss2, "Shaft Speed 2", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ gear = gear, "Gear", "", -1, 6, 6, 6, 6, 6, 0 ,0
+ accelx = accelx, "Accel X", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accely = accely, "Accel Y", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accelz = accelz, "Accel Z", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+#if CELSIUS
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+#else
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+#endif
+ fuelpressGauge1kpa = fuel_press1, "Fuel Pressure1", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1psi = fuel_press1_psi, "Fuel Pressure1", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1bar = fuel_press1_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2kpa = fuel_press2, "Fuel Pressure2", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2psi = fuel_press2_psi, "Fuel Pressure2", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2bar = fuel_press2_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ TPSADCGauge = tpsADC, "TPS ADC", "ADC", 0, 1023, -1, 1, 1024, 1024, 0, 0
+ load_duty = load_duty, "Alternator Load Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ batt_curr = batt_curr, "Battery Current", "A", -100, 100, 200, 200, 200, 200, 1, 1
+
+gaugeCategory = "Sensor inputs3"
+ vvtGauge1 = vvt_ang1, "VVT 1 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge2 = vvt_ang2, "VVT 2 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge3 = vvt_ang3, "VVT 3 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge4 = vvt_ang4, "VVT 4 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ knock01Gauge = knock_cyl01, "Knock cyl# 1", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock02Gauge = knock_cyl02, "Knock cyl# 2", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock03Gauge = knock_cyl03, "Knock cyl# 3", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock04Gauge = knock_cyl04, "Knock cyl# 4", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock05Gauge = knock_cyl05, "Knock cyl# 5", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock06Gauge = knock_cyl06, "Knock cyl# 6", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock07Gauge = knock_cyl07, "Knock cyl# 7", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock08Gauge = knock_cyl08, "Knock cyl# 8", "", 0, 100, 0, 0, 100, 100, 1, 0
+#if CYL_12_16_SUPPORT
+ knock09Gauge = knock_cyl09, "Knock cyl# 9", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock10Gauge = knock_cyl10, "Knock cyl#10", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock11Gauge = knock_cyl11, "Knock cyl#11", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock12Gauge = knock_cyl12, "Knock cyl#12", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock13Gauge = knock_cyl13, "Knock cyl#13", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock14Gauge = knock_cyl14, "Knock cyl#14", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock15Gauge = knock_cyl15, "Knock cyl#15", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock16Gauge = knock_cyl16, "Knock cyl#16", "", 0, 100, 0, 0, 100, 100, 1, 0
+#endif
+
+gaugeCategory = "Sensor inputs4"
+ gps_latdeggauge = gps_latdeg, "GPS Latitude deg", "deg", -90, +90, -90, -90, 90, 90, 0, 0
+ gps_latmingauge = gps_latmin, "GPS Latitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_latsecgauge = gps_latsec, "GPS Latitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_londeggauge = gps_londeg, "GPS Longitude deg", "deg", 0, +180, 0, 0, 180, 180, 0, 0
+ gps_lonmingauge = gps_lonmin, "GPS Longitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_lonsecgauge = gps_lonsec, "GPS Longitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_lonEWgauge = gps_lonEW, "GPS Longitude E/W", "E/W", 0, 255, 0, 0, 255, 255, 0, 0
+ gps_altgauge = gps_alt, "GPS Altitude", "m", -100, +13000, -100, -100, 13000, 13000, 1, 1
+ gps_speedgauge = gps_speed, "GPS Speed", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ gps_coursegauge = gps_course, "GPS Course", "deg", 0, 360, 0, 0, 360, 360, 1, 1
+
+ gps_latitudegauge = gps_latitude, "GPS Latitude", "deg", -90, +90, -90, -90, 90, 90, 5, 5
+ gps_longitudegauge = gps_longitude, "GPS Longitude", "deg", -180, +180, -180, -180, 180, 180, 5, 5
+
+gaugeCategory = "AFR/EGO inputs"
+#if NARROW_BAND_EGO
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+#elif LAMBDA
+
+ lambda1Gauge = lambda1, "Lambda 1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda 2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda3Gauge = lambda3, "Lambda 3", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda4Gauge = lambda4, "Lambda 4", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda5Gauge = lambda5, "Lambda 5", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda6Gauge = lambda6, "Lambda 6", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda7Gauge = lambda7, "Lambda 7", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda8Gauge = lambda8, "Lambda 8", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#else
+
+ afr1Gauge = afr1, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr3Gauge = afr3, "Air:Fuel Ratio 3", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr4Gauge = afr4, "Air:Fuel Ratio 4", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr5Gauge = afr5, "Air:Fuel Ratio 5", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr6Gauge = afr6, "Air:Fuel Ratio 6", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr7Gauge = afr7, "Air:Fuel Ratio 7", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr8Gauge = afr8, "Air:Fuel Ratio 8", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#endif
+
+gaugeCategory = "AFR/EGO calculations"
+#if NARROW_BAND_EGO
+ afr1targetGauge = afrtgt1, "EgoV 1 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr2targetGauge = afrtgt2, "EgoV 2 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr1errGauge = afr1err, "EgoV 1 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+ afr2errGauge = afr2err, "EgoV 2 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+#elif LAMBDA
+ afr1targetGauge = afrtgt1, "Lambda 1 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "Lambda 2 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "Lambda 1 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "Lambda 2 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+#else
+ afr1targetGauge = afrtgt1, "AFR 1 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "AFR 2 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "AFR 1 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "AFR 2 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+#endif
+ egoCorrGauge1 = egocor1, "EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egocor2, "EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge3 = egocor3, "EGO Correction 3", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge4 = egocor4, "EGO Correction 4", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge5 = egocor5, "EGO Correction 5", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge6 = egocor6, "EGO Correction 6", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge7 = egocor7, "EGO Correction 7", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge8 = egocor8, "EGO Correction 8", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+#if CYL_12_16_SUPPORT
+gaugeCategory = "AFR/EGO inputs 9-16"
+#if NARROW_BAND_EGO
+;
+#elif LAMBDA
+ lambda9Gauge = lambda9, "Lambda 9", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda10Gauge = lambda10, "Lambda 10", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda11Gauge = lambda11, "Lambda 11", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda12Gauge = lambda12, "Lambda 12", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda13Gauge = lambda13, "Lambda 13", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda14Gauge = lambda14, "Lambda 14", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda15Gauge = lambda15, "Lambda 15", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda16Gauge = lambda16, "Lambda 16", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+#else
+ afr9Gauge = afr9, "Air:Fuel Ratio 9", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr10Gauge = afr10, "Air:Fuel Ratio 10", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr11Gauge = afr11, "Air:Fuel Ratio 11", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr12Gauge = afr12, "Air:Fuel Ratio 12", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr13Gauge = afr13, "Air:Fuel Ratio 13", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr14Gauge = afr14, "Air:Fuel Ratio 14", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr15Gauge = afr15, "Air:Fuel Ratio 15", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr16Gauge = afr16, "Air:Fuel Ratio 16", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+#endif
+ egoV9Gauge = egov9, "Exhaust Gas Oxygen 9", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV10Gauge = egov10, "Exhaust Gas Oxygen 10", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV11Gauge = egov11, "Exhaust Gas Oxygen 11", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV12Gauge = egov12, "Exhaust Gas Oxygen 12", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV13Gauge = egov13, "Exhaust Gas Oxygen 13", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV14Gauge = egov14, "Exhaust Gas Oxygen 14", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV15Gauge = egov15, "Exhaust Gas Oxygen 15", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV16Gauge = egov16, "Exhaust Gas Oxygen 16", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+
+gaugeCategory = "AFR/EGO calculations 9-16"
+ egoCorrGauge9 = egocor9, "EGO Correction 9", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge10 = egocor10, "EGO Correction 10", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge11 = egocor11, "EGO Correction 11", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge12 = egocor12, "EGO Correction 12", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge13 = egocor13, "EGO Correction 13", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge14 = egocor14, "EGO Correction 14", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge15 = egocor15, "EGO Correction 15", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge16 = egocor16, "EGO Correction 16", "%", 50, 150, 90, 99, 101, 110, 1, 1
+#endif
+
+gaugeCategory = "Generic sensor inputs"
+ sensor01Gauge = sensor01, { stringValue(sensor01Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor02Gauge = sensor02, { stringValue(sensor02Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor03Gauge = sensor03, { stringValue(sensor03Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor04Gauge = sensor04, { stringValue(sensor04Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor05Gauge = sensor05, { stringValue(sensor05Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor06Gauge = sensor06, { stringValue(sensor06Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor07Gauge = sensor07, { stringValue(sensor07Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor08Gauge = sensor08, { stringValue(sensor08Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor09Gauge = sensor09, { stringValue(sensor09Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor10Gauge = sensor10, { stringValue(sensor10Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor11Gauge = sensor11, { stringValue(sensor11Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor12Gauge = sensor12, { stringValue(sensor12Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor13Gauge = sensor13, { stringValue(sensor13Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor14Gauge = sensor14, { stringValue(sensor14Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor15Gauge = sensor15, { stringValue(sensor15Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor16Gauge = sensor16, { stringValue(sensor16Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+
+gaugeCategory = "CAN board inputs/outputs"
+ canin1_8Gauge = canin1_8, "CAN inputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout1_8Gauge = canout1_8, "CAN outputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout9_16Gauge = canout9_16, "CAN outputs 9-16", "", 0, 255, 255, 255, 255, 255,0, 0
+ canpwmin0Gauge = canpwmin0, "CAN PWMin 0", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin1Gauge = canpwmin1, "CAN PWMin 1", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin2Gauge = canpwmin2, "CAN PWMin 2", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin3Gauge = canpwmin3, "CAN PWMin 3", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+
+gaugeCategory = "X-Code dev"
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ status5sGauge = status5s, "Status 5 (signed)", "",-32767, 65535, 65535, 65535, 65535, 65535,0, 0
+ status6Gauge = status6, "Status 6", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status7Gauge = status7, "Status 7", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status8Gauge = status8, "Status 8", "", 0, 255, 255, 255, 255, 255, 0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop time", "us", 0, 10000, -1, -1, 1000, 6000, 0, 0
+ sd_filenum = sd_filenum, "SDcard file number", "", 0, 9999, 9999, 9999, 9999, 9999, 0 ,0
+ sd_error = sd_error, "SDcard error", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_status = sd_status, "SDcard status", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_phase = sd_phase, "SDcard phase", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ cel_statusGauge = cel_status, "CEL Status", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_status2Gauge = cel_status2, "CEL Status2", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_errorcodeGauge = cel_errorcode, "CEL Error code", "", 0, 32, 32, 32, 32, 32, 0, 0
+ loopGauge = loop, "Loop bits 1-3", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+; gauge2 = EAEGauge1
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoV1Gauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+ gauge8 = lostsyncGauge
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Data Lost", "Lost Data", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 32}, "VE1/2", "VE3/4", white, black, green, black
+ indicator = { status1 & 64}, "SPK1/2", "SPK3/4", white, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+ indicator = { status2 & 1}, "N2O 1 off", "N2O 1 on", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2 off", "N2O 2 on", white, black, green, black
+ indicator = { status2 & 4}, "No Launch", "Launch in", white, black, green, black
+ indicator = { status2 & 16}, "No Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black
+
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "3 step off", "3 step on", white, black, green, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 16}, "No 3 step", "3 step in", white, black, green, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "Launch Off", "Launch on", white, black, red, black
+
+ indicator = { status6 & 1}, "EGT warn", "EGT warn", white, black, red, black
+ indicator = { status6 & 2}, "EGT shutdown", "EGT shutdown", white, black, red, black
+ indicator = { status6 & 4}, "AFR warn", "AFR warn", white, black, red, black
+ indicator = { status6 & 8}, "AFR shutdown", "AFR shutdown", white, black, red, black
+ indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black
+ indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black
+ indicator = { status6 & 64}, "Fan", "Fan", white, black, green, black
+ indicator = { status6 & 128}, "MAPsample error!", "MAPsample error!", white, black, red, black
+
+ indicator = { status7 & 1}, "VVT1 err", "VVT1 err", white, black, red, black
+ indicator = { status7 & 2}, "VVT2 err", "VVT2 err", white, black, red, black
+ indicator = { status7 & 4}, "VVT3 err", "VVT3 err", white, black, red, black
+ indicator = { status7 & 8}, "VVT4 err", "VVT4 err", white, black, red, black
+ indicator = { status7 & 16}, "No Knock", "Knock", white, black, red, black
+ indicator = { status7 & 32}, "AC", "AC", white, black, green, black
+ indicator = { status7 & 64}, "Check Engine", "Check Engine", white, black, red, black
+ indicator = { status7 & 128}, "Limp mode", "Limp mode", white, black, red, black
+
+ indicator = { status8 & 4}, "W.I. low", "W.I. low!", white, black, red, black
+ indicator = { status8 & 8}, "PW4X", "PW4X", white, black, red, black
+ indicator = { status8 & 16}, "VSS launch L/O", "VSS launch L/O", white, black, red, black
+ indicator = { status8 & 32}, "VSS launch on", "VSS launch on", white, black, red, black
+
+ indicator = { sd_status & 1}, "No SD", "SD in", white, black, green, black
+ indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black
+ indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black
+ indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black
+
+ indicator = { (gammaEnrich < 70) }, "-", "Tune error", white, black, red, black
+
+#if PORT_STATUS
+ indicator = { porta0 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { porta1 }, "PORTA1", "PORTA1", white, black, green, black
+ indicator = { porta2 }, "PORTA2", "PORTA2", white, black, green, black
+ indicator = { porta3 }, "PORTA3", "PORTA3", white, black, green, black
+ indicator = { porta4 }, "PORTA4", "PORTA4", white, black, green, black
+ indicator = { porta5 }, "PORTA5", "PORTA5", white, black, green, black
+ indicator = { porta6 }, "PORTA6", "PORTA6", white, black, green, black
+ indicator = { porta7 }, "PORTA7", "PORTA7", white, black, green, black
+
+ indicator = { portb0 }, "PORTB0", "PORTB0", white, black, green, black
+ indicator = { portb1 }, "PORTB1", "PORTB1", white, black, green, black
+ indicator = { portb2 }, "PORTB2", "PORTB2", white, black, green, black
+ indicator = { portb3 }, "PORTB3", "PORTB3", white, black, green, black
+ indicator = { portb4 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portb5 }, "PORTB5", "PORTB5", white, black, green, black
+ indicator = { portb6 }, "PORTB6", "PORTB6", white, black, green, black
+ indicator = { portb7 }, "PORTB7", "PORTB7", white, black, green, black
+
+ indicator = { porte0 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { porte1 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { porte2 }, "PORTE2", "PORTE2", white, black, green, black
+ indicator = { porte4 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { porth6 }, "PORTH6", "PORTH6", white, black, green, black
+ indicator = { porth7 }, "PORTH7", "PORTH7", white, black, green, black
+
+ indicator = { portk0 }, "PORTK0", "PORTK0", white, black, green, black
+ indicator = { portk1 }, "PORTK1", "PORTK1", white, black, green, black
+ indicator = { portk2 }, "PORTK2", "PORTK2", white, black, green, black
+ indicator = { portk3 }, "PORTK3", "PORTK3", white, black, green, black
+ indicator = { portk7 }, "PORTK7", "PORTK7", white, black, green, black
+
+ indicator = { portj0 }, "PORTJ0", "PORTJ0", white, black, green, black
+ indicator = { portj1 }, "PORTJ1", "PORTJ1", white, black, green, black
+ indicator = { portm2 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portm3 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portm4 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portm5 }, "PORTM5", "PORTM5", white, black, green, black
+ indicator = { portj7 }, "PORTJ7", "PORTJ7", white, black, green, black
+
+ indicator = { portp2 }, "PORTP2", "PORTP2", white, black, green, black
+ indicator = { portp3 }, "PORTP3", "PORTP3", white, black, green, black
+ indicator = { portp4 }, "PORTP4", "PORTP4", white, black, green, black
+ indicator = { portp5 }, "PORTP5", "PORTP5", white, black, green, black
+ indicator = { portp6 }, "PORTP6", "PORTP6", white, black, green, black
+ indicator = { portp7 }, "PORTP7", "PORTP7", white, black, green, black
+
+ indicator = { portt0 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt1 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt2 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt3 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt4 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt5 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt6 }, "PORTT6", "PORTT6", white, black, green, black
+
+ indicator = { canin1_8 & 1 }, "CANIN1", "CANIN1", white, black, green, black
+ indicator = { canin1_8 & 2 }, "CANIN2", "CANIN2", white, black, green, black
+ indicator = { canin1_8 & 4 }, "CANIN3", "CANIN3", white, black, green, black
+ indicator = { canin1_8 & 8 }, "CANIN4", "CANIN4", white, black, green, black
+ indicator = { canin1_8 & 16 }, "CANIN5", "CANIN5", white, black, green, black
+ indicator = { canin1_8 & 32 }, "CANIN6", "CANIN6", white, black, green, black
+ indicator = { canin1_8 & 64 }, "CANIN7", "CANIN7", white, black, green, black
+ indicator = { canin1_8 & 128}, "CANIN8", "CANIN8", white, black, green, black
+#endif
+
+ indicator = { cel_status_map }, "MAP fault", "MAP fault", white, black, red, black ; 1
+ indicator = { cel_status_mat }, "MAT fault", "MAT fault", white, black, red, black ; 2
+ indicator = { cel_status_clt }, "CLT fault", "CLT fault", white, black, red, black ; 4
+ indicator = { cel_status_tps }, "TPS fault", "TPS fault", white, black, red, black ; 8
+ indicator = { cel_status_batt }, "BATT fault", "BATT fault", white, black, red, black ; 16
+ indicator = { cel_status_afr0 }, "AFR0 fault", "AFR0 fault", white, black, red, black ; 32
+ indicator = { cel_status_sync }, "SYNC fault", "SYNC fault", white, black, red, black ; 64
+ indicator = { cel_status_egt }, "EGT fault", "EGT fault", white, black, red, black ; 128
+ indicator = { cel_status_flex }, "Flex fault", "Flex fault", white, black, red, black ;256
+ indicator = { cel_status_maf }, "MAF fault", "MAF fault", white, black, red, black ; 512
+ indicator = { cel_status_knock }, "Knock fault", "Knock fault", white, black, red, black ; 1024
+ indicator = { cel_status_cam }, "Cam fault", "Cam fault", white, black, red, black ; 2048
+ indicator = { cel_status_oil}, "Oil fault", "Oil fault", white, black, red, black ; 4096
+ indicator = { cel_status_fp}, "Fuel press.", "Fuel press.", white, black, red, black ; 4096
+ indicator = { cel_status_egtshut}, "CEL EGT shutdown", "CEL EGT shutdown", white, black, red, black ; 16384
+ indicator = { cel_status_afrshut}, "CEL AFR shutdown", "CEL AFR shutdown", white, black, red, black ; 32768
+
+ indicator = { cel_status2_winj}, "CEL W.Inj low", "CEL W.Inj low", white, black, red, black ; 1
+ indicator = { cel_status2_shutd}, "Safety shutdown", "Safety shutdown", white, black, red, black ; 2
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+ coolantBar = {cltlowlim}, {clthighlim}
+ matBar = -40, {mathigh}
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, {rpmhigh}
+ throttleBar = 0, 100
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoV1Gauge, egoV1Gauge, egoV1Gauge, egoV1Gauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge1, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = egoCorrGauge2, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+ ochBlockSize = 509 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+ ochGetCommand = "r\$tsCanId\x07%2o%2c" ; leave this alone
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ scatteredOffsetArray = qfrtfielddata
+ scatteredOchGetCommand = "g"
+ scatteredGetEnabled = { scatterRuntimeEnabled && (tsLocalCanId == tsCanId) }
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+#if PW_4X
+ pulseWidth1 = scalar, U16, 2, "ms", 0.004, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.004, 0.0
+#else
+ pulseWidth1 = scalar, U16, 2, "ms", 0.001, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.001, 0.0
+#endif
+ pulseWidth = { pulseWidth1 }, "ms" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+#if NARROW_BAND_EGO
+ afrtgt1 = scalar, U08, 12, "Volts", 0.00489, 0.0
+ afrtgt2 = scalar, U08, 13, "Volts", 0.00489, 0.0
+#elif LAMBDA
+ afrtgt1raw = scalar, U08, 12, "Lambda", 0.1, 0.0
+ afrtgt2raw = scalar, U08, 13, "Lambda", 0.1, 0.0
+#else
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+#endif
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1_old = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2_old = scalar, S16, 30, "AFR", 0.100, 0.0
+ knock = scalar, S16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.1000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.1000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "%", 0.392, 0.0
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.1000, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.1000, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Correcton based on percent alcohol in fuel.
+ sd_status = scalar, U08, 70, "", 1.0, 0.0
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ status6 = scalar, U08, 82, "", 1.0, 0.0
+ status7 = scalar, U08, 83, "", 1.0, 0.0
+ status5 = scalar, U16, 84, "", 1, 0 ; istatus5
+ status5s = scalar, S16, 84, "", 1, 0 ; istatus5
+ cel_status = scalar, U16, 86, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status_map = bits, U08, 87, [0:0] ; low byte
+ cel_status_mat = bits, U08, 87, [1:1]
+ cel_status_clt = bits, U08, 87, [2:2]
+ cel_status_tps = bits, U08, 87, [3:3]
+ cel_status_batt = bits, U08, 87, [4:4]
+ cel_status_afr0 = bits, U08, 87, [5:5]
+ cel_status_sync = bits, U08, 87, [6:6]
+ cel_status_egt = bits, U08, 87, [7:7]
+ cel_status_flex = bits, U08, 86, [0:0] ; high byte
+ cel_status_maf = bits, U08, 86, [1:1] ; high byte
+ cel_status_knock = bits, U08, 86, [2:2] ; high byte
+ cel_status_cam = bits, U08, 86, [3:3] ; high byte
+ cel_status_oil = bits, U08, 86, [4:4] ; high byte
+ cel_status_fp = bits, U08, 86, [5:5] ; high byte
+ cel_status_egtshut= bits, U08, 86, [6:6] ; high byte
+ cel_status_afrshut= bits, U08, 86, [7:7] ; high byte
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, "%", 0.100, 0.0
+ ignload2 = scalar, S16, 92, "%", 0.100, 0.0
+ synccnt = scalar, U08, 94, "", 1, 0
+ syncreason = scalar, U08, 95, "", 1.0, 0.0
+ wallfuel1 = scalar, U32, 96, "uS", 0.010, 0.0
+ wallfuel2 = scalar, U32, 100, "uS", 1.000, 0.0
+ sensor01 = scalar, S16, 104, "", 0.1000, 0.0
+ sensor02 = scalar, S16, 106, "", 0.1000, 0.0
+ sensor03 = scalar, S16, 108, "", 0.1000, 0.0
+ sensor04 = scalar, S16, 110, "", 0.1000, 0.0
+ sensor05 = scalar, S16, 112, "", 0.1000, 0.0
+ sensor06 = scalar, S16, 114, "", 0.1000, 0.0
+ sensor07 = scalar, S16, 116, "", 0.1000, 0.0
+ sensor08 = scalar, S16, 118, "", 0.1000, 0.0
+ sensor09 = scalar, S16, 120, "", 0.1000, 0.0
+ sensor10 = scalar, S16, 122, "", 0.1000, 0.0
+ sensor11 = scalar, S16, 124, "", 0.1000, 0.0
+ sensor12 = scalar, S16, 126, "", 0.1000, 0.0
+ sensor13 = scalar, S16, 128, "", 0.1000, 0.0
+ sensor14 = scalar, S16, 130, "", 0.1000, 0.0
+ sensor15 = scalar, S16, 132, "", 0.1000, 0.0
+ sensor16 = scalar, S16, 134, "", 0.1000, 0.0
+ canin1_8 = scalar, U08, 136, "", 1.000, 0.0
+ canout1_8 = scalar, U08, 137, "", 1.000, 0.0
+ canout9_16 = scalar, U08, 138, "", 1.000, 0.0
+ boostduty = scalar, U08, 139 , "%", 1.0, 0.0
+#if PW_4X
+ n2o_addfuel = scalar, S16, 140, "ms", 0.004, 0
+#else
+ n2o_addfuel = scalar, S16, 140, "ms", 0.001, 0
+#endif
+ n2o_retard = scalar, S16, 142, "deg", 0.1, 0
+#if PW_4X
+ pwseq1 = scalar, U16, 144, "ms", 0.004, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.004, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.004, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.004, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.004, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.004, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.004, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.004, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.004, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.004, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.004, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.004, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.004, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.004, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.004, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.004, 0.0
+#else
+ pwseq1 = scalar, U16, 144, "ms", 0.001, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.001, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.001, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.001, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.001, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.001, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.001, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.001, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.001, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.001, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.001, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.001, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.001, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.001, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.001, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.001, 0.0
+#endif
+ nitrous1_duty = scalar, U08, 176, "%", 1, 0
+ nitrous2_duty = scalar, U08, 177, "%", 1, 0
+#if CELSIUS
+ egt1 = scalar, S16, 178, "°C", 0.05555, -320
+ egt2 = scalar, S16, 180, "°C", 0.05555, -320
+ egt3 = scalar, S16, 182, "°C", 0.05555, -320
+ egt4 = scalar, S16, 184, "°C", 0.05555, -320
+ egt5 = scalar, S16, 186, "°C", 0.05555, -320
+ egt6 = scalar, S16, 188, "°C", 0.05555, -320
+ egt7 = scalar, S16, 190, "°C", 0.05555, -320
+ egt8 = scalar, S16, 192, "°C", 0.05555, -320
+ egt9 = scalar, S16, 194, "°C", 0.05555, -320
+ egt10 = scalar, S16, 196, "°C", 0.05555, -320
+ egt11 = scalar, S16, 198, "°C", 0.05555, -320
+ egt12 = scalar, S16, 200, "°C", 0.05555, -320
+ egt13 = scalar, S16, 202, "°C", 0.05555, -320
+ egt14 = scalar, S16, 204, "°C", 0.05555, -320
+ egt15 = scalar, S16, 206, "°C", 0.05555, -320
+ egt16 = scalar, S16, 208, "°C", 0.05555, -320
+#else
+ egt1 = scalar, S16, 178, "°F", 0.1, 0
+ egt2 = scalar, S16, 180, "°F", 0.1, 0
+ egt3 = scalar, S16, 182, "°F", 0.1, 0
+ egt4 = scalar, S16, 184, "°F", 0.1, 0
+ egt5 = scalar, S16, 186, "°F", 0.1, 0
+ egt6 = scalar, S16, 188, "°F", 0.1, 0
+ egt7 = scalar, S16, 190, "°F", 0.1, 0
+ egt8 = scalar, S16, 192, "°F", 0.1, 0
+ egt9 = scalar, S16, 194, "°F", 0.1, 0
+ egt10 = scalar, S16, 196, "°F", 0.1, 0
+ egt11 = scalar, S16, 198, "°F", 0.1, 0
+ egt12 = scalar, S16, 200, "°F", 0.1, 0
+ egt13 = scalar, S16, 202, "°F", 0.1, 0
+ egt14 = scalar, S16, 204, "°F", 0.1, 0
+ egt15 = scalar, S16, 206, "°F", 0.1, 0
+ egt16 = scalar, S16, 208, "°F", 0.1, 0
+#endif
+ maf = scalar, U16, 210, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ canpwmin0 = scalar, U16, 212, "", 1.000, 0.0
+ canpwmin1 = scalar, U16, 214, "", 1.000, 0.0
+ canpwmin2 = scalar, U16, 216, "", 1.000, 0.0
+ canpwmin3 = scalar, U16, 218, "", 1.000, 0.0
+ fuelflow = scalar, U16, 220, "cc/min", 1, 0.0
+ fuelcons = scalar, U16, 222, "l/km", 1, 0.0
+ EAEFuelCorr2 = scalar, U16, 224 , "%", 1.0, 0.0
+ tpsADC = scalar, U16, 226, "ADC", 1, 0 ; REAL for calibrator
+ eaeload1 = scalar, S16, 228, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.0
+ afrload1 = scalar, S16, 230, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1000, 0.0
+ gear = scalar, U08, 232, "", 1, 0
+ timing_err = scalar, S08, 233, "%", 1, 0 ; accuracy of timing prediction
+ RPMdot = scalar, S16, 234, "rpm/sec", 10, 0
+ vss1dot = scalar, S16, 236, "ms-2", 0.1, 0
+ vss2dot = scalar, S16, 238, "ms-2", 0.1, 0
+ accelx = scalar, S16, 240, "ms-2", 0.001, 0
+ accely = scalar, S16, 242, "ms-2", 0.001, 0
+ accelz = scalar, S16, 244, "ms-2", 0.001, 0
+ duty_pwm_a = scalar, U08, 246, "%", 1, 0
+ duty_pwm_b = scalar, U08, 247, "%", 1, 0
+ duty_pwm_c = scalar, U08, 248, "%", 1, 0
+ duty_pwm_d = scalar, U08, 249, "%", 1, 0
+ duty_pwm_e = scalar, U08, 250, "%", 1, 0
+ duty_pwm_f = scalar, U08, 251, "%", 1, 0
+ afr1 = scalar, U08, 252, "AFR", 0.1, 0.0
+ afr2 = scalar, U08, 253, "AFR", 0.1, 0.0
+ afr3 = scalar, U08, 254, "AFR", 0.1, 0.0
+ afr4 = scalar, U08, 255, "AFR", 0.1, 0.0
+ afr5 = scalar, U08, 256, "AFR", 0.1, 0.0
+ afr6 = scalar, U08, 257, "AFR", 0.1, 0.0
+ afr7 = scalar, U08, 258, "AFR", 0.1, 0.0
+ afr8 = scalar, U08, 259, "AFR", 0.1, 0.0
+ afr9 = scalar, U08, 260, "AFR", 0.1, 0.0
+ afr10 = scalar, U08, 261, "AFR", 0.1, 0.0
+ afr11 = scalar, U08, 262, "AFR", 0.1, 0.0
+ afr12 = scalar, U08, 263, "AFR", 0.1, 0.0
+ afr13 = scalar, U08, 264, "AFR", 0.1, 0.0
+ afr14 = scalar, U08, 265, "AFR", 0.1, 0.0
+ afr15 = scalar, U08, 266, "AFR", 0.1, 0.0
+ afr16 = scalar, U08, 267, "AFR", 0.1, 0.0
+ egov1 = scalar, U16, 268, "V", 0.00489, 0.0
+ egov2 = scalar, U16, 270, "V", 0.00489, 0.0
+ egov3 = scalar, U16, 272, "V", 0.00489, 0.0
+ egov4 = scalar, U16, 274, "V", 0.00489, 0.0
+ egov5 = scalar, U16, 276, "V", 0.00489, 0.0
+ egov6 = scalar, U16, 278, "V", 0.00489, 0.0
+ egov7 = scalar, U16, 280, "V", 0.00489, 0.0
+ egov8 = scalar, U16, 282, "V", 0.00489, 0.0
+ egov9 = scalar, U16, 284, "V", 0.00489, 0.0
+ egov10 = scalar, U16, 286, "V", 0.00489, 0.0
+ egov11 = scalar, U16, 288, "V", 0.00489, 0.0
+ egov12 = scalar, U16, 290, "V", 0.00489, 0.0
+ egov13 = scalar, U16, 292, "V", 0.00489, 0.0
+ egov14 = scalar, U16, 294, "V", 0.00489, 0.0
+ egov15 = scalar, U16, 296, "V", 0.00489, 0.0
+ egov16 = scalar, U16, 298, "V", 0.00489, 0.0
+ egocor1 = scalar, S16, 300, "%", 0.1000, 0.0
+ egocor2 = scalar, S16, 302, "%", 0.1000, 0.0
+ egocor3 = scalar, S16, 304, "%", 0.1000, 0.0
+ egocor4 = scalar, S16, 306, "%", 0.1000, 0.0
+ egocor5 = scalar, S16, 308, "%", 0.1000, 0.0
+ egocor6 = scalar, S16, 310, "%", 0.1000, 0.0
+ egocor7 = scalar, S16, 312, "%", 0.1000, 0.0
+ egocor8 = scalar, S16, 314, "%", 0.1000, 0.0
+ egocor9 = scalar, S16, 316, "%", 0.1000, 0.0
+ egocor10 = scalar, S16, 318, "%", 0.1000, 0.0
+ egocor11 = scalar, S16, 320, "%", 0.1000, 0.0
+ egocor12 = scalar, S16, 322, "%", 0.1000, 0.0
+ egocor13 = scalar, S16, 324, "%", 0.1000, 0.0
+ egocor14 = scalar, S16, 326, "%", 0.1000, 0.0
+ egocor15 = scalar, S16, 328, "%", 0.1000, 0.0
+ egocor16 = scalar, S16, 330, "%", 0.1000, 0.0
+ stream_level = scalar, U08, 332, "", 1,0
+ water_duty = scalar, U08, 333, "%", 1, 0
+ dwell_trl = scalar, U16, 334, "ms", 0.1000, 0.0
+ vss1 = scalar, U16, 336, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss2 = scalar, U16, 338, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss1_ms_1 = scalar, U16, 336, "ms-1", 0.1, 0.0 ; see calcs converting this raw number into kph or mph
+ vss2_ms_1 = scalar, U16, 338, "ms-1", 0.1, 0.0
+ ss1 = scalar, U16, 340, "RPM", 10.000, 0.0 ; now in steps of 10 rpm
+ ss2 = scalar, U16, 342, "RPM", 10.000, 0.0
+ nitrous_timer = scalar, U16, 344, "s", 0.001, 0
+ sd_filenum = scalar, U16, 346, "", 1, 0
+ sd_error = scalar, U08, 348, "", 1, 0
+ sd_phase = scalar, U08, 349, "", 1, 0
+ boostduty2 = scalar, U08, 350 , "%", 1.0, 0.0
+ status8 = scalar, U08, 351, "", 1.0, 0.0
+ vvt_ang1 = scalar, S16, 352, "deg", 0.100, 0.0
+ vvt_ang2 = scalar, S16, 354, "deg", 0.100, 0.0
+ vvt_ang3 = scalar, S16, 356, "deg", 0.100, 0.0
+ vvt_ang4 = scalar, S16, 358, "deg", 0.100, 0.0
+ inj_timing_pri = scalar, S16, 360, "deg", 0.100, 0.0
+ inj_timing_sec = scalar, S16, 362, "deg", 0.100, 0.0
+ vvt_target1 = scalar, S16, 364, "deg", 0.100, 0.0
+ vvt_target2 = scalar, S16, 366, "deg", 0.100, 0.0
+ vvt_target3 = scalar, S16, 368, "deg", 0.100, 0.0
+ vvt_target4 = scalar, S16, 370, "deg", 0.100, 0.0
+ vvt_duty1 = scalar, U08, 372 , "%", 0.392, 0.0
+ vvt_duty2 = scalar, U08, 373 , "%", 0.392, 0.0
+ vvt_duty3 = scalar, U08, 374 , "%", 0.392, 0.0
+ vvt_duty4 = scalar, U08, 375 , "%", 0.392, 0.0
+ fuel_pct = scalar, U16, 376, "%", 0.1000, 0.0
+#if CELSIUS
+ fuel_temp1 = scalar, S16, 378, "°C", 0.05555, -320.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#else
+ fuel_temp1 = scalar, S16, 378, "°F", 0.100, 0.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#endif
+ tps_accel = scalar, S16, 382, "%", 0.1000, 0.0
+ map_accel = scalar, S16, 384, "%", 0.1000, 0.0
+ total_accel = scalar, S16, 386, "%", 0.1000, 0.0
+ knock_cyl01 = scalar, U08, 388, "%", 0.4, 0
+ knock_cyl02 = scalar, U08, 389, "%", 0.4, 0
+ knock_cyl03 = scalar, U08, 390, "%", 0.4, 0
+ knock_cyl04 = scalar, U08, 391, "%", 0.4, 0
+ knock_cyl05 = scalar, U08, 392, "%", 0.4, 0
+ knock_cyl06 = scalar, U08, 393, "%", 0.4, 0
+ knock_cyl07 = scalar, U08, 394, "%", 0.4, 0
+ knock_cyl08 = scalar, U08, 395, "%", 0.4, 0
+ knock_cyl09 = scalar, U08, 396, "%", 0.4, 0
+ knock_cyl10 = scalar, U08, 397, "%", 0.4, 0
+ knock_cyl11 = scalar, U08, 398, "%", 0.4, 0
+ knock_cyl12 = scalar, U08, 399, "%", 0.4, 0
+ knock_cyl13 = scalar, U08, 400, "%", 0.4, 0
+ knock_cyl14 = scalar, U08, 401, "%", 0.4, 0
+ knock_cyl15 = scalar, U08, 402, "%", 0.4, 0
+ knock_cyl16 = scalar, U08, 403, "%", 0.4, 0
+ launch_timer = scalar, U16, 404, "s", 0.001, 0
+ launch_retard = scalar, S16, 406, "deg", 0.1, 0
+ maf_volts = scalar, U16, 408, "V", 0.001, 0.0
+ porta = scalar, U08, 410, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porta0 = bits, U08, 410, [0:0]
+ porta1 = bits, U08, 410, [1:1]
+ porta2 = bits, U08, 410, [2:2]
+ porta3 = bits, U08, 410, [3:3]
+ porta4 = bits, U08, 410, [4:4]
+ porta5 = bits, U08, 410, [5:5]
+ porta6 = bits, U08, 410, [6:6]
+ porta7 = bits, U08, 410, [7:7]
+
+ portb = scalar, U08, 411, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portb0 = bits, U08, 411, [0:0]
+ portb1 = bits, U08, 411, [1:1]
+ portb2 = bits, U08, 411, [2:2]
+ portb3 = bits, U08, 411, [3:3]
+ portb4 = bits, U08, 411, [4:4]
+ portb5 = bits, U08, 411, [5:5]
+ portb6 = bits, U08, 411, [6:6]
+ portb7 = bits, U08, 411, [7:7]
+
+ porteh = scalar, U08, 412, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porte0 = bits, U08, 412, [0:0]
+ porte1 = bits, U08, 412, [1:1]
+ porte2 = bits, U08, 412, [2:2]
+ porte4 = bits, U08, 412, [4:4]
+ porth6 = bits, U08, 412, [6:6]
+ porth7 = bits, U08, 412, [7:7]
+
+ portk = scalar, U08, 413, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portk0 = bits, U08, 413, [0:0]
+ portk1 = bits, U08, 413, [1:1]
+ portk2 = bits, U08, 413, [2:2]
+ portk3 = bits, U08, 413, [3:3]
+ portk7 = bits, U08, 413, [7:7]
+
+ portmj = scalar, U08, 414, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portj0 = bits, U08, 414, [0:0]
+ portj1 = bits, U08, 414, [1:1]
+ portm2 = bits, U08, 414, [2:2]
+ portm3 = bits, U08, 414, [3:3]
+ portm4 = bits, U08, 414, [4:4]
+ portm5 = bits, U08, 414, [5:5]
+ portj7 = bits, U08, 414, [7:7]
+
+ portp = scalar, U08, 415, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portp2 = bits, U08, 415, [2:2]
+ portp3 = bits, U08, 415, [3:3]
+ portp4 = bits, U08, 415, [4:4]
+ portp5 = bits, U08, 415, [5:5]
+ portp6 = bits, U08, 415, [6:6]
+ portp7 = bits, U08, 415, [7:7]
+
+ portt = scalar, U08, 416, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portt0 = bits, U08, 416, [0:0]
+ portt1 = bits, U08, 416, [1:1]
+ portt2 = bits, U08, 416, [2:2]
+ portt3 = bits, U08, 416, [3:3]
+ portt4 = bits, U08, 416, [4:4]
+ portt5 = bits, U08, 416, [5:5]
+ portt6 = bits, U08, 416, [6:6]
+ cel_errorcode = scalar, U08, 417, "bit", 1, 0.0
+ boost_targ_1 = scalar, S16, 418, "%", 0.1, 0
+ boost_targ_2 = scalar, S16, 420, "%", 0.1, 0
+#if CELSIUS
+ airtemp = scalar, S16, 422, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 422, "°F", 0.100, 0.0
+#endif
+ looptime = scalar, U16, 424, "us", 1.0, 0.0
+ vss3 = scalar, U16, 426, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss4 = scalar, U16, 428, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss3_ms_1 = scalar, U16, 426, "ms-1", 0.1, 0.0
+ vss4_ms_1 = scalar, U16, 428, "ms-1", 0.1, 0.0
+ fuel_press1 = scalar, S16, 430, "kPa", 0.100, 0.0
+ fuel_press2 = scalar, S16, 432, "kPa", 0.100, 0.0
+ cl_idle_targ_rpm = scalar, U16, 434, "rpm", 1, 0
+ fp_duty = scalar, U08, 436, "%", 0.392, 0.0
+ alt_duty = scalar, U08, 437, "%", 1, 0.0
+ alt_freq = scalar, U08, 437, "Hz", 1, 0.0
+ load_duty = scalar, U08, 438, "%", 1, 0.0
+ alt_targv = scalar, U08, 439, "V", 0.100, 0.0
+ batt_curr = scalar, S16, 440, "A", 0.1, 0.0
+ fueltemp_cor = scalar, S16, 442, "%", 0.100, 0.0
+ fuelpress_cor = scalar, S16, 444, "%", 0.100, 0.0
+ ltt_cor = scalar, S08, 446, "%", 0.100, 0.0
+; engine_state_
+ tc_retard = scalar, S16, 448, "deg", 0.100, 0.0
+ cel_retard = scalar, S16, 450, "deg", 0.100, 0.0
+ fc_retard = scalar, S16, 452, "deg", 0.100, 0.0
+ ext_advance = scalar, S16, 454, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 456, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 458, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 460, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 462, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 464, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 466, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 468, "deg", 0.100, 0.0
+ adv4 = scalar, S16, 470, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 472, "deg", 0.100, 0.0
+ als_timing = scalar, S16, 474, "deg", 0.100, 0.0
+#if PW_4X
+ als_addfuel = scalar, S16, 476, "ms", 0.004, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.004, 0.0
+#else
+ als_addfuel = scalar, S16, 476, "ms", 0.001, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.001, 0.0
+#endif
+ launch_timing = scalar, S16, 480, "deg", 0.100, 0.0
+ step3_timing = scalar, S16, 482, "deg", 0.100, 0.0
+ launchvss_retard = scalar, S16, 484, "deg", 0.100, 0.0
+; cel_status2_xx = bits, U08, 486, [0:0] ; high byte
+ cel_status2 = scalar, U16, 486, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status2_winj = bits, U08, 487, [0:0] ; low byte
+ cel_status2_shutd = bits, U08, 487, [1:1]
+ gps_latdeg = scalar, S08, 488, "", 1,0
+ gps_latmin = scalar, U08, 489, "", 1,0
+ gps_latmmin = scalar, U16, 490, "", 1,0
+ gps_londeg = scalar, U08, 492, "", 1,0
+ gps_lonmin = scalar, U08, 493, "", 1,0
+ gps_lonmmin = scalar, U16, 494, "", 1,0
+ gps_outstatus = scalar, U08, 496, "", 1,0
+ gps_altk = scalar, S08, 497, "", 1,0
+ gps_altm = scalar, S16, 498, "", 0.1,0
+ gps_speed = scalar, U16, 500, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ gps_speed_ms_1 = scalar, U16, 500, "ms-1", 0.1, 0.0
+ gps_course = scalar, U16, 502, "", 0.1,0
+ generic_pid_duty_a = scalar, U08, 504, "%", 0.392, 0.0
+ generic_pid_duty_b = scalar, U08, 505, "%", 0.392, 0.0
+ tc_slipxtime = scalar, U16, 506, "", 1,0
+ loop = scalar, U08, 508, "", 1, 0
+
+;very nearly out of space. 512+ requires firmware changes
+;---------------
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ cycleTime1 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts1 = { nCylinders/divider}
+ altDiv1 = { alternate ? 2 : 1 }
+ dcfactor1 = { (sequential == 0) ? nSquirts1/altDiv1 : ( (sequential == 1) ? 2 : 1) }
+ dutyCycle1 = { cycleTime1 ? (100.0*dcfactor1*pulseWidth1/cycleTime1) : 0}, "%"
+
+ cycleTime2 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ altDiv2 = { alternate ? 2 : 1 } ; ought to look at staging parameters too
+ dcfactor2a = { (sequential == 0) ? nSquirts2/altDiv2 : ( (sequential == 1) ? 2 : 1) } ; ought to look at staging parameters too
+ dcfactor2b = { (staged_first_param && staged_extended_opts_use_v3) ? 1 : dcfactor2a }
+ dutyCycle2 = { cycleTime2 ? (100.0*dcfactor2b*pulseWidth2/cycleTime2) : 0}, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+ afr1err = { egov1 - afrtgt1 }
+ afr2err = { egov2 - afrtgt2 }
+#elif LAMBDA
+ lambda1 = { afr1 / stoich }, "Lambda"
+ lambda2 = { afr2 / stoich }, "Lambda2"
+ lambda3 = { afr3 / stoich }, "Lambda3"
+ lambda4 = { afr4 / stoich }, "Lambda4"
+ lambda5 = { afr5 / stoich }, "Lambda5"
+ lambda6 = { afr6 / stoich }, "Lambda6"
+ lambda7 = { afr7 / stoich }, "Lambda7"
+ lambda8 = { afr8 / stoich }, "Lambda8"
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+ afrtgt1 = { afrtgt1raw / stoich * (egoType == 2) } ; return zero if NB because of mixed units with target in volts
+ afrtgt2 = { afrtgt2raw / stoich * (egoType == 2) }
+ afr1err = { (afr1 - afrtgt1raw) / stoich * (egoType == 2)}
+ afr2err = { (afr2 - afrtgt2raw) / stoich * (egoType == 2)}
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+ afr1err = { afr1 - afrtgt1 }
+ afr2err = { afr2 - afrtgt2 }
+#endif
+
+ pwma_load = { getChannelValueByOffset( pwm_opt_load_a_offset ) }
+ pwmb_load = { getChannelValueByOffset( pwm_opt_load_b_offset ) }
+ pwmc_load = { getChannelValueByOffset( pwm_opt_load_c_offset ) }
+ pwmd_load = { getChannelValueByOffset( pwm_opt_load_d_offset ) }
+ pwme_load = { getChannelValueByOffset( pwm_opt_load_e_offset ) }
+ pwmf_load = { getChannelValueByOffset( pwm_opt_load_f_offset ) }
+ maxafrload = { (maxafr_opt1_load & 1) ? tps : map }
+
+ vvt_load = { (vvt_opt7_yaxis == 0) ? fuelload : ((vvt_opt7_yaxis == 1) ? map : ( (vvt_opt7_yaxis == 2) ? (map*100/barometer) : ((vvt_opt7_yaxis == 3) ? tps : ((vvt_opt7_yaxis == 4) ? mafload : fuelload ) ) ) ) }
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+; calculate instantaneous economy from fuel flow (not calculated in firmware at this time)
+ economy_l_km = { vss1_ms_1 ? (fuelflow / (vss1_ms_1 * 60)) : 0 }
+; economy_mpg_us = { (1 / economy_l_km) * 3.800 / 1.609344 }
+ economy_mpg_us = { vss1_ms_1 ? (2.361 / economy_l_km) : 0 }
+ economy_mpg_uk = { vss1_ms_1 ? (2.825 / economy_l_km) : 0 }
+ economy_l_100km = { economy_l_km * 100 }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+ maf_freq = { MAFOption_t ? (maf_freq0 + ((maf_freq1 - maf_freq0) * maf_volts / 5)) : 0 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;fuel pressures
+ fuel_press1_psi = {fuel_press1 * 0.147 }, "psi"
+ fuel_press2_psi = {fuel_press2 * 0.147 }, "psi"
+ fuel_press1_bar = {fuel_press1 / 101.35 }, "bar"
+ fuel_press2_bar = {fuel_press2 / 101.35 }, "bar"
+
+ msToPrefUnitsScale = { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, ""
+
+ gps_latsec = { 60 * gps_latmmin / 10000 }
+ gps_lonsec = { 60 * gps_lonmmin / 10000 }
+ gps_alt = { gps_altk * 1000 + gps_altm }
+ gps_latitude = { gps_latdeg + (gps_latmin / 60) + (gps_latsec / 3600) }
+ gps_long = { gps_londeg + (gps_lonmin / 60) + (gps_lonsec / 3600) }
+ gps_lonEW = { (gps_outstatus & 1) ? 1 : 0 }
+ gps_longitude = { gps_lonEW ? 0-gps_long : gps_long } ; the 0 is redundant, but causes a TS error otherwise
+
+ generic_pid_load_a = { getChannelValueByOffset( generic_pid_load_offset_a ) }
+ generic_pid_load_b = { getChannelValueByOffset( generic_pid_load_offset_b ) }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = tpsADC, "TPSADC", int, "%d" ; for debug
+ entry = maf, "MAF", float, "%.2f", { MAFOption || MAFOption_t }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption || MAFOption_t }
+ entry = maf_volts, "MAF volts", float, "%.3f", { MAFOption }
+ entry = maf_freq, "MAF Freq", int, "%d", { MAFOption_t }
+#if NARROW_BAND_EGO
+ entry = egov1 , "O2", float, "%.3f", {egonum > 0}
+ entry = egov2 , "O2 #2", float, "%.3f", {egonum > 1}
+ entry = egov3 , "O2 #3", float, "%.3f", {egonum > 2}
+ entry = egov4 , "O2 #4", float, "%.3f", {egonum > 3}
+ entry = egov5 , "O2 #5", float, "%.3f", {egonum > 4}
+ entry = egov6 , "O2 #6", float, "%.3f", {egonum > 5}
+ entry = egov7 , "O2 #7", float, "%.3f", {egonum > 6}
+ entry = egov8 , "O2 #8", float, "%.3f", {egonum > 7}
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f", {egonum > 0}
+ entry = lambda2, "Lambda2", float, "%.3f", {egonum > 1}
+ entry = lambda3, "Lambda3", float, "%.3f", {egonum > 2}
+ entry = lambda4, "Lambda4", float, "%.3f", {egonum > 3}
+ entry = lambda5, "Lambda5", float, "%.3f", {egonum > 4}
+ entry = lambda6, "Lambda6", float, "%.3f", {egonum > 5}
+ entry = lambda7, "Lambda7", float, "%.3f", {egonum > 6}
+ entry = lambda8, "Lambda8", float, "%.3f", {egonum > 7}
+#else
+ entry = afr1, "AFR", float, "%.2f", {egonum > 0}
+ entry = afr2, "AFR2", float, "%.2f", {egonum > 1}
+ entry = afr3, "AFR3", float, "%.2f", {egonum > 2}
+ entry = afr4, "AFR4", float, "%.2f", {egonum > 3}
+ entry = afr5, "AFR5", float, "%.2f", {egonum > 4}
+ entry = afr6, "AFR6", float, "%.2f", {egonum > 5}
+ entry = afr7, "AFR7", float, "%.2f", {egonum > 6}
+ entry = afr8, "AFR8", float, "%.2f", {egonum > 7}
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egocor1, "EGO cor1", int, "%.1f"
+ entry = egocor2, "EGO cor2", int, "%.1f", {egonum > 1}
+ entry = egocor3, "EGO cor3", int, "%.1f", {egonum > 2}
+ entry = egocor4, "EGO cor4", int, "%.1f", {egonum > 3}
+ entry = egocor5, "EGO cor5", int, "%.1f", {egonum > 4}
+ entry = egocor6, "EGO cor6", int, "%.1f", {egonum > 5}
+ entry = egocor7, "EGO cor7", int, "%.1f", {egonum > 6}
+ entry = egocor8, "EGO cor8", int, "%.1f", {egonum > 7}
+
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+ entry = accEnrichMS, "Fuel: Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%.1f"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "Duty Cycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%.1f"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "Duty Cycle2", float, "%.1f"
+
+ entry = pwseq1, "Seq PW1", float, "%.3f", { sequential }
+ entry = pwseq2, "Seq PW2", float, "%.3f", { sequential }
+ entry = pwseq3, "Seq PW3", float, "%.3f", { sequential }
+ entry = pwseq4, "Seq PW4", float, "%.3f", { sequential }
+ entry = pwseq5, "Seq PW5", float, "%.3f", { sequential }
+ entry = pwseq6, "Seq PW6", float, "%.3f", { sequential }
+ entry = pwseq7, "Seq PW7", float, "%.3f", { sequential }
+ entry = pwseq8, "Seq PW8", float, "%.3f", { sequential }
+#if CYL_12_16_SUPPORT
+ entry = pwseq9, "Seq PW9", float, "%.3f", { sequential }
+ entry = pwseq10, "Seq PW10", float, "%.3f", { sequential }
+ entry = pwseq11, "Seq PW11", float, "%.3f", { sequential }
+ entry = pwseq12, "Seq PW12", float, "%.3f", { sequential }
+ entry = pwseq13, "Seq PW13", float, "%.3f", { sequential }
+ entry = pwseq14, "Seq PW14", float, "%.3f", { sequential }
+ entry = pwseq15, "Seq PW15", float, "%.3f", { sequential }
+ entry = pwseq16, "Seq PW16", float, "%.3f", { sequential }
+#endif
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = knock, "Knock in", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = tc_retard, "SPK: Traction retard", float, "%.1f"
+ entry = cel_retard, "SPK: CEL retard", float, "%.1f"
+ entry = fc_retard, "SPK: Fuel cut retard", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance,"SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = adv4, "SPK: Spark Table 4", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = als_timing, "SPK: ALS Timing", float, "%.1f"
+ entry = launch_timing, "SPK: Launch Timing", float, "%.1f"
+ entry = step3_timing, "SPK: 3-step Timing", float, "%.1f"
+ entry = launchvss_retard,"SPK: Launch VSS Retard",float, "%.1f"
+ entry = n2o_retard, "SPK: Nitrous Retard", float, "%.1f", { N2Oopt_2 }
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = iacstep, "Stepper Idle position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle duty", float, "%.1f", {IdleCtl == 2}
+ entry = cl_idle_targ_rpm, "Closed-loop idle target RPM", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = rpm_target_error_follower, "Closed-loop idle RPM error", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = boostduty, "Boost duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ_1, "Boost target 1", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+ entry = boostduty2, "Boost duty 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_on2 }
+ entry = boost_targ_2, "Boost target 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_on2 }
+
+#if NARROW_BAND_EGO
+ entry = afrtgt1, "EgoV 1 Target", float, "%.1f"
+ entry = afrtgt2, "EgoV 2 Target", float, "%.1f"
+ entry = afr1err, "EgoV 1 Error", float, "%.1f"
+ entry = afr2err, "EgoV 2 Error", float, "%.1f"
+#elif LAMBDA
+ entry = afrtgt1, "Lambda 1 Target", float, "%.1f"
+ entry = afrtgt2, "Lambda 2 Target", float, "%.1f"
+ entry = afr1err, "Lambda 1 Error", float, "%.1f"
+ entry = afr2err, "Lambda 2 Error", float, "%.1f"
+#else
+ entry = afrtgt1, "AFR 1 Target", float, "%.1f"
+ entry = afrtgt2, "AFR 2 Target", float, "%.1f"
+ entry = afr1err, "AFR 1 Error", float, "%.1f"
+ entry = afr2err, "AFR 2 Error", float, "%.1f"
+#endif
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = wallfuel1, "Wall fuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "Wall fuel2", int, "%d", {EAEOption}
+
+ entry = EAEFuelCorr1, "EAE1", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary ign load", float, "%.1f"
+ entry = eaeload1, "EAE load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR load", float, "%.1f"
+
+ entry = inj_timing_pri, "Injector timing pri", float, "%.1f"
+ entry = inj_timing_sec, "Injector timing sec", float, "%.1f"
+
+ entry = egt1, "EGT1", int, "%d", {egt_num > 0}
+ entry = egt2, "EGT2", int, "%d", {egt_num > 1}
+ entry = egt3, "EGT3", int, "%d", {egt_num > 2}
+ entry = egt4, "EGT4", int, "%d", {egt_num > 3}
+ entry = egt5, "EGT5", int, "%d", {egt_num > 4}
+ entry = egt6, "EGT6", int, "%d", {egt_num > 5}
+ entry = egt7, "EGT7", int, "%d", {egt_num > 6}
+ entry = egt8, "EGT8", int, "%d", {egt_num > 7}
+ entry = egt9, "EGT9", int, "%d", {egt_num > 8}
+ entry = egt10, "EGT10", int, "%d", {egt_num > 9}
+ entry = egt11, "EGT11", int, "%d", {egt_num > 10}
+ entry = egt12, "EGT12", int, "%d", {egt_num > 11}
+ entry = egt13, "EGT13", int, "%d", {egt_num > 12}
+ entry = egt14, "EGT14", int, "%d", {egt_num > 13}
+ entry = egt15, "EGT15", int, "%d", {egt_num > 14}
+ entry = egt16, "EGT16", int, "%d", {egt_num > 15}
+
+; for debug, enable these always
+ entry = sensor01, { stringValue(sensor01Alias) }, float, "%.1f";, { sensor01_source }
+ entry = sensor02, { stringValue(sensor02Alias) }, float, "%.1f";, { sensor02_source }
+ entry = sensor03, { stringValue(sensor03Alias) }, float, "%.1f";, { sensor03_source }
+ entry = sensor04, { stringValue(sensor04Alias) }, float, "%.1f";, { sensor04_source }
+ entry = sensor05, { stringValue(sensor05Alias) }, float, "%.1f";, { sensor05_source }
+ entry = sensor06, { stringValue(sensor06Alias) }, float, "%.1f";, { sensor06_source }
+ entry = sensor07, { stringValue(sensor07Alias) }, float, "%.1f";, { sensor07_source }
+ entry = sensor08, { stringValue(sensor08Alias) }, float, "%.1f";, { sensor08_source }
+ entry = sensor09, { stringValue(sensor09Alias) }, float, "%.1f";, { sensor09_source }
+ entry = sensor10, { stringValue(sensor10Alias) }, float, "%.1f";, { sensor10_source }
+ entry = sensor11, { stringValue(sensor11Alias) }, float, "%.1f";, { sensor11_source }
+ entry = sensor12, { stringValue(sensor12Alias) }, float, "%.1f";, { sensor12_source }
+ entry = sensor13, { stringValue(sensor13Alias) }, float, "%.1f";, { sensor13_source }
+ entry = sensor14, { stringValue(sensor14Alias) }, float, "%.1f";, { sensor14_source }
+ entry = sensor15, { stringValue(sensor15Alias) }, float, "%.1f";, { sensor15_source }
+ entry = sensor16, { stringValue(sensor16Alias) }, float, "%.1f";, { sensor16_source }
+
+ entry = canpwmin0, "CANpwmin0", int, "%d", { enable_pollPWM }
+ entry = canpwmin1, "CANpwmin1", int, "%d", { enable_pollPWM }
+ entry = canpwmin2, "CANpwmin2", int, "%d", { enable_pollPWM }
+ entry = canpwmin3, "CANpwmin3", int, "%d", { enable_pollPWM }
+ entry = canin1_8, "canin1_8", int, "%d"
+ entry = canout1_8, "canout1_8", int, "%d"
+ entry = canout9_16, "canout9_16", int, "%d"
+
+ entry = timing_err, "Timing err", float, "%.1f"
+ entry = synccnt, "Lost sync count", int, "%d"
+ entry = syncreason, "Lost sync reason", int, "%d"
+
+ entry = fuelflow, "Fuel flow cc/min", int, "%d"
+
+ entry = vss1, "VSS1", int, "%.1f", {vss_opt0_1}
+ entry = vss2, "VSS2", int, "%.1f", {vss_opt0_2}
+ entry = vss3, "VSS3", int, "%.1f", {vss_opt0_3}
+ entry = vss4, "VSS4", int, "%.1f", {vss_opt0_4}
+ entry = vss1_ms_1, "VSS1 ms-1", int, "%.1f", {vss_opt0_1}
+ entry = vss2_ms_1, "VSS2 ms-1", int, "%.1f", {vss_opt0_2}
+ entry = vss3_ms_1, "VSS3 ms-1", int, "%.1f", {vss_opt0_3}
+ entry = vss4_ms_1, "VSS4 ms-1", int, "%.1f", {vss_opt0_4}
+
+ entry = economy_mpg_us, "MPG(USA)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_mpg_uk, "MPG(UK)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_l_100km, "l/100km", int, "%d", {vss_opt0_1 && (prefSpeedUnits == 1)}
+
+ entry = ss1, "Shaft rpm 1", int, "%d", { ss_opt1 }
+ entry = ss2, "Shaft rpm 2", int, "%d", { ss_opt2 }
+ entry = n2o_addfuel, "Nitrous added fuel", float, "%.3f", { N2Oopt_2 }
+ entry = nitrous1_duty, "Nitrous 1 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous2_duty, "Nitrous 2 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous_timer, "Nitrous Timer", float, "%.3f", { N2Oopt_2 }
+ entry = water_duty, "Water inj duty", int, "%d", { water_freq_on }
+ entry = als_addfuel, "ALS added fuel", float, "%.3f", { als_in_pin }
+ entry = als_timing, "ALS timing", float, "%.1f", { als_in_pin }
+ entry = sd_filenum, "SDcard file number", int, "%d", { log_style_on2 }
+ entry = sd_status, "SDcard status", int, "%d", { log_style_on2 }
+ entry = sd_phase, "SDcard phase", int, "%d", { log_style_on2 }
+ entry = sd_error, "SDcard error", int, "%d", { log_style_on2 }
+ entry = gear, "Gear", int, "%d", { gear_method }
+ entry = vss1dot, "VSS1dot", float, "%.1f", {vss_opt0_1}
+ entry = vss2dot, "VSS2dot", float, "%.1f", {vss_opt0_2}
+ entry = accelx, "Accel X", float, "%.2f", { accXport }
+ entry = accely, "Accel Y", float, "%.2f", { accYport }
+ entry = accelz, "Accel Z", float, "%.2f", { accZport }
+ entry = duty_pwm_a, "PWM A duty", int, "%d", { pwm_opt_on_a }
+ entry = duty_pwm_b, "PWM B duty", int, "%d", { pwm_opt_on_b }
+ entry = duty_pwm_c, "PWM C duty", int, "%d", { pwm_opt_on_c }
+ entry = duty_pwm_d, "PWM D duty", int, "%d", { pwm_opt_on_d }
+ entry = duty_pwm_e, "PWM E duty", int, "%d", { pwm_opt_on_e }
+ entry = duty_pwm_f, "PWM F duty", int, "%d", { pwm_opt_on_f }
+ entry = generic_pid_duty_a, "Generic Closed-Loop A duty", float, "%.1f", { generic_pid_flags_a_on }
+ entry = generic_pid_duty_b, "Generic Closed-Loop B duty", float, "%.1f", { generic_pid_flags_b_on }
+ entry = status1, "Status1", int, "%d"
+ entry = status2, "Status2", int, "%d"
+ entry = status3, "Status3", int, "%d"
+ entry = status4, "Status4", int, "%d"
+ entry = status5, "Status5", int, "%d"
+ entry = status5s, "Status5s", int, "%d"
+ entry = status6, "Status6", int, "%d"
+ entry = status7, "Status7", int, "%d"
+ entry = status8, "Status8", int, "%d"
+ entry = vvt_ang1, "VVT angle 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_ang2, "VVT angle 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_ang3, "VVT angle 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_ang4, "VVT angle 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target1, "VVT target 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_target2, "VVT target 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_target3, "VVT target 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target4, "VVT target 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_duty1, "VVT duty 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_duty2, "VVT duty 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_duty3, "VVT duty 3", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = vvt_duty4, "VVT duty 4", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = tps_accel, "TPS accel", int, "%.1f", { AE_options & 0x1 }
+ entry = map_accel, "MAP accel", int, "%.1f", { AE_options & 0x1 }
+ entry = total_accel, "Total accel", int, "%.1f", { AE_options & 0x1 }
+ entry = launch_timer, "Launch retard timer", float, "%.3f", { launch_opt_on && launch_opt_retard }
+ entry = launch_retard, "Launch timed retard", float, "%.1f", { launch_opt_on && launch_opt_retard }
+
+ entry = knock_cyl01, "Knock cyl# 1", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 0)}
+ entry = knock_cyl02, "Knock cyl# 2", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 1)}
+ entry = knock_cyl03, "Knock cyl# 3", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 2)}
+ entry = knock_cyl04, "Knock cyl# 4", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 3)}
+ entry = knock_cyl05, "Knock cyl# 5", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 4)}
+ entry = knock_cyl06, "Knock cyl# 6", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 5)}
+ entry = knock_cyl07, "Knock cyl# 7", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 6)}
+ entry = knock_cyl08, "Knock cyl# 8", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 7)}
+#if CYL_12_16_SUPPORT
+ entry = knock_cyl09, "Knock cyl#09", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 8)}
+ entry = knock_cyl10, "Knock cyl#10", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 9)}
+ entry = knock_cyl11, "Knock cyl#11", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 10)}
+ entry = knock_cyl12, "Knock cyl#12", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 11)}
+ entry = knock_cyl13, "Knock cyl#13", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 12)}
+ entry = knock_cyl14, "Knock cyl#14", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 13)}
+ entry = knock_cyl15, "Knock cyl#15", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 14)}
+ entry = knock_cyl16, "Knock cyl#16", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 15)}
+#endif
+
+ entry = porta, "porta", int, "%d"
+ entry = portb, "portb", int, "%d"
+ entry = porteh, "porteh", int, "%d"
+ entry = portk, "portk", int, "%d"
+ entry = portmj, "portmj", int, "%d"
+ entry = portp, "portp", int, "%d"
+ entry = portt, "portt", int, "%d"
+
+ entry = cel_status, "CEL status", int, "%d"
+ entry = cel_status2, "CEL status2", int, "%d"
+ entry = cel_errorcode, "CEL error code", int, "%d"
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+ entry = fuel_temp1, "Fuel Temp1", float, "%.1f", { (flexFuel && (fueltemp1 == 1)) || (fueltemp1 > 15)}
+ entry = fuel_temp2, "Fuel Temp2", float, "%.1f", { dualfuel_temp_sens }
+
+ entry = fuel_press1, "Fuel Pressure1_kPa", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_psi, "Fuel Pressure1_psi", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_bar, "Fuel Pressure1_bar", float, "%.1f", { fp_press_in }
+
+ entry = fuel_press2, "Fuel Pressure2_kPa", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_psi, "Fuel Pressure2_psi", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_bar, "Fuel Pressure2_bar", float, "%.1f", { dualfuel_press_sens }
+
+ entry = fp_duty, "Fuel pump control duty", int, "%d", { fp_opt_mode }
+
+ entry = alt_targv, "Alternator target voltage", float, "%.1f", {alternator_opt_mode > 1}
+ entry = alt_freq, "Alternator control frequency", int, "%d", {alternator_opt_mode == 2}
+ entry = alt_duty, "Alternator control duty", int, "%d", {alternator_opt_mode > 2}
+ entry = load_duty, "Alternator load", int, "%d", {alternator_opt_mode && alternator_freq_monin}
+ entry = batt_curr, "Battery current", float, "%.1f", {alternator_opt_mode && alternator_freq_currin}
+ entry = fueltemp_cor, "Fuel temperature cor", float, "%.1f"
+ entry = fuelpress_cor, "Fuel pressure cor", float, "%.1f"
+ entry = ltt_cor, "Long term fuel trim cor", float, "%.1f", {ltt_opt_on}
+ entry = gps_latdeg, "GPS Lat. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latmin, "GPS Lat. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latsec, "GPS Lat. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_londeg, "GPS Lon. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonmin, "GPS Lon. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonsec, "GPS Lon. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_lonEW, "GPS Lon. E/W", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_alt, "GPS Altitude", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed, "GPS Speed", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed_ms_1, "GPS Speed ms-1",float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_course, "GPS Course (deg)", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_latitude, "GPS Latitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = gps_longitude, "GPS Longitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = tc_slipxtime, "TC slip * time", int, "%d"
+ entry = loop, "Loop", int, "%d"
+
+#if INTERNAL_LOG_FIELDS
+ ;internalLogField = fieldName, class, type, offset, units, scale, translate, digits
+ internalLogField = "Tooth number", scalar, U08, 1024, "#", 1.0, 0.0, 0
+ internalLogField = "Synch", scalar, U08, 1025, "", 1, 0, 0
+ internalLogField = "Cumulative cycles", scalar, U16, 1026, "#", 1.0, 0.0, 0
+ internalLogField = "Cumulative teeth", scalar, U16, 1027, "#", 1.0, 0.0, 0
+ internalLogField = "coilsel", scalar, U16, 1028, "", 1, 0, 0
+ internalLogField = "dwellsel", scalar, U16, 1029, "", 1, 0, 0
+ internalLogField = "PTM", scalar, U08, 1030, "", 1, 0, 0
+ internalLogField = "PTJ", scalar, U08, 1031, "", 1, 0, 0
+ internalLogField = "PTT", scalar, U08, 1032, "", 1, 0, 0
+ internalLogField = "PORTA", scalar, U08, 1033, "", 1, 0, 0
+ internalLogField = "PORTB", scalar, U08, 1034, "", 1, 0, 0
+ internalLogField = "next_dwell.tooth", scalar, U08, 1035, "", 1, 0, 0
+ internalLogField = "next_spark.tooth", scalar, U08, 1036, "", 1, 0, 0
+ internalLogField = "next_inj0.tooth", scalar, U08, 1037, "", 1, 0, 0
+ internalLogField = "next_inj1.tooth", scalar, U08, 1038, "", 1, 0, 0
+ internalLogField = "next_inj2.tooth", scalar, U08, 1039, "", 1, 0, 0
+ internalLogField = "next_inj3.tooth", scalar, U08, 1040, "", 1, 0, 0
+ internalLogField = "next_inj4.tooth", scalar, U08, 1041, "", 1, 0, 0
+ internalLogField = "next_inj5.tooth", scalar, U08, 1042, "", 1, 0, 0
+ internalLogField = "next_inj6.tooth", scalar, U08, 1043, "", 1, 0, 0
+ internalLogField = "next_inj7.tooth", scalar, U08, 1044, "", 1, 0, 0
+; internalLogField = "fuel_ovflo", scalar, U08, 1046, "", 1, 0, 0
+ internalLogField = "wheeldec_ovflo", scalar, U08, 1047, "", 1, 0, 0
+ internalLogField = "next_dwell.time32", scalar, U32, 1048, "", 1, 0, 0
+ internalLogField = "next_spark.time32", scalar, U32, 1049, "", 1, 0, 0
+ internalLogField = "TIE", scalar, U08, 1050, "", 1, 0, 0
+ internalLogField = "TFLG1", scalar, U08, 1051, "", 1, 0, 0
+ internalLogField = "TIMTIE", scalar, U08, 1052, "", 1, 0, 0
+ internalLogField = "TIMTFLG1", scalar, U08, 1053, "", 1, 0, 0
+ internalLogField = "next_inj[0].time", scalar, U16, 1054, "", 1, 0, 0
+ internalLogField = "next_inj[1].time", scalar, U16, 1055, "", 1, 0, 0
+ internalLogField = "next_inj[2].time", scalar, U16, 1056, "", 1, 0, 0
+ internalLogField = "next_inj[3].time", scalar, U16, 1057, "", 1, 0, 0
+ internalLogField = "next_inj[4].time", scalar, U16, 1058, "", 1, 0, 0
+ internalLogField = "next_inj[5].time", scalar, U16, 1059, "", 1, 0, 0
+ internalLogField = "next_inj[6].time", scalar, U16, 1060, "", 1, 0, 0
+ internalLogField = "next_inj[7].time", scalar, U16, 1061, "", 1, 0, 0
+ internalLogField = "XGSEM", scalar, U08, 1062, "", 1, 0, 0
+ internalLogField = "pwcalc1", scalar, U16, 1063, "", 1, 0, 0
+ internalLogField = "pwcalc2", scalar, U16, 1064, "", 1, 0, 0
+ internalLogField = "next_map_start_event.tooth", scalar, U08, 1065, "", 1, 0, 0
+ internalLogField = "XGCHID", scalar, U08, 1066, "", 1, 0, 0
+ internalLogField = "XGSWT", scalar, U08, 1067, "", 1, 0, 0
+ internalLogField = "xgate_deadman", scalar, U08, 1068, "", 1, 0, 0
+ internalLogField = "XGMCTL", scalar, U08, 1069, "", 1, 0, 0
+ internalLogField = "xgpc", scalar, U16, 1070, "", 1, 0, 0
+ internalLogField = "xgswe_count", scalar, U08, 1071, "", 1, 0, 0
+ internalLogField = "next_fuel", scalar, U08, 1072, "", 1, 0, 0
+ internalLogField = "inj1_cnt", scalar, U16, 1073, "", 1, 0, 0
+ internalLogField = "inj2_cnt", scalar, U16, 1074, "", 1, 0, 0
+ internalLogField = "inj3_cnt", scalar, U16, 1075, "", 1, 0, 0
+ internalLogField = "inj4_cnt", scalar, U16, 1076, "", 1, 0, 0
+ internalLogField = "inj5_cnt", scalar, U16, 1077, "", 1, 0, 0
+ internalLogField = "inj6_cnt", scalar, U16, 1078, "", 1, 0, 0
+ internalLogField = "inj7_cnt", scalar, U16, 1079, "", 1, 0, 0
+ internalLogField = "inj8_cnt", scalar, U16, 1080, "", 1, 0, 0
+#endif
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms3/0523.15P.ini b/src/ini/ms3/0523.15P.ini
new file mode 100644
index 0000000..c4e1381
--- /dev/null
+++ b/src/ini/ms3/0523.15P.ini
@@ -0,0 +1,13999 @@
+;-------------------------------------------------------------------------------
+; $Id: core.ini,v 1.365.4.39 2015/07/09 18:13:15 jsmcortina Exp $
+;
+; This ini file is Copyright 2007,2008,2009,2010,2011,2012,2013,2014,2015 James Murray and Kenneth Culver.
+; It is only to be used with a licensed MS3 product.
+;
+; Original author(s) uncertain. Contains work of Eric Fahlgren
+; Re-written to support MS3
+;
+;
+; configuration defines, either #set or #unset
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
+#set CAN_COMMANDS
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset INTERNAL_LOG_FIELDS
+#unset PW_4X
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ signature = "MS3 Format 0523.15P" ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+#if INI_VERSION_2
+; ok
+#else
+ #error Megatune cannot be used with MS3 - please upgrade to TunerStudio
+#endif
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v"
+#if CAN_COMMANDS
+ tableBlockingFactor = 256 ; just in case MS2 is used
+#else
+ tableBlockingFactor = 2048
+#endif
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+; solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") } ; file is not valid, use new method instead
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor - Volts"
+ settingOption = LAMBDA, "Wideband - Lambda"
+ settingOption = DEFAULT, "WideBand - AFR" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ wue_lpg = bits, U08, [0:0], "No", "Yes"
+ vehigh = scalar, U16, "%", 1, 0, 100, 600, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ sensor01Alias = string, ASCII, 20
+ sensor02Alias = string, ASCII, 20
+ sensor03Alias = string, ASCII, 20
+ sensor04Alias = string, ASCII, 20
+ sensor05Alias = string, ASCII, 20
+ sensor06Alias = string, ASCII, 20
+ sensor07Alias = string, ASCII, 20
+ sensor08Alias = string, ASCII, 20
+ sensor09Alias = string, ASCII, 20
+ sensor10Alias = string, ASCII, 20
+ sensor11Alias = string, ASCII, 20
+ sensor12Alias = string, ASCII, 20
+ sensor13Alias = string, ASCII, 20
+ sensor14Alias = string, ASCII, 20
+ sensor15Alias = string, ASCII, 20
+ sensor16Alias = string, ASCII, 20
+
+ scatterRuntimeEnabled = bits, U08, [0:0], "Disabled", "Enabled"
+
+ portLabels = bits, U08, [0:8], "unused", "injection LED", "warmup LED", "squirt LED", "fuel pump", "PWM or on/off idle", "stepper idle", "primary injectors", "secondary injectors", "a programmable on/off output", "spark outputs", "HEI bypass", "knock", "MAF", "MAP", "baro", "EGO", "tacho out", "A/C idleup out", "A/C idleup in", "fan out", "boost out", "N2O stage 1 nitrous", "N2O stage 1 fuel", "N2O stage 2 nitrous", "N2O stage 2 fuel", "N2O in", "launch in", "variable launch in", "3 step in", "datalog button", "datalog LED", "bike shift in", "bike shift out", "generic PWM A", "generic PWM B", "generic PWM C", "generic PWM D", "generic PWM E", "generic PWM F", "datalog stream", "dual fuel in", "fuel tableswitch", "spark tableswitch", "boost tableswitch", "overboost tableswitch", "ReqFuel switch", "AFR tableswitch", "stoich switch", "max AFR safety switch", "accelerometer X", "accelerometer Y", "accelerometer Z", "vss out", "water inj pump", "water inj valve", "water inj in", "ignition trigger LED", "flex fuel in", "cam input", "vss1 in", "vss2 in", "speed sensor 1 in", "speed sensor 2 in", "gear position in", "anti-lag in", "anti-lag out", "anti-lag PWM out", "Boost 2 out", "EGT 1 in", "EGT 2 in", "EGT 3 in", "EGT 4 in", "EGT 5 in", "EGT 6 in", "EGT 7 in", "EGT 8 in", "EGT 9 in", "EGT 10 in", "EGT 11 in", "EGT 12 in", "EGT 13 in", "EGT 14 in", "EGT 15 in", "EGT 16 in", "Generic Sensor 1 in", "Generic Sensor 2 in", "Generic Sensor 3 in", "Generic Sensor 4 in", "Generic Sensor 5 in", "Generic Sensor 6 in", "Generic Sensor 7 in", "Generic Sensor 8 in", "Generic Sensor 9 in", "Generic Sensor 10 in", "Generic Sensor 11 in", "Generic Sensor 12 in", "Generic Sensor 13 in", "Generic Sensor 14 in", "Generic Sensor 15 in", "Generic Sensor 16 in", "VVT 1 output", "VVT 2 output", "VVT 3 output", "VVT 4 output", "VVT cam 2/3/4 input", "Real Time Clock", "Torque Convertor Lockup", "Traction control", "Rotary trailing dwell timer", "Internal SPI2", "2nd MAP", "Long Term Trim button", "dual-fuel injectors", "launch timed in", "launch timed out", "throttle stop", "check engine light", "vss3 in", "vss4 in", "Staged inj switch output 1", "Alternator control output", "Alternator load monitor input", "Alternator current monitor input", "Alternator lamp output", "Staged inj switch output 1", "Shift light output", "Oil pressure warning output", "TCS input", "MAP2", "Generic Closed-Loop Out 1", "Generic Closed-Loop Out 2", "Line-lock staging input", "Line-lock staging output", "SDcard trigger output", "Pit limiter input", "TC LED out", "Dome fill out", "Dome empty out"
+ prefSpeedUnits = bits, U08, [0:0], "MPH", "KPH"
+ prefLengthUnits = bits, U08, [0:0], "m", "in"
+
+[LoggerDefinition]
+ ; valid logger types: composite, tooth, trigger, csv
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mafAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+ calcField = mapValue, "MAF Freq", "Hz", { (MAFOption_t == 0 || (!(mafAdc > 0))) ? 0 : (maf_freq1 > 62.5) ? (1000000 / (32 * mafAdc)) : (1000000 / (128 * mafAdc)) }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+[TurboBaud]
+ turboBaudOnCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x51"
+ turboBaudOffCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x50"
+
+ ; turboBaudSpeed defines the speed for
+ ; TS to set the PC baud to when turboBaud is activated
+ turboBaudSpeed = { baudhigh } ; reference the Constant so they will always be in sync with one setting.
+ sdTurboActive = { 1 } ; this can reference a Constant or PcVariable in order to make it user selectable.
+ runtimeTurboActive = { 0 }
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+; updated settings from "new" serial
+ pageActivationDelay = 1
+ blockReadTimeout = 500
+ tsWriteBlocks = on
+; writeBlocks = on
+ interWriteDelay = 0
+
+;Relationship between TS pages and MS3 pages
+;TS MS3 internal
+;MS3 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS3 internal pages 6,7 are outpc,txbuf
+;3 8
+;4 9
+;5 10
+;6 11
+;7 12
+;8 13
+;9 18
+;10 19
+;11 21
+;12 22
+;13 23
+;14 24
+;15 25
+;16 26 ; RAM only page
+;17 27
+;18 28
+
+ endianness = big
+ nPages = 19
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0a", "\$tsCanId\x0b", "\$tsCanId\x0c", "\$tsCanId\x0d", "\$tsCanId\x12", "\$tsCanId\x13", "\$tsCanId\x15", "\$tsCanId\x16", "\$tsCanId\x17", "\$tsCanId\x18", "\$tsCanId\x19", "\$tsCanId\x1a", "\$tsCanId\x1b", "\$tsCanId\x1c", "\$tsCanId\x1d"
+ burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "", "b%2i", "b%2i", "b%2i"
+ pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c"
+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ crc32CheckCommand = "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04"
+
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0 ; TS could use the 'F' command to determine this automatically.
+
+ ;TS could use the 'f' command to determine this automatically. Will change if using CAN passthrough
+#if CAN_COMMANDS
+ blockingFactor = 256 ; just in case MS2 is used
+#else
+ blockingFactor = 2048
+#endif
+
+ validateArrayBounds = true
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 10.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; ICIgnOption
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+
+ max_coil_dur = scalar, U08, 3, "ms", 0.1000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 4, "ms", 0.1000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+; dwellAcc = scalar, U08, 5, "ms", 0.1000, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte)
+ crankingRPM = scalar, S16, 6, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ triggerOffset = scalar, S16, 8, "deg", 0.10000, 0.00000, -90.0, 380.00, 1 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 10, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+; RevLimRpm2 = scalar, S16, 12, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+
+ map0 = scalar, S16, 14, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 16, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 18, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 22, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 18, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 22, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 24, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 26, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 28, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 30, "V", 0.10000, 0.00000, -10, 10, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 32, "V", 0.10000, 0.00000, 10, 100, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 34, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 36, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 38, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 40, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 42, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 44, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ iacfullopen = scalar, U16, 46, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+ reluctorteeth1 = scalar, U16, 48, "", 0.01, 0,0,255,2 ; this is VSS1
+ crankTolerance = scalar, U08, 50, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 51, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 52, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+; IdleCtl = bits , U08, 53, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ IdleCtl = bits , U08, 53, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 53, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_vss = bits , U08, 53, [4:4], "Standard", "Use VSS"
+ IdleCtl_home = bits , U08, 53, [5:5], "Closed", "Open"
+ IACtstep = scalar, U08, 54, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IAC_tinitial_step=scalar, U08, 55, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 56, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 57, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 58, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 60, "°C", 0.05555, 0.00000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ IdleHyst = scalar, S16, 60, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ IACcrankpos = scalar, S16, 62, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcrankxt = scalar, S16, 64, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 66, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+;gap
+ reluctorteeth2 = scalar, U16, 68, "", 0.01, 0,0,255,2 ; this is VSS2
+ boosttol = scalar, S16, 70, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ OverBoostKpa2 = scalar, S16, 72, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fc_rpm_lower = scalar, U16, 74, "rpm", 1.00000, 0.0, 0.0, {rpmhigh}, 0 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 76, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 76, [2:2], "Off", "On"
+ hardware_spk = bits, U08, 77, [0:2], "INVALID", "INVALID", "Spark", "INVALID", "Tacho Out", "INVALID", "INVALID", "INVALID"
+ hardware_fuel = bits, U08, 77, [4:4], "Inj I/J", "Inj A,B.."
+ hardware_cam = bits, U08, 77, [6:7], "Digital Frequency In 2", "CMP", "MAP sensor", "INVALID"
+ OverBoostKpa = scalar, S16, 78, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 80, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+ N2Olaunchmaxmap = scalar, S16, 82, "kPa", 0.1, 0, 100, {loadhigh}, 1
+ tpsThresh = scalar, S16, 84, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 86, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 88, "%ReqFuel", 1, 0.00000, 0, 255, 0 ; * ( 1 byte) ; Tpsacold
+ taeColdM = scalar, U08, 89, "%", 1.00000, 0.00000, 100, 255.00, 0 ; * ( 1 byte) ; AccMult
+ taeTime = scalar, U08, 90, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync
+ tpsasync_events = scalar, U08, 90, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync
+ tdePct = scalar, U08, 91, "", 1.00000, 0.00000, 50.00, 100.00, 0 ; * ( 1 byte) ; TPSDQ
+ floodClear = scalar, S16, 92, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes) ; TPSWOT
+ TPSOXLimit = scalar, S16, 94, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes) ; TPSOXLimit
+ tpsProportion = scalar, U08, 96, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) ; Tps_acc_wght
+ baroCorr = bits , U08, 97, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"; BaroOption
+ egoType = bits , U08, 98, [0:1], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
+ egoCount = scalar, U08, 99, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 100, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 101, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ EGOVtarget = scalar, U08, 102, "Volts", 0.00489, 0.00000, 0.00, 1, 3
+ tempUnits = bits , U08, 103, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ egonum = scalar, U08, 104, "", 1, 0, 0, 16, 0
+ rtc_trim = scalar, S08, 105, "ppm", 1, 0, -127, +127, 0
+#if CELSIUS
+ fastIdleT = scalar, S16, 106, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 108, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fastIdleT = scalar, S16, 106, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ egoTemp = scalar, S16, 108, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ egoRPM = scalar, U16, 110, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+#if PW_4X
+ reqFuel = scalar, U16, 112, "ms", 0.004, 0.00000, 0.00, 262.143, 2 ; * ( 2 bytes)
+#else
+ reqFuel = scalar, U16, 112, "ms", 0.001, 0.00000, 0.00, 65.535, 2 ; * ( 2 bytes)
+#endif
+ divider = scalar, U08, 114, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 115, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 115, [1:1], "Every event", "Alternate events"
+ alternate_blend = bits, U08, 115, [2:2], "Off", "Blend Curve (7)"
+ injPwmT = scalar, U08, 116, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 117, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 118, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 119, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary" ; *
+; injType = bits, U08, 120, [0:0], "Port Injection", "Throttle Body" ; * not used by code
+ nInjectors = bits, U08, 121, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ OddFireang = scalar, U16, 122, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 124, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 125, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 126, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 127, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 128, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ knk_pin_out = bits, U08, 129, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ mafLF = scalar, U08, 130, "", 1.00000, 0.00000, 10.00, 100.00, 0
+;gap
+ algorithm = bits, U08, 132, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ algorithm2 = bits, U08, 132, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm = bits, U08, 133, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm2 = bits, U08, 133, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ AfrAlgorithm = scalar, U08, 134, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 135, "ms", 0.10000, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 136, "deg", 0.1, 0, 5, 180,1
+ RevLimOption_retard = bits,U08, 138, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 138, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 138, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 138, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 138, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 139, "deg", 0.10000, 0.00000,0, 25.5, 0 ; * ( 1 byte)
+ ego_startdelay = scalar, U08, 140, "s", 1, 0, 0, 120, 0
+ can_poll2_ego = bits, U08, 141, [0:0], "Disable", "Enable" ; old setting
+ can_poll2_ego2 = bits, U08, 141, [0:0], "Disable", "Innovate format"
+ can_poll2_gps = bits, U08, 141, [1:2], "Off", "JBperf GPS", "INVALID", "INVALID"
+ can_poll2_vss = bits, U08, 141, [3:3], "Listen", "Poll"
+ can_poll2_egolag= bits, U08, 141, [4:4], "Off", "On"
+ opt142_rtc = bits, U08, 142, [0:1], "Off", "On-board", "CAN", "INVALID"
+ opt142_gs_share = bits, U08, 142, [2:2], "Off", "On"
+ injPwmT2 = scalar, U08, 143, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 144, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 145, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ can_ego_id = scalar, U08, 146, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_ego_table = scalar, U08, 147, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_ego_offset = scalar, U16, 148, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ baro_upper = scalar, S16, 150, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_lower = scalar, S16, 152, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_default = scalar, S16, 154, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 156, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ launchcutzone = scalar, S16, 158, "RPM", 1.00000, 0.00000, 0.00, 1000, 0
+ RevLimNormal2 = scalar, S16, 160, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ hw_latency = scalar, U08, 162, "usec", 1.0, 0.00000, 0.00, 255.00, 0
+;next three are loadopts in the firmware
+ loadCombine = bits, U08, 163, [0:1], "additive", "multiplicitive", "Blend Curve (1)", "INVALID"
+ loadMult = bits, U08, 163, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 163, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadCombineign = bits, U08, 163, [4:4], "additive", "Blend Curve (2)"
+ loadMult2 = bits, U08, 163, [5:5], "don't multiply", "multiply"
+ loadopts_oldbaro= bits, U08, 163, [6:6], "Off", "On"
+ baud = scalar, U32, 164, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 168, "%", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ can_poll_id_rtc = scalar, U08, 170, "", 1.00000, 0.00000, 0.00, 14, 0
+ mycan_id = scalar, U08, 171, "", 1.00000, 0.00000, 0.00, 14, 0
+ mapsample_percent = scalar, U08, 172, "%", 1.00000, 0.00000, 0.00, 50, 0
+ can_poll_id_ports = scalar, U08, 173, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id = scalar, U08, 174, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ aeTaperTime = scalar, U08, 175, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync2
+ tpsasync2_events= scalar, U08, 175, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync2
+ aeEndPW = scalar, S16, 176, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 ; * tpsaccel2 ; TpsAccel2
+ egoAlgorithm = bits , U08, 178, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
+ egoAlgorithm_auth=bits , U08, 178, [2:2], "Off", "On"
+ egoAlgorithm_delay_table=bits, U08, 178, [3:3], "Use IGN events", "Use delay table"
+ egoKP = scalar, U08, 179, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 180, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 181, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+
+ ac_idleup_vss_offpoint = scalar, U16, 182, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ ac_idleup_vss_hyst = scalar, U16, 184, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 186, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 186, [1:2], "INVALID", "INVALID", "Digital Switched In 1", "INVALID"; (1 byte )
+ fuelFreq = array , U08, 187, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 187, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 188, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 189, [ 2], "%", 1.00000, 0.00000, 50, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 189, "%", 1.00000, 0.00000, 50, 255, 0
+ fuelCorr1 = scalar, U08, 190, "%", 1.00000, 0.00000, 50, 255, 0
+
+ dwellmode = bits , U08, 191, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ pwmidle_shift_lower_rpm = scalar, U16, 192, "rpm", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ ac_idleup_tps_offpoint = scalar, S16, 194, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ ac_idleup_tps_hyst = scalar, S16, 196, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_tps_offpoint = scalar, S16, 198, "%", 0.10000, 0.00000, 0.00, 150.00, 1
+ fan_idleup_tps_hyst = scalar, S16, 200, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_vss_offpoint = scalar, U16, 202, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200.00, 0
+
+ knk_option = bits , U08, 204, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knk_option_an = bits , U08, 204, [2:3], "On/Off", "Analogue", "INVALID", "Internal"
+ knkDirection = bits , U08, 204, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 204, [5:6], "INVALID", "None", "Pull up", "INVALID" ; *
+ knk_option_wind = bits , U08, 204, [7:7], "At end", "Peak"
+ knk_maxrtd = scalar, U08, 205, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 206, "deg", 0.1, 0.0, 1.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 207, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 208, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 209, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 210, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 211, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 212, [0:2], "Off", "EAE", "INVALID", "X-tau", "X-tau with CLT correction", "INVALID", "INVALID", "INVALID" ; * ( 1 byte )
+ knkport = bits, U08, 213, [0:3], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Analog In 3", "Analog In 1", "Analog In 2","INVALID","INVALID"
+ knk_maxmap = scalar, S16, 214, "kPa", 0.1, 0.0, 0.0, {loadhigh}, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 216, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 218, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ triggerTeeth = scalar, U16, 220, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 222, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ pwmidle_shift_open_time = scalar, U08, 223, "s", 1.0, 0.0, 0.0, 20, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 224, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+ ICISR_tmask = scalar, U08, 226, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 227, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ ae_lorpm = scalar, U16, 228, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 230, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ fuelSpkDel = array , S16, 232, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 232, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 234, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ spk_conf2_gmtfi = bits , U08, 236, [0:2], "Off", "GM Bypass on SpkB", "Buick C3I", "TFI Non-signature", "TFI Signature PIP", "INVALID", "INVALID", "INVALID"
+ spk_conf2_oddodd= bits , U08, 236, [3:4], "Alternate", "INVALID", "Paired", "Custom"
+ spk_conf2_dwell = bits , U08, 236, [5:5], "Off", "On"
+ spk_conf2_dwelltbl = bits, U08, 236, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 236, [7:7], "Off", "Toyota DLI"
+;spk_config
+ spk_config_campol =bits, U08, 237, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 237, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 237, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 237, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam =bits, U08, 237, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used, extra CASes hidden.
+; incomplete modes are hidden for the moment
+ spk_mode0 = bits , U08, 238, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-05", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "Fiat 1.8 16V", "Fuel Only", "Optispark", "Nissan SR20", "Nissan RB25", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "Honda Acura", "VQ35DE","Jeep 2000", "Jeep 2002", "Zetec VCT", "Flywheel tri-tach", "2JZ VVTi", "Honda TSX/D17", "INVALID", "Viper V10","Viper V10 Gen1", "Honda K24A2", "HD32-2", "Miata 36-2","Daihatsu 12+1", "Subaru 36-2-2-2 VVT", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3_trim = bits, U08, 239, [0:0], "Off", "On"
+ spk_mode3_tach3 = bits, U08, 239, [1:1], "CMP", "Digital Frequency Input 2"
+ spk_mode3_hirespol= bits, U08, 239, [2:2], "Normal", "Inverted"
+ spk_mode3_kick = bits , U08, 239, [3:3], "Off", "On"
+ spk_mode3 = bits, U08, 239, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID" ; (1 byte )
+ rtbaroport = bits, U08, 240, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ego2port = bits, U08, 241, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport = bits, U08, 242, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport_t = bits, U08, 242, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+;NB these mapport are in next byte
+ mapport_f = bits, U08, 243, [6:7], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ knkport_an = bits, U08, 243, [0:2], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID",
+ OvrRunC = bits , U08, 244, [0:0], "Off", "On"
+ OvrRunC_progcut= bits , U08, 244, [1:1], "Off", "On"
+ OvrRunC_progret= bits , U08, 244, [2:2], "Off", "On"
+ OvrRunC_progign= bits , U08, 244, [3:3], "Off", "On"
+ OvrRunC_retign = bits , U08, 244, [4:4], "Off", "On"
+ poll_level_tooth = scalar, U08, 245, "", 1, 0, 0, 255, 0
+; feature4_0ftrig = bits, U08, 246, [0:0], "Simple", "Advanced"
+ feature4_0igntrig= bits, U08, 246, [1:1], "Off", "Ignition trigger indicator"
+
+ feature4_0maxdwl = bits, U08, 246, [3:3], "Off", "On"
+ feature4_0ftrig = bits, U08, 246, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ feature4_0mindwl = bits, U08, 246, [6:6], "Off", "On"
+
+ timing_flags = bits, U08, 247, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 247, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 248, "ms", 0.1000,0.00000,1.00,8.00,1
+ tsw_pin_f = bits, U08, 249, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve (3)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ crank_timing = scalar, S16, 250, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 252, "degrees", 0.10000,0.00000,-90.00,90.00,1;
+ tsf_rpm = scalar, U16, 254, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 256, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 258, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 260, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 262, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 264, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+; feature5_0 266
+ f5_0_tsf = bits , U08, 266, [0:0], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 266, [1:3], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+ f5_0_tss = bits , U08, 266, [4:4], "Off", "On"
+ f5_0_tss_opt = bits , U08, 266, [5:7], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+
+ tsw_pin_s = bits, U08, 267, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve (4)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pwmidlecranktaper= scalar, U08, 268, "s", 1.00000, 0.00000, 0.00, 100.00, 0
+ knk_step_adv = scalar, U08, 269, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ fc_rpm = scalar, U16, 270, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 272, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 274, "%", 0.10000, 0.00000, 0.00, 10.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 276, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fc_clt = scalar, S16, 276, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 278, "s", 0.1, 0, 0, 5.0, 1
+
+ tacho_opt3f = bits, U08, 279, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fc_ego_delay = scalar, U08, 280, "s", 1, 0, 0.00, 10, 0
+
+ tacho_opt80 = bits, U08, 281, [7:7], "Off", "On" ; tacho_opt2
+ tacho_optvar = bits, U08, 281, [6:6], "Fixed", "Variable"
+ tacho_opt40 = bits, U08, 281, [5:5], "Normal", "Half speed"
+ tacho_scale = scalar, U16, 282, "%", 0.1, 0, 10, 1000, 1
+;gap 284, 285
+ feature3_tps = bits, U08, 286, [0:0], "Off", "On"
+ feature3_aseunit= bits, U08, 286, [1:1], "Cycles", "0.1 seconds"
+ feature3_maplog = bits, U08, 286, [2:2], "Off", "On"
+ feature3_3 = bits, U08, 286, [3:3], "Off", "On"
+ feature3_pw4x = bits, U08, 286, [4:4], "Normal", "4x"
+ feature3_n2oin = bits, U08, 286, [5:5], "On", "Off"
+ feature3_matase = bits, U08, 286, [6:6], "Off", "On"
+ feature3_dwell = bits, U08, 286, [7:7], "Off", "On"
+ launch_opt_vss = bits, U08, 287, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ launch_opt_vssgear = bits, U08, 287, [2:2], "Off", "On"
+ launch_opt_retard = bits, U08, 287, [3:3], "Off", "On"
+ launch_opt_bank = bits, U08, 287, [4:5], "Off","Bank1", "Bank2", "Both"
+ launch_opt_on = bits, U08, 287, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_sft_zone = scalar, S16, 288, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 290, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, S16, 292, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 294, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 296, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+ launchlimopt_adv= bits , U08, 296, [2:2], "Basic", "Advanced"
+ launchlimopt_cut= bits , U08, 296, [3:4], "Random Progressive", "Random Ramped", "Fixed 5/7", "Fixed 4/5"
+ launchvsstime = scalar, U08, 297, "s", 1, 0, 0, 255, 0
+ launchvss_maxgear= scalar, U08, 298, "", 1, 0, 1, 6, 0
+ launch_opt_pins = bits, U08, 299, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ flats_arm = scalar, U16, 300, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ launchvss_minvss = scalar, U16, 302, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 1, 200, 1
+ flats_deg = scalar, S16, 304, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 306, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 308, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 310, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 312, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 312, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 312, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 312, [7:7], "OR", "AND"
+ staged_pw1_0 = bits, U08, 312, [7:7], "Off", "On"
+ staged_transition_events = scalar, U08, 313, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, S16, 314, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, S16, 316, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, S16, 318, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, S16, 320, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 322,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 322,[2:2], "Off", "On" ; enables stage 1
+ N2Oopt_3 = bits, U08, 322,[3:3], "Off", "On" ; enables stage 2
+ N2Oopt_4 = bits, U08, 322,[4:4], "Off", "On" ; use AFR2
+ N2Oopt_5 = bits, U08, 322,[5:5], "Off", "On" ; nitrous + launch
+ N2Oopt2_prog_time= bits, U08, 322,[6:7], "RPM-based", "Time-based", "VSS-based", "INVALID"
+;input and output pins moved
+ N2Oopt2_prog = bits, U08, 323,[0:0], "On/Off", "Progressive"
+;
+ N2Oopt2_prog_freq= bits, U08, 323,[2:4], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2Oopt2_prog_freqf= bits, U08, 323,[5:7], "Same", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2ORpm = scalar, U16, 324, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 326, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 328, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+#if CELSIUS
+ N2OClt = scalar, S16, 330, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ N2OClt = scalar, S16, 330, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 332, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2OPWLo = scalar, S16, 334, "ms", 0.004, 0, -128, +128, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2OPWLo = scalar, S16, 334, "ms", 0.001, 0, -32, +32, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.001, 0, -32, +32, 3
+#endif
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 338, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 339, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 340, "s", 0.01, 0, 0, 2.55, 2
+;nitrous stage 2
+; Nitrous System
+ N2O2delay = scalar, U08, 341, "s", 0.01, 0, 0, 2.55,2
+ N2O2Rpm = scalar, U16, 342, "RPM", 1, 0, 1000, 25000, 0
+ N2O2RpmMax = scalar, U16, 344, "RPM", 1, 0, 1000, 25000, 0
+ N2O2Angle = scalar, S16, 346, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2O2PWLo = scalar, S16, 348, "ms", 0.004, 0, -128, +128, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2O2PWLo = scalar, S16, 348, "ms", 0.001, 0, -32, +32, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.001, 0, -32, +32, 3
+#endif
+ RotarySplitModeFD = bits, U08, 352, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 352, [1:1], "Not Allowed", "Allowed"
+ dlyct = scalar, U08, 353, "", 1,0,0,255,0
+ dwelltime_trl = scalar, U08, 354, "ms", 0.10000, 0, 0.1, 25.5, 1
+ N2Oopt_pins = bits, U08, 355, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ RevLimRtdAng = scalar, S16, 356, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ vss4_can_offset = scalar, U16, 358, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ RevLimNormal2_hyst= scalar,U16, 360, "RPM", 1.00000, 0.00000, 100, 1000, 0
+ pwmidleset_inv = bits, U08, 362, [3:3], "Normal, 0%=off", "Inverted, 100%=off"
+ trig_init = scalar, U08, 363, "", 1,0,0,255,0
+;pwmidle
+ pwmidle_ms = scalar, U16, 364, "ms", 1, 0.00000, 0, 500, 0
+ pwmidle_close_delay = scalar, U08, 366, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 367, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 367, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_closed_duty = scalar, U08, 368, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 368, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_pid_wait_timer = scalar, U08, 369, "s", 0.1, 0.00000, 1, 10, 0
+ pwmidle_freq_pin3 = bits, U08, 370, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ pwmidle_freq_koeo = bits, U08, 370, [7:7], "Off", "On"
+ ac_idleup_min_rpm = scalar, U16, 371, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 373, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 375, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 375, "steps", 1.00000, 0.00000, 0, 20, 0 ; same but steps
+ pwmidle_rpmdot_threshold = scalar, U16, 376, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold=scalar,U16, 378, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 380, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 382, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 384, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_freq_scale = bits, U08, 386, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ pwmidle_freq_pin = bits, U08, 386, [4:6], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ boost_ctl_settings_freq = bits, U08, 387, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 387, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 387, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_settings_invert_new= bits, U08, 387, [5:5], "Normal", "Inverted"
+
+ boost_ctl_pins = bits, U08, 388, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp = scalar, U08, 389, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 390, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 391, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 392, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 393, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pwm_scale = bits, U08, 396, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ boost_ctl_pwm = bits, U08, 396, [4:5], "INVALID", "Mid","Slow", "INVALID"
+
+ NoiseFilterOpts = bits, U08, 397, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 397, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 397, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 397, [3:3], "Off", "On"
+ launchcuttiming = scalar, S16, 398, "deg", 0.10000, 0.00000, -50.00, 50.00, 1
+ pwmidle_max_rpm_new = scalar, U16, 400, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 402, "s", 1, 0.00000, 0, 10, 0
+ boost_ctl_pins_pwm = bits, U08, 403, [0:2], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+; gap 24 bytes
+ secondtrigopts = bits, U08, 428, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 428, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 428, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 428, [3:3], "Off", "On"
+
+ TC5_required_width = scalar, U16, 429, "uSec", 1.0, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 431, "%", 0.10000, 0.00000, 0.00, 50, 0 ;
+ stoich = scalar, S16, 433, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ MAPOXMin = scalar, S16, 435, "%", 0.10000, 0.00000, -10, {loadhigh}, 2 ; * ( 2 bytes)
+ IC2ISR_tmask = scalar, U08, 437, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 438, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+;afrload and eaeload are part of extra_load_opts in firmware
+ afrload = bits, U08, 439, [0:3], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ eaeload = bits, U08, 439, [4:7], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+; airden_scaling = scalar, U08, 440, "%", 1, 0.00000, 0, 150.00, 0
+ fan_idleup_vss_hyst = scalar, U16, 441, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 200, 0
+ log_style_led = bits, U08, 443, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ log_style_ledspd = bits, U08, 443, [6:7], "Normal", "Slower", "Faster", "Fastest"
+ primedelay = scalar, U08, 444, "s", 0.1, 0.0, 0.0, 3, 1
+ pwmidle_cl_opts_initvaluetable = bits, U08, 445, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 445, [1:1], "Use MAT", "Use CLT"
+ pwmidle_cl_opts_display_pid = bits, U08, 445, [2:2], "Basic", "Advanced"
+ boost_ctl_flags = bits, U08, 446, [0:1], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ boost_ctl_flags2 = bits, U08, 446, [2:3], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ idleveadv_to_pid_idleadv = bits, U08, 447, [0:0], "Use normal activation", "Use PID idle activation"
+ idleveadv_to_pid_idleve = bits, U08, 447, [1:1], "Use normal activation", "Use PID idle activation"
+ boost_ctl_sensitivity = scalar, S16, 448, "", 0.1, 0, 0, 500, 1
+ boost_ctl_sensitivity2 = scalar, S16, 450, "", 0.1, 0, 0, 500, 1
+ fuelcut_fuelon_upper_rpmdot = scalar, U16, 452, "rpmdot", 10, 0, 0, 10000, 0
+ fuelcut_fuelon_lower_rpmdot = scalar, U16, 454, "rpmdot", 10, 0, 0, 10000, 0
+#if PW_4X
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.004, 0, 0, 10, 3
+#else
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.001, 0, 0, 10, 3
+#endif
+ staged_primary_delay = scalar, U08, 458, "ign events", 1, 0, 0, 30, 0
+
+ idleadvance_on = bits, U08, 459, [0:0], "Off", "On" ;
+ idleve_on = bits, U08, 459, [1:1], "Off", "On"
+ idleve_vsson = bits, U08, 459, [2:3], "Off", "VSS1", "VSS2", "INVALID"
+ idleadv_vsson = bits, U08, 459, [4:5], "Off", "VSS1", "VSS2", "INVALID"
+ idle_special_ops_timing_assist = bits, U08, 459, [6:6], "Off", "On"
+ idleadvance_tps = scalar, S16, 460, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 462, "rpm", 1, 0, 0, {rpmhigh}, 0
+ idleadvance_load = scalar, S16, 464, "%", 0.1, 0, 0, 100, 0
+
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 466, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleadvance_clt = scalar, S16, 466, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 468, "s", 1, 0, 0, 5, 0
+ idleadvance_curve = array, S16, 469, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1
+ idleadvance_loads = array, S16, 477, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1
+
+;SD datalogging
+ log_style2_but = bits, U08, 485, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ log_style_block = bits, U08, 486, [0:1], "64 byte", "64 byte + stream", "INVALID", "INVALID"
+ log_style_gps = bits, U08, 486, [5:5], "Off", "On"
+ log_style_on = bits, U08, 486, [6:7], "Disabled", "Insertion", "Button", "Trigger" ; old names
+ log_style_on2 = bits, U08, 486, [6:7], "Disabled", "Always", "Button", "Trigger" ; new names
+
+ log_style2_samp = bits, U08, 487, [3:4], "Timed", "every tooth", "every cycle", "INVALID"
+ log_style2_clg = bits, U08, 487, [5:5], "Off", "On"
+
+ log_style3_adc = bits, U08, 488, [0:2], "INT_MAP", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID"
+ log_length = scalar, U08, 489, "mins", 1, 0, 1, 255, 0
+ log_int = scalar, U16, 490, "ms", 0.128,0,2.0,8388,1
+ log_rate = scalar, U16, 490, "", 1.0, { (1000/log_int) - (log_int/ 0.128) },0,1000,0
+ logFieldOffset = array , U16, 492, [ 64], "", 1.0000, 0.00000, 0.00, 65535, 0 ; * ( 64 words)
+ logFieldLength = array , U08, 620, [ 64], "", 1.0000, 0.00000, 0.00, 255.00, 0 ; * ( 64 bytes)
+
+ firea = scalar, U08, 684, "", 1,0,0,16,0
+ fireb = scalar, U08, 685, "", 1,0,0,16,0
+ firec = scalar, U08, 686, "", 1,0,0,16,0
+ fired = scalar, U08, 687, "", 1,0,0,16,0
+ firee = scalar, U08, 688, "", 1,0,0,16,0
+ firef = scalar, U08, 689, "", 1,0,0,16,0
+ fireg = scalar, U08, 690, "", 1,0,0,16,0
+ fireh = scalar, U08, 691, "", 1,0,0,16,0
+ firei = scalar, U08, 692, "", 1,0,0,16,0
+ firej = scalar, U08, 693, "", 1,0,0,16,0
+ firek = scalar, U08, 694, "", 1,0,0,16,0
+ firel = scalar, U08, 695, "", 1,0,0,16,0
+ firem = scalar, U08, 696, "", 1,0,0,16,0
+ firen = scalar, U08, 697, "", 1,0,0,16,0
+ fireo = scalar, U08, 698, "", 1,0,0,16,0
+ firep = scalar, U08, 699, "", 1,0,0,16,0
+
+ sequential = bits, U08, 700, [0:1], "Off", "Semi-sequential", "Fully Sequential", "INVALID"
+ sequential_angle_spec = bits, U08, 700, [2:4], "INVALID", "End of squirt", "Middle of Squirt", "INVALID", "Beginning of squirt", "INVALID", "INVALID", "INVALID"
+ sequential_trim_on_off = bits, U08, 700, [5:5], "Off", "On"
+
+ boost_launch_duty = scalar, U08, 701, "%", 1,0,0,100,0
+ boost_launch_target = scalar, U16, 702, "kPa", 0.1,0,0,{loadhigh},1
+ boost_feats_tsw = bits, U08, 704, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve(6)","Gear-based", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_feats_launch = bits, U08, 704, [5:5], "Off", "On"
+ boost_feats_timed = bits, U08, 704, [6:6], "Off", "On"
+
+;see lower for launch_var_on
+ launch_3step_in = bits, U08, 705, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ launch_var_low = scalar, U16, 706, "rpm", 1,0,0,{rpmhigh},0
+ launch_var_up = scalar, U16, 708, "rpm", 1,0,0,{rpmhigh},0
+ vssout_scale = scalar, U32, 710, "", 1, 0, 0, 300000, 0
+ launch_sft_deg3 = scalar, S16, 714, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim3 = scalar, U16, 716, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ map_sample_duration = scalar, S16, 718, "deg", 0.10000, 0.00000, 0, 180, 1 ; * ( 2 bytes )
+ opentime_opt1_master = bits, U08, 720, [7:7], "Same", "Individual"
+ opentime_opt1 = bits, U08, 720, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt2 = bits, U08, 721, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt3 = bits, U08, 722, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt4 = bits, U08, 723, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt5 = bits, U08, 724, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt6 = bits, U08, 725, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt7 = bits, U08, 726, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt8 = bits, U08, 727, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta = bits, U08, 728, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta_pwm= bits, U08, 728, [4:4], "Off", "On"
+ opentime_optb = bits, U08, 729, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_optb_pwm= bits, U08, 729, [4:4], "Off", "On"
+ opentime_optb_own= bits, U08, 729, [5:5], "Off", "On"
+
+ opentime_opt11 = bits, U08, 730, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt12 = bits, U08, 731, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt13 = bits, U08, 732, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt14 = bits, U08, 733, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt15 = bits, U08, 734, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt16 = bits, U08, 735, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt17 = bits, U08, 736, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt18 = bits, U08, 737, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt1_master = bits, U08, 738, [7:7], "Off", "On"
+ smallpw_opt1 = bits, U08, 738, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt2 = bits, U08, 739, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt3 = bits, U08, 740, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt4 = bits, U08, 741, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt5 = bits, U08, 742, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt6 = bits, U08, 743, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt7 = bits, U08, 744, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt8 = bits, U08, 745, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opta = bits, U08, 746, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_optb = bits, U08, 747, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt11 = bits, U08, 748, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt12 = bits, U08, 749, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt13 = bits, U08, 750, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt14 = bits, U08, 751, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt15 = bits, U08, 752, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt16 = bits, U08, 753, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt17 = bits, U08, 754, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt18 = bits, U08, 755, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ maxafr_opt1_on = bits, U08, 756, [0:0], "Off", "On"
+ maxafr_opt1_load= bits,U08, 756, [1:2], "MAP", "TPS", "INVALID", "INVALID"
+ maxafr_opt1_led = bits,U08, 757, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ maxafr_en_load = scalar, U16, 758, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_en_rpm = scalar, U16, 760, "rpm", 1, 0, 0, {rpmhigh}, 0
+ maxafr_en_time = scalar, U16, 762, "s", 0.001, 0, 0, 5.000, 1
+ maxafr_spkcut_time=scalar, U16, 764, "s", 0.001, 0, 0, 5.000, 2
+ maxafr_ret_tps = scalar, S16, 766, "%", 0.10000, 0, 0, 110, 1
+ maxafr_ret_map = scalar, S16, 768, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_ret_rpm = scalar, U16, 770, "rpm", 1, 0, 0, {rpmhigh}, 1
+#if PW_4X
+ launch_addfuel = scalar, S16, 772, "ms", 0.004, 0.0000, -128, +128, 3
+#else
+ launch_addfuel = scalar, S16, 772, "ms", 0.001, 0.0000, -32, +32, 3
+#endif
+ wheeldia1 = scalar, U16, 774, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ wheeldia2 = scalar, U16, 778, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ fdratio1 = scalar, U16, 776, ":1", 0.01, 0.00000, 0.40, 6.0, 2 ; * ( 2 bytes)
+;not a gap
+ vss1_pos = bits, U08, 780, [0:1], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ vss2_pos = bits, U08, 780, [2:3], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ launch_var_on = bits, U08, 781, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ flats_minvss = scalar, U16, 782, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ vss_opt1 = bits, U08, 784, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss_opt2 = bits, U08, 784, [4:7], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss1_an = bits, U08, 785,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss1_can_id = scalar, U08, 786, "", 1.00000, 0.00000, 0.00, 255, 0 ;
+ tsw_pin_ob = bits, U08, 787, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vss1_can_offset = scalar, U16, 788, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss2_can_offset = scalar, U16, 790, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ MapThreshXTD = scalar, U08, 792, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ MapThreshXTD2 = scalar, U08, 793, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ vss_opt0_1 = bits, U08, 794, [0:1], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_2 = bits, U08, 794, [2:3], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_3 = bits, U08, 794, [4:4], "Off", "On"
+ vss_opt0_4 = bits, U08, 794, [6:6], "Off", "On"
+ ; 1 gap
+ ss_opt1 = bits, U08, 796, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Poll CAN"
+ ss_opt1_spd = bits, U08, 796, [7:7], "Off", "On"
+ vss2_an = bits, U08, 797,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ss1_pwmseq = scalar, U08, 798, "", 1.00000, 0.00000, 1, 4, 0
+ ss2_pwmseq = scalar, U08, 799, "", 1.00000, 0.00000, 1, 4, 0
+ gear_can_offset = scalar, U16, 800, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ mapsample_opt1 = bits, U08, 802, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 802, [2:2], "Use timed min", "Use event average"
+ map2port = bits, U08, 803, [0:4], "Off", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ n2o1n_pins = bits, U08, 804, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o1f_pins = bits, U08, 805, [0:5], "Same", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2n_pins = bits, U08, 806, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2f_pins = bits, U08, 807, [0:5], "Same", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+; these an_max did use msToPrefUnitsScale, but that didn't change the values in real time
+ vss1_an_max = scalar, U16, 808, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ vss2_an_max = scalar, U16, 810, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ tsw_pin_rf = bits, U08, 812, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_afr = bits, U08, 813, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend curve(5)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_stoich = bits, U08, 814, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_vss = bits, U08, 815, [0:1], "Off", "VSS1", "VSS2", "Gear"
+#if PW_4X
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ stoich_alt = scalar, S16, 818, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1
+
+ water_pins_pump = bits, U08, 820, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ water_pins_valve = bits, U08, 821, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_pins_in_shut = bits, U08, 822, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_freq_on = bits, U08, 823,[0:0], "Off", "On"
+ water_freq = bits, U08, 823,[1:4], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ water_freq_type = bits, U08, 823,[5:6], "Off", "Fast", "Slow", "INVALID"
+ boost_vss_tps = scalar, U16, 824, "%", 0.1, 0, 0, 100, 0
+ water_tps = scalar, S16, 826, "%", 0.1, 0, 0, 100, 0
+ water_rpm = scalar, U16, 828, "RPM", 1, 0, 0, {rpmhigh}, 0
+ water_map = scalar, S16, 830, "kPa", 0.1, 0, 0, {loadhigh}, 1
+#if CELSIUS
+ water_mat = scalar, S16, 832, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ water_mat = scalar, S16, 832, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ pwmidle_rpmdot_disablepid = scalar, S16, 834, "", 10.0000, 0.00000, 0, 1000, 0
+ boost_ctl_lowerlimit = scalar, S16, 836, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+
+ enable_pollADC = bits, U08, 838, [0:0], "Disable", "Enable" ; enable_poll
+ enable_pollPWM = bits, U08, 838, [1:2], "Disable", "16bit", "32bit", "INVALID"
+ enable_pollports_digin = bits, U08,838, [3:3], "Disable", "Enable"
+ enable_pollports_digout = bits,U08,838, [4:5], "Disable", "One", "Two", "INVALID"
+ enable_pwmout = bits,U08,838, [6:6], "Disable", "Enable"
+ enable_pwmout255 = bits,U08,838, [7:7], "Disable", "Enable"
+
+ poll_table_rtc = scalar, U08, 839, "", 1.00000, 0.00000, 0, 15, 0
+ poll_tablePWM = scalar, U08, 840, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 841, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offset_rtc = scalar, S16, 842, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ poll_offsetPWM = scalar, S16, 844, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digin_offset = scalar, S16, 846, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digout_offset = scalar, S16, 848, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+
+ egt_num = bits, U08, 850, [0:4], "Off", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ accXport = bits, U08, 851, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accYport = bits, U08, 852, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accZport = bits, U08, 853, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accXcal1 = scalar, S16, 854, "ADC", 1, 0, 0, 4095, 0
+ accXcal2 = scalar, S16, 856, "ADC", 1, 0, 0, 4095, 0
+ accYcal1 = scalar, S16, 858, "ADC", 1, 0, 0, 4095, 0
+ accYcal2 = scalar, S16, 860, "ADC", 1, 0, 0, 4095, 0
+ accZcal1 = scalar, S16, 862, "ADC", 1, 0, 0, 4095, 0
+ accZcal2 = scalar, S16, 864, "ADC", 1, 0, 0, 4095, 0
+
+ accxyzLF = scalar, U08, 866, "%", 1, 0, 10, 100, 0
+ egt1port = bits, U08, 867, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt2port = bits, U08, 868, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt3port = bits, U08, 869, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt4port = bits, U08, 870, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt5port = bits, U08, 871, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt6port = bits, U08, 872, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt7port = bits, U08, 873, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt8port = bits, U08, 874, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt9port = bits, U08, 875, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt10port = bits, U08, 876, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt11port = bits, U08, 877, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt12port = bits, U08, 878, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt13port = bits, U08, 879, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt14port = bits, U08, 880, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt15port = bits, U08, 881, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt16port = bits, U08, 882, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt_conf_action = bits, U08, 883, [0:0], "Off", "On"
+ egt_conf_shutdown = bits, U08, 883, [1:1], "Off", "On"
+ egt_conf_bank = bits, U08, 883, [2:3], "INVALID", "Bank 1", "Bank 2", "Both"
+ egt_conf_percyl = bits, U08, 883, [4:4], "Off", "On"
+;EGT calibration
+#if CELSIUS
+ egtcal_temp0 = scalar, S16, 884, "°C", 0.05555, -320, -40, 1500, 0
+ egtcal_tempmax= scalar, S16, 886, "°C", 0.05555, -320, -40, 1500, 0
+ egt_warn = scalar, S16, 888, "°C", 0.05555, -320, -40, 1500, 0
+ egt_max = scalar, S16, 890, "°C", 0.05555, -320, -40, 1500, 0
+#else
+ egtcal_temp0 = scalar, S16, 884, "°F", 0.1, 0, -40, 2700, 0
+ egtcal_tempmax= scalar, S16, 886, "°F", 0.1, 0, -40, 2700, 0
+ egt_warn = scalar, S16, 888, "°F", 0.1, 0, -40, 2700, 0
+ egt_max = scalar, S16, 890, "°F", 0.1, 0, -40, 2700, 0
+#endif
+ egt_time = scalar, U16, 892, "s", 0.001, 0, 0, 10, 2
+ vss1_can_scale= scalar, U16, 894, "%", 0.1, 0, 0, 6553, 1
+ vss1_can_scale_pulse= scalar, U16, 894, "", 1, 0, 0, 65535, 0
+ vss2_can_scale= scalar, U16, 896, "%", 0.1, 0, 0, 6553, 1
+ vss2_can_scale_pulse= scalar, U16, 896, "", 1, 0, 0, 65535, 0
+ vss1_pwmseq = scalar, U08, 898, "", 1.00000, 0.00000, 1, 4, 0
+ vss2_pwmseq = scalar, U08, 899, "", 1.00000, 0.00000, 1, 4, 0
+ MAFOption = bits, U08, 900, [0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "MAP", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ MAFOption_t = bits, U08, 900, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+ enginesize = scalar, U16, 901, "cc", 1.00000, 0.00000, 0, 65536, 0
+ vssout_opt = bits, U08, 903, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vssout_optunits= bits, U08, 903, [6:7], "Time", "Pulses per mile", "Pulses per km", "INVALID"
+ vss3_can_offset = scalar, U16, 904, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss1_can_size = bits, U08, 906, [0:0], "8bit", "16bit"
+ vss2_can_size = bits, U08, 906, [1:1], "8bit", "16bit"
+;MAF Freq options in vss_can_size byte
+ MAFOption_f = bits, U08, 906, [6:7], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ canpwm_clk = scalar, U08, 907, "MHz", 1,0,0,100,0
+ canpwm_pre = scalar, U08, 908, "", 1,0,0,255,0
+ canpwm_div = scalar, U08, 909, "", 1,0,0,255,0
+ vss1_can_table = scalar, U08, 910, "", 1,0,0,255,0
+ feature7_mafmat = bits, U08, 911, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 911, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 911, [2:2], "Off", "On"
+ feature7_aeevents= bits, U08, 911, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 911, [4:4], "Off", "On"
+ feature7_batchcrank= bits,U08, 911, [5:5], "Off", "On"
+ feature7_cranktaper= bits,U08, 911, [6:6], "Off", "On"
+ feature7_crtpunits= bits, U08, 911, [7:7], "Time", "Events"
+ vss1LF = scalar, U08, 912, "", 1,0,10,100,0
+ vss2LF = scalar, U08, 913, "", 1,0,10,100,0
+ ss1LF = scalar, U08, 914, "", 1,0,10,100,0
+ ss2LF = scalar, U08, 915, "", 1,0,10,100,0
+#if PW_4X
+ egt_addfuel = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ egt_addfuel = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ launch_fcut_rpm= scalar, U16, 918, "RPM", 1, 0, 1000, 65000, 0
+;gear ratios
+ gear1ratio = scalar, U16, 920, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear2ratio = scalar, U16, 922, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear3ratio = scalar, U16, 924, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear4ratio = scalar, U16, 926, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear5ratio = scalar, U16, 928, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear6ratio = scalar, U16, 930, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear_method = bits, U08, 932, [0:1], "Off", "VSS/RPM", "Analogue", "CAN Gear#"
+ gear_port_an = bits, U08, 933, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ gear0v = scalar, U16, 934, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear1v = scalar, U16, 936, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear2v = scalar, U16, 938, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear3v = scalar, U16, 940, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear4v = scalar, U16, 942, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear5v = scalar, U16, 944, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear6v = scalar, U16, 946, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear_no = scalar, U08, 948, "", 1, 0, 1, 6, 0
+ vssdotLF = scalar, U08, 949, "", 1,0,10,100,0
+ vssdot_int = scalar, U08, 950, "ms", 10, 0 , 10, 2000, 0
+ ac_idleup_io_in = bits, U08, 951, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ac_idleup_settings_inv = bits, U08, 951, [6:6], "Normal", "Inverted"
+ ac_idleup_settings = bits, U08, 951, [7:7], "Off", "On"
+
+ ac_idleup_io_out = bits, U08, 952, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ac_idleup_delay = scalar, U16, 953, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ac_idleup_adder_duty = scalar, U08, 955, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 955, "steps", 1, 0, 0, 255, 0
+ fanctl_settings_on = bits, U08, 956, [7:7], "Off", "On"
+ fanctl_settings_idleup = bits, U08, 956, [6:6], "No", "Yes"
+ fanctl_settings_pin = bits, U08, 956, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fanctl_idleup_delay = scalar, U16, 957, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ fanctl_idleup_adder_duty = scalar, U08, 959, "%", 0.392, 0.00000, 0, 100, 1
+ fanctl_idleup_adder_steps = scalar, U08, 959, "steps", 1.000, 0.00000, 0, 255, 0
+#if CELSIUS
+ fanctl_ontemp =scalar, S16, 960, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+#else
+ fanctl_ontemp =scalar, S16, 960, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ canadc_opt1 = bits, U08, 964, [0:0], "Off", "On"
+ canadc_opt2 = bits, U08, 964, [1:1], "Off", "On"
+ canadc_opt3 = bits, U08, 964, [2:2], "Off", "On"
+ canadc_opt4 = bits, U08, 964, [3:3], "Off", "On"
+ canadc_opt5 = bits, U08, 964, [4:4], "Off", "On"
+ canadc_opt6 = bits, U08, 964, [5:5], "Off", "On"
+ fanctl_opt2_engineoff = bits, U08, 965, [0:0], "No", "Yes"
+ canadc_id1 = scalar, U08, 966, "", 1, 0, 0, 14, 0
+ canadc_id2 = scalar, U08, 967, "", 1, 0, 0, 14, 0
+ canadc_id3 = scalar, U08, 968, "", 1, 0, 0, 14, 0
+ canadc_id4 = scalar, U08, 969, "", 1, 0, 0, 14, 0
+ canadc_id5 = scalar, U08, 970, "", 1, 0, 0, 14, 0
+ canadc_id6 = scalar, U08, 971, "", 1, 0, 0, 14, 0
+ canadc_tab1 = scalar, U08, 972, "", 1, 0, 0, 31, 0
+ canadc_tab2 = scalar, U08, 973, "", 1, 0, 0, 31, 0
+ canadc_tab3 = scalar, U08, 974, "", 1, 0, 0, 31, 0
+ canadc_tab4 = scalar, U08, 975, "", 1, 0, 0, 31, 0
+ canadc_tab5 = scalar, U08, 976, "", 1, 0, 0, 31, 0
+ canadc_tab6 = scalar, U08, 977, "", 1, 0, 0, 31, 0
+ canadc_off1 = scalar, U16, 978, "", 1, 0, 0, 1023, 0
+ canadc_off2 = scalar, U16, 980, "", 1, 0, 0, 1023, 0
+ canadc_off3 = scalar, U16, 982, "", 1, 0, 0, 1023, 0
+ canadc_off4 = scalar, U16, 984, "", 1, 0, 0, 1023, 0
+ canadc_off5 = scalar, U16, 986, "", 1, 0, 0, 1023, 0
+ canadc_off6 = scalar, U16, 988, "", 1, 0, 0, 1023, 0
+ ac_idleup_cl_targetadder = scalar, S16, 990, "rpm", 1, 0, 0, 700, 0
+ fan_idleup_cl_targetadder = scalar, S16, 992, "rpm", 1, 0, 0, 700, 0
+#if CELSIUS
+ boost_ctl_clt_threshold = scalar, S16, 994, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ boost_ctl_clt_threshold = scalar, S16, 994, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ fan_ctl_settings_acfan = bits, U08, 996, [0:0], "Leave Fan off", "Turn fan on"
+#if LAMBDA
+ ego_upper_bound = scalar, U08, 997, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+ ego_lower_bound = scalar, U08, 998, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+#else
+ ego_upper_bound = scalar, U08, 997, "AFR", 0.10000, 0.00000, 7, 25, 1
+ ego_lower_bound = scalar, U08, 998, "AFR", 0.10000, 0.00000, 7, 25, 1
+#endif
+ ss_opt2 = bits, U08, 999, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Poll CAN"
+ ss_opt2_spd = bits, U08, 999, [7:7], "Off", "On"
+ launch_maxvss = scalar, U16, 1000, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ maf_range = bits, U08, 1002, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ ac_delay_since_last_on = scalar, U08, 1003, "s", 1.00000, 0.00000, 0, 30, 0
+ reluctorteeth3 = scalar, U16, 1004, "", 0.01, 0,0,255,2 ; this is SS1
+ reluctorteeth4 = scalar, U16, 1006, "", 0.01, 0,0,255,2 ; this is SS2
+ boost_gear_switch = scalar, U08, 1008, "gear", 1, 0, 1, 7, 0
+ staged_extended_opts_use_v3 = bits, U08, 1009, [0:0], "Use Inj A-H (if possible)", "Use Inj I/J"
+ staged_extended_opts_simult = bits, U08, 1009, [1:1], "Alternating (2 squirts)", "Simultaneous (1 squirt)"
+ staged_extended_opts_pw1off = bits, U08, 1009, [2:2], "Off", "On"
+
+ can_pwmout_id = scalar, U08, 1010, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_tab = scalar, U08, 1011, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_offset = scalar, S16, 1012, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ idleve_tps = scalar, S16, 1014, "%", 0.10000, 0.00000, 0, 100, 1
+ idleve_rpm = scalar, U16, 1016, "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ idleve_load = scalar, S16, 1018, "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+#if CELSIUS
+ idleve_clt = scalar, S16, 1020, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleve_clt = scalar, S16, 1020, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleve_delay = scalar, U08, 1022, "s", 1.00000, 0.0000, 0, 10, 0
+ ac_idleup_cl_lockout_mapadder = scalar, U08, 1023, "%", 0.10000, 0.00000, 0, 25.5, 0
+
+page = 2
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,1,8388,1
+;this depend on single coil or seq etc.
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+#if PW_4X
+ testpw = scalar, U16, 6, "ms", 0.004, 0.00000, 0, 262.143, 3
+#else
+ testpw = scalar, U16, 6, "ms", 0.001, 0.00000, 0, 65.535, 3
+#endif
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0
+;gap
+ testinjPwmT = scalar, U08, 11, "ms", 0.12800, 0.12800, 0.00, 32.64, 1
+ testinjPwmPd = scalar, U08, 12, "us", 1.00000, 0.00000, 40.00, 100.00, 0
+ testinjPwmP = scalar, U08, 13, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ testsel_inj = bits, U08, 14, [0:3], "InjA", "InjB", "InjC", "InjD", "InjE", "InjF", "InjG", "InjH", "InjI", "InjJ" ,"InjK", "InjL", "INVALID", "INVALID", "INVALID", "INVALID"
+ testsel_coil = bits, U08, 14, [4:7], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "CoilG", "CoilH", "CoilI", "CoilJ", "CoilK", "CoilL", "INVALID", "INVALID", "INVALID", "INVALID"
+ dbgtooth = scalar, U08, 15, "tooth", 1,0,0,255,0
+ iacpostest = scalar, U16, 16, "steps", 1,0,0,65535,0
+ iachometest = scalar, U16, 18, "steps", 1,0,0,65535,0
+ iactest_0 = scalar, U08, 20, "", 1,0,0,255,0
+ flashlock = bits, U08, 21, [0:0], "Locked", "Unlocked" ; tables 0-3
+ boost_ctl_settings_on2 = bits, U08, 22, [3:3], "Off","On"
+ boost_ctl_settings_cl2 = bits, U08, 22, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_pins2 = bits, U08, 23, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp2 = scalar, U08, 24, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki2 = scalar, U08, 25, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd2 = scalar, U08, 26, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty2 = scalar, U08, 27, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty2 = scalar, U08, 28, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pins_pwm2 = bits, U08, 29, [0:2], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ boost_ctl_lowerlimit2 = scalar, S16, 30, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+ boost_ctl_sensor2 = bits, U08, 32, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+
+ vss_opt3 = bits, U08, 33, [0:3], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss_opt4 = bits, U08, 33, [4:7], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+
+ vss3_an = bits, U08, 34,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss4_an = bits, U08, 35,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss3_pwmseq = scalar, U08, 36, "", 1.00000, 0.00000, 1, 4, 0
+ vss4_pwmseq = scalar, U08, 37, "", 1.00000, 0.00000, 1, 4, 0
+ u08_debug38 = scalar, U08, 38, "", 1, 0.00000, 0, +255, 0
+ u08_debug38_0 = bits, U08, 38, [0:0], "Normal", "Loopback"
+ u08_debug38_1 = bits, U08, 38, [1:1], "Off", "On"
+; pad gap
+
+ egoport1 = bits, U08, 40, [0:4], "Normal EGO", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport2 = bits, U08, 41, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport3 = bits, U08, 42, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport4 = bits, U08, 43, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport5 = bits, U08, 44, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport6 = bits, U08, 45, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport7 = bits, U08, 46, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport8 = bits, U08, 47, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport9 = bits, U08, 48, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport10 = bits, U08, 49, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport11 = bits, U08, 50, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport12 = bits, U08, 51, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport13 = bits, U08, 52, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport14 = bits, U08, 53, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport15 = bits, U08, 54, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport16 = bits, U08, 55, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ egomap1 = bits, U08, 56, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap2 = bits, U08, 57, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap3 = bits, U08, 58, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap4 = bits, U08, 59, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap5 = bits, U08, 60, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap6 = bits, U08, 61, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap7 = bits, U08, 62, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap8 = bits, U08, 63, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap9 = bits, U08, 64, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap10 = bits, U08, 65, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap11 = bits, U08, 66, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap12 = bits, U08, 67, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap13 = bits, U08, 68, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap14 = bits, U08, 69, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap15 = bits, U08, 70, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap16 = bits, U08, 71, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+;egomap?t is not presently implemented in the code
+ egomap1t = bits, U08, 56, [4:4], "1", "2"
+ egomap2t = bits, U08, 57, [4:4], "1", "2"
+ egomap3t = bits, U08, 58, [4:4], "1", "2"
+ egomap4t = bits, U08, 59, [4:4], "1", "2"
+ egomap5t = bits, U08, 60, [4:4], "1", "2"
+ egomap6t = bits, U08, 61, [4:4], "1", "2"
+ egomap7t = bits, U08, 62, [4:4], "1", "2"
+ egomap8t = bits, U08, 63, [4:4], "1", "2"
+ egomap9t = bits, U08, 64, [4:4], "1", "2"
+ egomap10t = bits, U08, 65, [4:4], "1", "2"
+ egomap11t = bits, U08, 66, [4:4], "1", "2"
+ egomap12t = bits, U08, 67, [4:4], "1", "2"
+ egomap13t = bits, U08, 68, [4:4], "1", "2"
+ egomap14t = bits, U08, 69, [4:4], "1", "2"
+ egomap15t = bits, U08, 70, [4:4], "1", "2"
+ egomap16t = bits, U08, 71, [4:4], "1", "2"
+
+ tc_opt_on = bits, U08, 72, [0:0], "Off", "On"
+ tc_opt_method = bits, U08, 72, [1:2], "Perfect Run", "VSS %slip", "Perfect Run RPM", "Switch input"
+ tc_opt_slipcurve=bits,U08, 72, [4:4], "Fixed value", "Adjustable"
+ tc_opt_n2o = bits, U08, 72, [5:5], "On/Off", "INVALID"
+ tc_opt_bank = bits, U08, 72, [6:7], "INVALID", "Bank 1", "Bank 2", "Both"
+ tc_slipthresh = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ tc_minvss = scalar, U16, 74, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_maxvss = scalar, U16, 76, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_mintps = scalar, S16, 78, "%", 0.10000, 0.00000, 0, 100, 1
+ tc_enin = bits, U08, 80, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ knock_bpass = bits, U08, 81, [0:5], "1.22", "1.26", "1.31", "1.35", "1.40", "1.45", "1.51", "1.57", "1.63", "1.71", "1.78", "1.87", "1.96", "2.07", "2.18", "2.31", "2.46", "2.54", "2.62", "2.71", "2.81", "2.92", "3.03", "3.15", "3.28", "3.43", "3.59", "3.76", "3.95", "4.16", "4.39", "4.66", "4.95", "5.12", "5.29", "5.48", "5.68", "5.90", "6.12", "6.37", "6.64", "6.94", "7.27", "7.63", "8.02", "8.46", "8.95", "9.50", "10.12", "10.46", "10.83", "11.22", "11.65", "12.10", "12.60", "13.14", "13.72", "14.36", "15.07", "15.84", "16.71", "17.67", "18.76", "19.98"
+ knock_conf_num = bits, U08, 82, [0:0], "1", "2"
+ knock_conf_debug = bits, U08, 82, [4:4], "Off", "On"
+ knock_conf_percylact = bits, U08, 82, [5:5], "Off", "On"
+ knock_conf_launch = bits, U08, 82, [6:6], "Off", "On"
+ knock_conf_percyl = bits, U08, 82, [7:7], "Off", "On"
+ knock_int = bits, U08, 83, [0:4], "40", "45", "50", "55", "60", "65", "70", "75", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240", "260", "280", "300", "320", "360", "400", "440", "480", "520", "560", "600"
+
+ ff_tpw0 = scalar, U08, 84, "ms", 0.05, 0, 0, 12.7, 2
+ ff_tpw1 = scalar, U08, 85, "ms", 0.05, 0, 0, 12.7, 2
+#if CELSIUS
+ ff_temp0 = scalar, S16, 86, "°C", 0.05555, -320, -40, 150.00, 1
+ ff_temp1 = scalar, S16, 88, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ ff_temp0 = scalar, S16, 86, "°F", 0.10000, 0.00000, -40, 300, 1
+ ff_temp1 = scalar, S16, 88, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ fueltemp1 = bits, U08, 90, [0:4], "Off", "Flex fuel", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ fueltemp1_corr = bits, U08, 90, [7:7], "Off", "On"
+ tc_knob = bits, U08, 91, [0:4], "Normal EGO", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ maf_freq0 = scalar, U16, 92, "Hz", 0.25, 0.00000, 0, 16383,1
+ maf_freq1 = scalar, U16, 94, "Hz", 0.25, 0.00000, 0, 16383,1
+ map_freq0 = scalar, U16, 96, "Hz", 0.2, 0.00000, 0, 13107,1
+ map_freq1 = scalar, U16, 98, "Hz", 0.2, 0.00000, 0, 13107,1
+
+ knock_gain01 = bits, U08, 100, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain02 = bits, U08, 101, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain03 = bits, U08, 102, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain04 = bits, U08, 103, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain05 = bits, U08, 104, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain06 = bits, U08, 105, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain07 = bits, U08, 106, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain08 = bits, U08, 107, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain09 = bits, U08, 108, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain10 = bits, U08, 109, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain11 = bits, U08, 110, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain12 = bits, U08, 111, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain13 = bits, U08, 112, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain14 = bits, U08, 113, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain15 = bits, U08, 114, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain16 = bits, U08, 115, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+
+ knock_sens01 = bits, U08, 116, [0:0], "1", "2"
+ knock_sens02 = bits, U08, 117, [0:0], "1", "2"
+ knock_sens03 = bits, U08, 118, [0:0], "1", "2"
+ knock_sens04 = bits, U08, 119, [0:0], "1", "2"
+ knock_sens05 = bits, U08, 120, [0:0], "1", "2"
+ knock_sens06 = bits, U08, 121, [0:0], "1", "2"
+ knock_sens07 = bits, U08, 122, [0:0], "1", "2"
+ knock_sens08 = bits, U08, 123, [0:0], "1", "2"
+ knock_sens09 = bits, U08, 124, [0:0], "1", "2"
+ knock_sens10 = bits, U08, 125, [0:0], "1", "2"
+ knock_sens11 = bits, U08, 126, [0:0], "1", "2"
+ knock_sens12 = bits, U08, 127, [0:0], "1", "2"
+ knock_sens13 = bits, U08, 128, [0:0], "1", "2"
+ knock_sens14 = bits, U08, 129, [0:0], "1", "2"
+ knock_sens15 = bits, U08, 130, [0:0], "1", "2"
+ knock_sens16 = bits, U08, 131, [0:0], "1", "2"
+ s16_debug = scalar, S16, 132, "", 1, 0.00000, -32768, +32767, 0
+ u08_debug134 = scalar, U08, 134, "", 1, 0.00000, 0, +255, 0
+ AE_options = bits, U08, 135, [0:0], "Time-based AE", "Accel-pump AE"
+ accel_blend_percent = scalar, S16, 136, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold = scalar, U16, 138, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold = scalar, U16, 140, "kpa/sec", 1, 0, 0, 20000, 0
+ ae_lorpm2 = scalar, U16, 142, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ ae_hirpm2 = scalar, U16, 144, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ accel_blend_percent2 = scalar, S16, 146, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold2 = scalar, U16, 148, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold2 = scalar, U16, 150, "kpa/sec", 1, 0, 0, 20000, 0
+ tpsThresh2 = scalar, S16, 152, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1
+ mapThresh2 = scalar, S16, 154, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0
+ aeEndPW2 = scalar, S16, 156, "%ReqFuel", 1, 0.00000, 0.00, 100, 0
+ taeColdA2 = scalar, U08, 158, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ taeColdM2 = scalar, U08, 159, "%", 1.00000, 0.00000, 100, 255.00, 0
+ taeTime2 = scalar, U08, 160, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ taeTime_events2 = scalar, U08, 160, "events", 1, 0.00000, 0.00, 255, 0
+ tdePct2 = scalar, U08, 161, "", 1.00000, 0.00000, 50.00, 100.00, 0
+ aeTaperTime2 = scalar, U08, 162, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ aeTaperTime_events2= scalar, U08, 162, "events", 1, 0.00000, 0.00, 255, 0
+ tpsProportion2 = scalar, U08, 163, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ accel_CLT_multiplier2 = scalar, S16, 164, "%", 0.1, 0, 100, 255, 1
+ tc_led_out = bits, U08, 166, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+;gap
+;gap
+;gap
+ accel_CLT_multiplier = scalar, S16, 206, "%", 0.1, 0, 100, 255, 1
+ cl_idle_timing_target_deltas = array, S16, 208, [8], "rpm", 1, 0, -1000, 1000, 0
+ cl_idle_timing_advance_deltas = array, S16, 224, [8], "deg", 0.1, 0, -90, 90, 0
+
+ ltt_opt_on = bits, U08, 240, [0:0], "Off", "On"
+ ltt_opt_mode = bits, U08, 240, [1:1], "Timed", "Button"
+ ltt_opt_feedback = bits, U08, 240, [2:2], "Off", "On"
+ ltt_but_in = bits, U08, 241, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ltt_int = scalar, U08, 242, "min", 1, 0.00000, 5, 30, 0
+ ltt_led_out = bits, U08, 243, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ltt_thresh = scalar, U16, 244, "%", 0.1, 0.0, 10, 65535, 1
+
+ tc_minmap = scalar, S16, 246, "kPa", 0.10000, 0.00000, 0, 100, 1
+ can_bcast1_on = bits, U08, 248, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 248, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 248, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 248, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 248, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 248, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 248, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 248, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 249, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 249, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 249, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 250, "ms", 0.128, 0.00000, 50, 1000,1
+
+ timedout1_in = bits, U08, 252, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Same as launch", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ timedout1_out = bits, U08, 253, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ timedout1_offdelay = scalar, U16, 254, "s", 0.001, 0, 0, 15, 3
+ tstop_out = bits, U08, 256, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ can_enable_on = bits, U08, 257, [0:0], "Off", "On"
+ tstop_delay = scalar, U16, 258, "s", 0.001, 0, 0, 15, 3
+ tstop_hold = scalar, U16, 260, "s", 0.001, 0, 0, 15, 3
+ oddfireangs1 = scalar, U16, 262, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 264, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 266, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 268, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 270, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 272, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+
+ cel_opt_on = bits, U08, 274, [0:0], "Off", "On"
+ cel_opt_stat = bits, U08, 274, [1:3], "Off", "MAP", "MAT", "CLT", "TPS", "Batt", "EGO", "EGT1"
+ cel_opt_adc = bits, U08, 274, [5:5], "Fluctuation", "ADC counts"
+ cel_opt_flash = bits, U08, 274, [6:6], "Solid", "Flash-codes"
+ cel_opt_when = bits, U08, 274, [7:7], "Off", "On"
+
+ cel_port = bits, U08, 275, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ afr_min = scalar, U08, 276, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_max = scalar, U08, 277, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_var_upper = scalar, U16, 278, "", 1, 0, 0.00, 65535, 0
+ afr_var_lower = scalar, U16, 280, "", 1, 0, 0.00, 65535, 0
+ map_minadc = scalar, U16, 282, "", 1, 0, 0.00, 1023, 0
+ map_maxadc = scalar, U16, 284, "", 1, 0, 0.00, 1023, 0
+ map_var_upper = scalar, U16, 286, "", 1, 0, 0.00, 65535, 0
+ mat_minadc = scalar, U16, 288, "", 1, 0, 0.00, 1023, 0
+ mat_maxadc = scalar, U16, 290, "", 1, 0, 0.00, 1023, 0
+ mat_var_upper = scalar, U16, 292, "", 1, 0, 0.00, 65535, 0
+ clt_minadc = scalar, U16, 294, "", 1, 0, 0.00, 1023, 0
+ clt_maxadc = scalar, U16, 296, "", 1, 0, 0.00, 1023, 0
+ clt_var_upper = scalar, U16, 298, "", 1, 0, 0.00, 65535, 0
+ tps_minadc = scalar, U16, 300, "", 1, 0, 0.00, 1023, 0
+ tps_maxadc = scalar, U16, 302, "", 1, 0, 0.00, 1023, 0
+ tps_var_upper = scalar, U16, 304, "", 1, 0, 0.00, 65535, 0
+ batt_minv = scalar, U08, 306, "", 0.1, 0, 7.00, 23.0, 1
+ batt_maxv = scalar, U08, 307, "", 0.1, 0, 7.00, 23.0, 1
+ batt_var_upper = scalar, U16, 308, "", 1, 0, 0.00, 65535, 0
+ cel_opt2_map = bits, U08, 310, [0:0], "Off", "On"
+ cel_opt2_mat = bits, U08, 310, [1:1], "Off", "On"
+ cel_opt2_clt = bits, U08, 310, [2:2], "Off", "On"
+ cel_opt2_tps = bits, U08, 310, [3:3], "Off", "On"
+ cel_opt2_batt = bits, U08, 310, [4:4], "Off", "On"
+ cel_opt2_afr0 = bits, U08, 310, [5:5], "Off", "On"
+ cel_opt2_sync = bits, U08, 310, [6:6], "Off", "On"
+ cel_opt2_egt = bits, U08, 310, [7:7], "Off", "On"
+ cel_action1_map = bits, U08, 311, [0:0], "Off", "On"
+ cel_action1_mat = bits, U08, 311, [1:1], "Off", "On"
+ cel_action1_clt = bits, U08, 311, [2:2], "Off", "On"
+ cel_action1_tps = bits, U08, 311, [3:3], "Off", "On"
+ cel_action1_batt= bits, U08, 311, [4:4], "Off", "On"
+ cel_action1_ego = bits, U08, 311, [5:5], "Off", "On"
+ cel_action1_sync = bits, U08, 311, [6:6], "Off", "On"
+ cel_action1_map_an = bits, U08, 311, [7:7], "Off", "On"
+#if CELSIUS
+ cel_clt_cold = scalar, S16, 312, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_clt_cold = scalar, S16, 312, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_warmtime = scalar, U16, 316, "mins", 0.01666, 9, 1, 20,1
+#if CELSIUS
+ cel_mat_default = scalar, S16, 318, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_mat_default = scalar, S16, 318, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_revlim = scalar, S16, 320, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ cel_overboost = scalar, S16, 322, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ cel_boost_duty = scalar, U08, 324, "%", 1, 0.00000, 0, 100, 0
+ cel_boost_duty2 = scalar, U08, 325, "%", 1, 0.00000, 0, 100, 0
+ cel_synctol = scalar, U08, 326, "", 1, 0.00000, 0, 100, 0
+ cel_opt3_flex = bits, U08, 327, [0:0], "Off", "On"
+
+ cel_retard = scalar, S16, 328, "deg", 0.10000, 0.00000,0.00, 10.00, 1
+ map_var_lower = scalar, U16, 330, "", 1, 0, 0.00, 65535, 0
+#if CELSIUS
+ egt_minvalid = scalar, S16, 332, "°C", 0.05555, -320.000,-40.00, 1500, 1
+ egt_maxvalid = scalar, S16, 334, "°C", 0.05555, -320.000,-40.00, 1500, 1
+#else
+ egt_minvalid = scalar, S16, 332, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+ egt_maxvalid = scalar, S16, 334, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+#endif
+ egt_var_upper = scalar, U16, 336, "", 1, 0, 0.00, 65535, 0
+ egt_var_lower = scalar, U16, 338, "", 1, 0, 0.00, 65535, 0
+ cel_runtime = scalar, U08, 340, "s", 1, 0.00000, 5, 100, 0
+ cel_action2_flex = bits, U08, 341, [0:0], "Off", "On"
+ cel_action2_egt = bits, U08, 341, [1:1], "Off", "On"
+
+ blend_opt1 = bits, U08, 342, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt2 = bits, U08, 343, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt3 = bits, U08, 344, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt4 = bits, U08, 345, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt5 = bits, U08, 346, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt6 = bits, U08, 347, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt7 = bits, U08, 348, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+;gap in case of more blend curve options
+ fp_opt_mode = bits, U08, 350, [0:1], "On/Off", "Open-Loop PWM", "Closed-Loop PWM", "INVALID"
+ fp_opt_reg = bits, U08, 350, [4:5], "Vac referenced", "Fixed pressure", "Custom correction", "INVALID"
+ fp_opt_inv = bits, U08, 350, [6:6], "Normal", "Inverted"
+ fp_opt_safety = bits, U08, 350, [7:7], "Off", "On"
+ fp_out1 = bits, U08, 351, [0:5], "Fuel Pump", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ rail_pressure_psig = scalar, U16, 352, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ rail_pressure_kpag = scalar, U16, 352, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_Kp = scalar, U16, 354, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Ki = scalar, U16, 356, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Kd = scalar, U16, 358, "%", 0.1, 0.00000, 0, 200, 1
+ fp_prime_duty = scalar, U08, 360, "%", 0.392, 0.00000, 0, 100, 1
+ fp_press_in = bits, U08, 361, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ fp_press_type = bits, U08, 361, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+ fp_freq = bits, U08, 362, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+;spare
+ alternator_opt_mode = bits, U08, 364, [0:2], "Off", "On-Off", "Open-loop frequency", "Open-loop duty", "Closed-loop field control", "High-speed feedback field control", "INVALID", "INVALID"
+; possible application specific option bits
+ alternator_freq = bits, U08, 365, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ alternator_controlout = bits, U08, 366, [0:4], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_control_inv = bits, U08, 366, [6:6], "Normal", "Inverted"
+ alternator_lampout = bits, U08, 367, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ alternator_Kp = scalar, U16, 368, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Ki = scalar, U16, 370, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Kd = scalar, U16, 372, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_startdelay = scalar, U08, 374, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_ramptime = scalar, U08, 375, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_wot = scalar, U16, 376, "%", 0.1, 0.00000, 0, 110, 1
+ alternator_wotv = scalar, U08, 378, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_overrv = scalar, U08, 379, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_wottimeout = scalar, U08, 380, "s", 1, 0.00000, 0, 30, 0
+ alternator_tempin = bits, U08, 381, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ alternator_freq_monin = bits, U08, 382, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_moninv = bits, U08, 382, [6:6], "Normal", "Inverted"
+ alternator_targv = scalar, U08, 383, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_ctl_ms = scalar, U16, 384, "ms", 0.128, 0.00000, 10, 500, 0
+ fp_ctl_ms = scalar, U16, 386, "ms", 0.128, 0.00000, 10, 500, 0
+ alternator_freq_currin = bits, U08, 388, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_currinv = bits, U08, 388, [6:6], "Normal", "Inverted"
+ alternator_chargetime = scalar, U08, 389, "min", 1, 0.00000, 0, 30, 0
+ alternator_targvr = scalar, U08, 390, "V", 0.1, 0.00000, 10.0, 15.0, 1
+ alternator_diff = scalar, U08, 391, "V", 0.1, 0.00000, 0.1, 3.0, 1
+ alternator_maxload = scalar, U08, 392, "%", 1, 0.00000, 75, 101, 0
+ hpte_opt_on = bits, U08, 393, [0:0], "Off","On"
+ hpte_load = scalar, S16, 394, "%", 0.10000, 0, 0, {loadhigh}, 1
+ hpte_rpm = scalar, U16, 396, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_opt_pins = bits, U08, 398, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ shiftlight_opt_gear = bits, U08, 398, [7:7], "Off", "On"
+ fc_trans_time_ret = scalar, U08, 399, "s", 0.1, 0, 0.5, 5.0, 1
+ shiftlight_limit1 = scalar, U16, 400, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit2 = scalar, U16, 402, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit3 = scalar, U16, 404, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit4 = scalar, U16, 406, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit5 = scalar, U16, 408, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit6 = scalar, U16, 410, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ltt_samp_time = scalar, U08, 412, "s", 1, 0, 0, 255, 0
+ ltt_agg = scalar, U08, 413, "", 1, 0, 10, 255, 0
+ oilpress_in = bits, U08, 414, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ oilpress_out = bits, U08, 415, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelcalctime = scalar, U16, 416, "ms", 0.128, 0, 100, 8000, 0
+ alternator_sensitivity = scalar, U16, 420, "", 0.1, 0.00000, 0, 20, 0
+ idleminvss = scalar, U16, 422, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0
+
+ flex_baseline = scalar, U16, 424, "%", 0.1, 0.00000, 0, 100,1
+ fc_transition_time = scalar, U08, 426, "s", 0.1, 0, 0.5, 5.0, 1
+ fc_ae_time = scalar, U08, 427, "s", 0.01, 0, 0, 0.5, 2
+ fc_timing = scalar, S16, 428, "deg", 0.10000, 0.00000, -90.0, 180.00, 2
+ fc_ae_pct = scalar, U08, 430, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ fp_off_duty = scalar, U08, 431, "%", 0.392, 0.00000, 0, 100, 1
+ fp_min_duty = scalar, U08, 432, "%", 0.392, 0.00000, 0, 100, 1
+ fp_max_duty = scalar, U08, 433, "%", 0.392, 0.00000, 0, 100, 1
+
+ tcs_in = bits, U08, 434, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tcs_moves = scalar, U08, 435, "", 1, 0, 1, 50, 0
+ tcs_offtime = scalar, U16, 436, "s", 0.001, 0, 0.005, 0.100, 3
+ tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.050, 0.200, 3
+
+ boost_geartarg1 = scalar, S16, 440, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg2 = scalar, S16, 442, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg3 = scalar, S16, 444, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg4 = scalar, S16, 446, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg5 = scalar, S16, 448, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg6 = scalar, S16, 450, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ fp_drop_psig = scalar, U16, 452, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ fp_drop_kpag = scalar, U16, 452, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_drop_load = scalar, U16, 454, "%", 0.1, 0, 0, {loadhigh}, 1
+ fp_drop_rpm = scalar, U16, 456, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fp_drop_time = scalar, U16, 458, "s", 0.001,0, 0, 10, 2
+
+ pwm_opt_load_a_offset = scalar, U16, 460, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_b_offset = scalar, U16, 462, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_c_offset = scalar, U16, 464, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_d_offset = scalar, U16, 466, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_e_offset = scalar, U16, 468, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_f_offset = scalar, U16, 470, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_a_size = scalar, U08, 472, "", 1, 0, 0, 255, 0
+ pwm_opt_load_b_size = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ pwm_opt_load_c_size = scalar, U08, 474, "", 1, 0, 0, 255, 0
+ pwm_opt_load_d_size = scalar, U08, 475, "", 1, 0, 0, 255, 0
+ pwm_opt_load_e_size = scalar, U08, 476, "", 1, 0, 0, 255, 0
+ pwm_opt_load_f_size = scalar, U08, 477, "", 1, 0, 0, 255, 0
+
+ can_gps_id = scalar, U08, 478, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_gps_table = scalar, U08, 479, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_gps_offset = scalar, U16, 480, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ spkadj_max = scalar, S16, 482, "deg", 0.10000, 0.00000,0, 45, 1
+ spkadj_min = scalar, S16, 484, "deg", 0.10000, 0.00000,-45, 0, 1
+
+ can_outpc_msg = scalar, U16, 486, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 488, [7:7], "Off", "On"
+ can_outpc_gp00 = bits, U08, 488, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp01 = bits, U08, 489, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp02 = bits, U08, 490, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp03 = bits, U08, 491, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp04 = bits, U08, 492, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp05 = bits, U08, 493, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp06 = bits, U08, 494, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp07 = bits, U08, 495, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp08 = bits, U08, 496, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp09 = bits, U08, 497, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp10 = bits, U08, 498, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp11 = bits, U08, 499, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp12 = bits, U08, 500, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp13 = bits, U08, 501, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp14 = bits, U08, 502, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp15 = bits, U08, 503, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp16 = bits, U08, 504, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp17 = bits, U08, 505, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp18 = bits, U08, 506, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp19 = bits, U08, 507, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp20 = bits, U08, 508, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp21 = bits, U08, 509, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp22 = bits, U08, 510, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp23 = bits, U08, 511, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp24 = bits, U08, 512, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp25 = bits, U08, 513, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp26 = bits, U08, 514, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp27 = bits, U08, 515, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp28 = bits, U08, 516, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp29 = bits, U08, 517, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp30 = bits, U08, 518, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp31 = bits, U08, 519, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp32 = bits, U08, 520, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp33 = bits, U08, 521, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp34 = bits, U08, 522, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp35 = bits, U08, 523, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp36 = bits, U08, 524, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp37 = bits, U08, 525, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp38 = bits, U08, 526, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp39 = bits, U08, 527, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp40 = bits, U08, 528, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp41 = bits, U08, 529, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp42 = bits, U08, 530, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp43 = bits, U08, 531, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp44 = bits, U08, 532, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp45 = bits, U08, 533, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp46 = bits, U08, 534, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp47 = bits, U08, 535, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp48 = bits, U08, 536, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp49 = bits, U08, 537, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp50 = bits, U08, 538, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp51 = bits, U08, 539, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp52 = bits, U08, 540, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp53 = bits, U08, 541, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp54 = bits, U08, 542, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp55 = bits, U08, 543, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp56 = bits, U08, 544, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp57 = bits, U08, 545, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp58 = bits, U08, 546, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp59 = bits, U08, 547, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp60 = bits, U08, 548, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp61 = bits, U08, 549, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp62 = bits, U08, 550, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp63 = bits, U08, 551, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+
+ can_rcv_opt_on = bits, U08, 552, [0:0], "Off", "On"
+; engine_state_accel_fast_thresh = scalar, S16, 553, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_accel_slow_thresh = scalar, S16, 555, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_decel_fast_thresh = scalar, S16, 557, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_decel_slow_thresh = scalar, S16, 559, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_tps_closed_thresh = scalar, S16, 561, "%", 0.1, 0, 0, 5, 1
+; engine_state_overrun_map_thresh = scalar, S16, 563, "kPa", 0.1, 0, 0, 100, 1
+; engine_state_overrun_rpm_thresh = scalar, U16, 565, "rpm", 1, 0, 0, {rpmhigh}, 0
+
+ vss_samp_int = scalar, U16, 568, "ms", 0.05, 0, 10, 50, 2
+
+; somewhat big gap here
+; ###### ### ##### ##### # ######
+; # # # # # # # # # # #
+; # # # # # # # # #
+; ###### # # #### # #### # # ######
+; # # # # # # # ####### #
+; # # # # # # # # # #
+; ###### ### ##### ##### # # #
+;
+; big pad
+ dummyfield = bits, U08, 637, [0:0], "",""
+
+ staged_out2 = bits, U08, 638, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out2_inv = bits, U08, 638, [7:7], "Normal", "Inverted"
+ staged_out2_time = scalar, U08, 639, "s", 0.1, 0, 0, 1, 1
+ u16_debug640 = scalar, U16, 640, "", 1, 0.00000, 0, 65536, 0
+ staged_out1 = bits, U08, 642, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out1_inv = bits, U08, 642, [7:7], "Normal", "Inverted"
+ log_style4_opt = bits, U08, 643, [0:1], "RPM", "TPS", "MAP", "INVALID"
+ log_trig_rpm = scalar, U16, 644, "RPM", 1, 0, 0, {rpmhigh}, 0
+ log_trig_tps = scalar, U16, 646, "%", 0.1, 0, 0, 100, 0
+
+ baudhigh = scalar, U32, 648, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ fuelCorr_default = scalar, U08, 652, "%", 1.00000, 0.00000, 50, 255, 0
+ sdpulse_out = bits, U08, 653, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelSpkDel_default = scalar, S16, 654, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ map_phase_thresh = scalar, S16, 656, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ flex_pct0 = scalar, U16, 658, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 660, "%", 0.1, 0.00000, 0, 100,1
+
+;generic sensors
+ sensor01_source = bits, U08, 662, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor02_source = bits, U08, 663, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor03_source = bits, U08, 664, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor04_source = bits, U08, 665, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor05_source = bits, U08, 666, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor06_source = bits, U08, 667, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor07_source = bits, U08, 668, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor08_source = bits, U08, 669, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor09_source = bits, U08, 670, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor10_source = bits, U08, 671, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor11_source = bits, U08, 672, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor12_source = bits, U08, 673, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor13_source = bits, U08, 674, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor14_source = bits, U08, 675, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor15_source = bits, U08, 676, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor16_source = bits, U08, 677, [0:4], "INVALID", "ECU temp", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ sensor01_trans = bits, U08, 678, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor02_trans = bits, U08, 679, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor03_trans = bits, U08, 680, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor04_trans = bits, U08, 681, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor05_trans = bits, U08, 682, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor06_trans = bits, U08, 683, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor07_trans = bits, U08, 684, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor08_trans = bits, U08, 685, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor09_trans = bits, U08, 686, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor10_trans = bits, U08, 687, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor11_trans = bits, U08, 688, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor12_trans = bits, U08, 689, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor13_trans = bits, U08, 690, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor14_trans = bits, U08, 691, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor15_trans = bits, U08, 692, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor16_trans = bits, U08, 693, [0:2], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GM calibration"
+ sensor01_val0 = scalar, S16, 694, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_val0 = scalar, S16, 696, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_val0 = scalar, S16, 698, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_val0 = scalar, S16, 700, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_val0 = scalar, S16, 702, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_val0 = scalar, S16, 704, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_val0 = scalar, S16, 706, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_val0 = scalar, S16, 708, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_val0 = scalar, S16, 710, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_val0 = scalar, S16, 712, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_val0 = scalar, S16, 714, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+
+ sensor12_val0 = scalar, S16, 716, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_val0 = scalar, S16, 718, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_val0 = scalar, S16, 720, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_val0 = scalar, S16, 722, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_val0 = scalar, S16, 724, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01_max = scalar, S16, 726, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_max = scalar, S16, 728, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_max = scalar, S16, 730, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_max = scalar, S16, 732, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_max = scalar, S16, 734, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_max = scalar, S16, 736, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_max = scalar, S16, 738, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_max = scalar, S16, 740, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_max = scalar, S16, 742, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_max = scalar, S16, 744, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_max = scalar, S16, 746, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor12_max = scalar, S16, 748, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_max = scalar, S16, 750, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_max = scalar, S16, 752, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_max = scalar, S16, 754, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_max = scalar, S16, 756, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01LF = scalar, U08, 758, "", 1,0,10,100,0
+ sensor02LF = scalar, U08, 759, "", 1,0,10,100,0
+ sensor03LF = scalar, U08, 760, "", 1,0,10,100,0
+ sensor04LF = scalar, U08, 761, "", 1,0,10,100,0
+ sensor05LF = scalar, U08, 762, "", 1,0,10,100,0
+ sensor06LF = scalar, U08, 763, "", 1,0,10,100,0
+ sensor07LF = scalar, U08, 764, "", 1,0,10,100,0
+ sensor08LF = scalar, U08, 765, "", 1,0,10,100,0
+ sensor09LF = scalar, U08, 766, "", 1,0,10,100,0
+ sensor10LF = scalar, U08, 767, "", 1,0,10,100,0
+ sensor11LF = scalar, U08, 768, "", 1,0,10,100,0
+ sensor12LF = scalar, U08, 769, "", 1,0,10,100,0
+ sensor13LF = scalar, U08, 770, "", 1,0,10,100,0
+ sensor14LF = scalar, U08, 771, "", 1,0,10,100,0
+ sensor15LF = scalar, U08, 772, "", 1,0,10,100,0
+ sensor16LF = scalar, U08, 773, "", 1,0,10,100,0
+ sensor_temp = bits, U08, 774, [0:0], "degF", "degC"
+;pad
+#if PW_4X
+ injOpen1 = scalar, U16, 776, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ injOpen1 = scalar, U16, 776, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ shift_cut_on = bits, U08, 812, [0:0], "Off", "On"
+ shift_cut_auto = bits, U08, 812, [1:1], "Button", "Auto"
+ shift_cut_gear = bits, U08, 812, [2:2], "Off", "On"
+ shift_cut_fuel = bits, U08, 812, [3:3], "Off", "On"
+ shift_cut_in = bits, U08, 813, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_out = bits, U08, 814, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_rpm = scalar, U16, 815, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 817, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 819, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 820, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add12 = scalar, U08, 821, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add23 = scalar, U08, 822, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add34 = scalar, U08, 823, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add45 = scalar, U08, 824, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add56 = scalar, U08, 825, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 826, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_rpm12 = scalar, U16, 827, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm23 = scalar, U16, 829, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm34 = scalar, U16, 831, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm45 = scalar, U16, 833, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm56 = scalar, U16, 835, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_reshift= scalar, U08, 837, "s", 0.01024, 0, 0, 2.55, 2
+;open-loop PWM. all arrays
+ pwm_opt_on_a = bits, U08, 838, [0:0], "Off", "On"
+ pwm_opt_freq_a = bits, U08, 838, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_a = bits, U08, 838, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ pwm_opt_on_b = bits, U08, 839, [0:0], "Off", "On"
+ pwm_opt_freq_b = bits, U08, 839, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_b = bits, U08, 839, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_c = bits, U08, 840, [0:0], "Off", "On"
+ pwm_opt_freq_c = bits, U08, 840, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_c = bits, U08, 840, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_d = bits, U08, 841, [0:0], "Off", "On"
+ pwm_opt_freq_d = bits, U08, 841, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_d = bits, U08, 841, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_e = bits, U08, 842, [0:0], "Off", "On"
+ pwm_opt_freq_e = bits, U08, 842, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_e = bits, U08, 842, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_f = bits, U08, 843, [0:0], "Off", "On"
+ pwm_opt_freq_f = bits, U08, 843, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_f = bits, U08, 843, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ pwm_opt2_a = bits, U08, 844, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_b = bits, U08, 845, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_c = bits, U08, 846, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_d = bits, U08, 847, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_e = bits, U08, 848, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_f = bits, U08, 849, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_onabove_a = scalar, U08, 850, "%", 1, 0, 0, 100, 0
+ pwm_onabove_b = scalar, U08, 851, "%", 1, 0, 0, 100, 0
+ pwm_onabove_c = scalar, U08, 852, "%", 1, 0, 0, 100, 0
+ pwm_onabove_d = scalar, U08, 853, "%", 1, 0, 0, 100, 0
+ pwm_onabove_e = scalar, U08, 854, "%", 1, 0, 0, 100, 0
+ pwm_onabove_f = scalar, U08, 855, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_a = scalar, U08, 856, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_b = scalar, U08, 857, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_c = scalar, U08, 858, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_d = scalar, U08, 859, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_e = scalar, U08, 860, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_f = scalar, U08, 861, "%", 1, 0, 0, 100, 0
+
+ dualfuel_sw_on = bits, U08, 862, [0:0], "Off", "On"
+ dualfuel_sw_fuel = bits,U08, 862, [1:1], "Off", "On"
+ dualfuel_sw_spk = bits, U08, 862, [2:2], "Off", "On"
+ dualfuel_sw_afr = bits, U08, 862, [3:3], "Off", "On"
+ dualfuel_sw_rf = bits, U08, 862, [4:4], "Off", "On"
+ dualfuel_sw_stoich=bits,U08, 862, [5:5], "Off", "On"
+ dualfuel_sw_wue = bits, U08, 862, [6:6], "Off", "On"
+ dualfuel_sw_ase = bits, U08, 862, [7:7], "Off", "On"
+ dualfuel_sw2_prime=bits,U08, 863, [0:0], "Off", "On"
+ dualfuel_sw2_crank=bits,U08, 863, [1:1], "Off", "On"
+ dualfuel_sw2_injp =bits,U08, 863, [2:2], "Off", "On"
+ dualfuel_sw2_smpw =bits,U08, 863, [3:3], "Off", "On"
+ dualfuel_sw2_ob =bits ,U08, 863, [4:4], "Off", "On"
+ dualfuel_sw2_boosw=bits,U08, 863, [5:5], "Off", "On"
+ dualfuel_sw2_ae =bits,U08, 863, [6:6], "Off", "On"
+ opentime2_opt1_master = bits, U08, 864, [7:7], "Same", "Individual"
+ opentime2_opt1 = bits, U08, 864, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt2 = bits, U08, 865, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt3 = bits, U08, 866, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt4 = bits, U08, 867, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt5 = bits, U08, 868, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt6 = bits, U08, 869, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt7 = bits, U08, 870, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt8 = bits, U08, 871, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta = bits, U08, 872, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta_pwm= bits, U08, 872, [4:4], "Off", "On"
+ opentime2_optb = bits, U08, 873, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_optb_pwm= bits, U08, 873, [4:4], "Off", "On"
+ opentime2_optb_own= bits, U08, 873, [5:5], "Off", "On"
+
+ opentime2_opt11 = bits, U08, 874, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt12 = bits, U08, 875, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt13 = bits, U08, 876, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt14 = bits, U08, 877, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt15 = bits, U08, 878, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt16 = bits, U08, 879, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt17 = bits, U08, 880, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt18 = bits, U08, 881, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt1_master = bits, U08, 864, [7:7], "Off", "On"
+ smallpw2_opt1 = bits, U08, 882, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt2 = bits, U08, 883, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt3 = bits, U08, 884, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt4 = bits, U08, 885, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt5 = bits, U08, 886, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt6 = bits, U08, 887, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt7 = bits, U08, 888, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt8 = bits, U08, 889, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opta = bits, U08, 890, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_optb = bits, U08, 891, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt11 = bits, U08, 892, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt12 = bits, U08, 893, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt13 = bits, U08, 894, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt14 = bits, U08, 895, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt15 = bits, U08, 896, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt16 = bits, U08, 897, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt17 = bits, U08, 898, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt18 = bits, U08, 899, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ dualfuel_pin = bits, U08, 900, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ dualfuel_opt_temp= bits, U08, 901, [0:0], "Off", "On"
+ dualfuel_opt_press=bits, U08, 901, [1:1], "Off", "On"
+ dualfuel_opt_mode = bits,U08, 901, [2:3], "Switching", "Dual table", "Flex blend", "INVALID"
+ dualfuel_opt_out = bits,U08, 901, [4:4], "Shared outputs+relay", "Different outputs"
+
+#if PW_4X
+ inj2Open1 = scalar, U16, 902, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+
+ inj2Open13 = scalar, U16, 926, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open17 = scalar, U16, 934, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ inj2Open1 = scalar, U16, 902, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open13 = scalar, U16, 926, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+
+ inj2Open17 = scalar, U16, 934, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ inj2PwmT = scalar, U08, 938, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd = scalar, U08, 939, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP = scalar, U08, 940, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmT2 = scalar, U08, 941, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd2 = scalar, U08, 942, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP2 = scalar, U08, 943, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ dualfuel_temp_sens = bits, U08, 944, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_sens = bits, U08, 945, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_type = bits, U08, 945, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+; Leave these unused variables matching MS2 in case trans controller erroneously adjusts them
+; FuelAdj 946
+; SpkAdj, 948
+; IdleAdj, 950
+; SprAdj; 952
+
+ pwm_opt_curve_a = bits, U08, 954, [0:0], "Table", "Curve"
+ pwm_opt_curve_b = bits, U08, 954, [1:1], "Table", "Curve"
+ pwm_opt_curve_c = bits, U08, 954, [2:2], "Table", "Curve"
+ pwm_opt_curve_d = bits, U08, 954, [3:3], "Table", "Curve"
+ pwm_opt_curve_e = bits, U08, 954, [4:4], "Table", "Curve"
+ pwm_opt_curve_f = bits, U08, 954, [5:5], "Table", "Curve"
+;gap
+ ITB_load_mappoint = scalar, S16, 956, "% baro", 0.1000, 0, 30, 100.0, 1
+ ITB_load_idletpsthresh = scalar, S16, 958, "%", 0.1000, 0, -10, 100, 0
+ idle_voltage_comp_voltage = array, S16, 960, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_delta = array, S16, 972, [6], "%", 0.392, 0.00000, -20, 20, 1
+ ac_idleup_max_rpm = scalar, U16, 984, "rpm", 1, 0, 1000, {rpmhigh}, 0
+ llstg_in = bits, U08, 986, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ llstg_out = bits, U08, 987, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ kickdelay = scalar, U16, 988, "ms", 0.001,0.00000,0.1,35.00,3
+ log_trig_map = scalar, S16, 990, "%", 0.1, 0, 0, {loadhigh}, 0
+
+ page = 3 ; 8
+ boost_ctl_load_targets = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if PW_4X
+ primePWTable = array, S16, 256, [ 10], "ms", 0.40000, 0.00000, 0.00, 260.00, 1 ; * ( 20 bytes)
+#else
+ primePWTable = array, S16, 256, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+#endif
+ crankPctTable =array, U16, 276, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable =array, S16, 296, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable =array, S16, 316, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+
+#if CELSIUS
+ matTemps =array, S16, 336, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps =array, S16, 336, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard =array, U08, 348, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 354, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 378, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 402, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAESOCKPAbins = array, U16, 426, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAEBAWC = array, U08, 450, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 462, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 474, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 486, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 498, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 510, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+
+ ; Supplemental corrections for barometer and MAT.
+ baroCorrVals = array , S16, 522, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 540, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 540, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+
+#if CELSIUS
+ temp_table_p5 = array, S16, 558, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 558, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+ pwmidle_target_rpms = array, U16, 626, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 642, [8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ;
+ #else
+ pwmidle_clt_temps = array, S16, 642, [8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+;gap 20 bytes
+#if CELSIUS
+ RevLimLookup = array , S16, 678, [ 8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 678, [ 8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 694, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes
+;gap 24 bytes
+ RotarySplitTable = array, S16, 734, [8x8], "deg", 0.10000, 0.00000, -60, 20, 1
+ RotarySplitLoad = array, U16, 862, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, {loadhigh}, 0
+ RotarySplitRPM = array, U16, 878, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+
+ NoiseFilterRpm = array, U16, 894, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 902, [ 4], "usec", 1.0, 0.00000, 0.00, 43000, 1
+
+ VariableLagTPSBins = array, U08, 910, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 914, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 918, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 918, [4], "steps", 1, 0, 0, 512, 0
+
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ matclt_pct = array, U16, 934, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 946, [6], "load*rpm", 100, 0, 0, 6553500, 0
+ ;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 958, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 960, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 962, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 962, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;spare 10 bytes
+;end user defined
+;pad1
+ baroCorrDelta = array , S16, 974, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 992, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+; space
+
+page = 4 ; 9 - injector channel trims
+ inj_trima = array , S08, 000, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimb = array , S08, 036, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimc = array , S08, 072, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimd = array , S08, 108, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trime = array , S08, 144, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimf = array , S08, 180, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimg = array , S08, 216, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimh = array , S08, 252, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimi = array , S08, 288, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimj = array , S08, 324, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimk = array , S08, 360, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_triml = array , S08, 396, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimm = array , S08, 432, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimn = array , S08, 468, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimo = array , S08, 504, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+ inj_trimp = array , S08, 540, [6x6], "%", 0.20000, 0.00000, -25.4, 25.4, 1 ; * (36 bytes)
+
+ inj_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ inj_trim_load =array, U16, 588, [6], { bitStringValue( algorithmUnits , algorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1
+ inj_timing = array, S16, 600, [12x12], "deg", 0.10000, 0.00000, -360.0, 720.0, 1
+ inj_timing_rpm = array, U16, 888, [12], "rpm", 1, 0, 0, {rpmhigh}, 0
+ inj_timing_load = array, S16, 912, [12], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_load = array, U16, 936, [6], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_rpm = array, U16, 948, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if LAMBDA
+ maxafr1_diff = array, U08, 960, [6x6], "Lambda", 0.006803, 0.00000, 0.00, 0.14, 3
+#else
+ maxafr1_diff = array, U08, 960, [6x6], "AFR", 0.10000, 0.00000, 0.00, 2.00, 1
+#endif
+ dwellrpm_dwell = array, U08, 996, [6], "ms", 0.1, 0, 1, 8, 1
+ dwellrpm_rpm = array, U16, 1002, [6], "RPM", 1, 0, 0, 15000, 0
+
+page = 5 ; 10
+ boost_ctl_load_targets2 = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins2=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins2=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets2 = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins2=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins2=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_timed_pct = array, U08, 256, [ 6 ], "%", 1, 0, 0, 100, 0
+ boost_timed_time= array, U16, 262, [ 6 ], "s", 0.001, 0, 0, 15, 1
+ boostvss_duty = array, U08, 274, [ 6 ], "%", 1, 0, 0, 100, 0
+ boostvss_target = array, U16, 280, [ 6 ], "kPa", 0.1, 0, 0, {loadhigh}, 1
+ boostvss_speed = array, U16, 292, [ 6 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ map_sample_rpms = array, U16, 304, [ 8 ], "rpm", 1, 0, 0, {rpmhigh}, 0
+ map_sample_timing = array, S16, 320, [ 8 ], "deg", 0.10000, 0, -360, 720, 1
+#if LAMBDA
+ afrTable1 = array , U08, 336, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 480, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 336, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 480, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 624, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+;gap 8 bytes
+ iacstepTable = array , S16, 642, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+ arpm_table1 = array , U16, 662, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 686, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 710, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ amap_table2 = array , S16, 734, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ tempTable = array , S16, 758, [ 10], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE ; temp_table
+ #else
+ tempTable = array , S16, 758, [ 10], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ #endif
+;gap
+ dwellvolts = array , U08, 794, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 800, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ cold_adv_table = array , S16, 806, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ ipwmTable = array , S16, 826, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+;846
+ opentimepct0 = array, U16, 846, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct1 = array, U16, 858, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct2 = array, U16, 870, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct3 = array, U16, 882, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimev = array, U16, 894, [ 6], "V", 0.100, 0.00000, 6, 19.2, 1
+
+#if PW_4X
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+#else
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+#endif
+
+ waterinj_rpm = array, U16, 966, [ 8], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ waterinj_map = array, U16, 982, [ 4], "kPa", 0.1, 0.00000, 0.00, {loadhigh}, 0
+ waterinj_duty = array, U08, 990, [8 x 4], "%", 1, 0, 0, 100, 0
+
+page = 6 ; 11 - spark channel trims
+ spk_trima = array , S08, 000, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimb = array , S08, 036, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimc = array , S08, 072, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimd = array , S08, 108, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trime = array , S08, 144, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimf = array , S08, 180, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimg = array , S08, 216, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimh = array , S08, 252, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimi = array , S08, 288, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimj = array , S08, 324, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimk = array , S08, 360, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_triml = array , S08, 396, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimm = array , S08, 432, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimn = array , S08, 468, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimo = array , S08, 504, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimp = array , S08, 540, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ spk_trim_load = array, U16, 588, [6], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1 ; * (12 bytes)
+ XAcc =array, U16, 600, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauAcc =array, U16, 610, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XDec =array, U16, 620, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauDec =array, U16, 630, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XTrpms =array, U16, 640, [5], "rpm",1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 10 bytes)
+ XClt =array, U16, 650, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ TauClt =array, U16, 670, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+#if CELSIUS
+ XClt_temps = array, S16, 690, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ TauClt_temps = array, S16, 710, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ XClt_temps = array, S16, 690, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ TauClt_temps = array, S16, 710, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ launch_time = array, U16, 730, [10], "s", 0.001, 0, 0, 15, 2
+ launch_retard = array, U16, 750, [10], "deg", 0.1, 0, 0, 30, 1
+;gap (68 bytes)
+; staged tables
+ staged_percents=array, U08, 838, [8x8], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 902, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 918, [8], "%", 0.1, 0, 0, 250, 1
+ MAFFlow = array, U16, 934, [12], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 1
+ MAFCor = array, U08, 958, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+;gap
+ cranktaper_time=array, U16, 994, [6], "s", 0.1, 0, 0, 15, 1
+ cranktaper_timeevents=array,U16, 994, [6], "events", 1, 0, 0, 1000, 0 ; same again, different units
+ cranktaper_pct =array, U16, 1006, [6], "%", 0.1, 0, 0, 500, 0
+
+page = 7 ; 12
+ veTable1 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ; * (512 bytes)
+ veTable2 = array , U16, 512, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+
+page = 8 ; 13
+ advanceTable1 = array , S16, 000, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+ advanceTable2 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+
+page = 9 ; 18
+ veTable3 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable3 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 10 ; 19
+ frpm_table1 = array , U16, 000, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2 = array , U16, 032, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3 = array , U16, 064, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ fmap_table1 = array , S16, 096, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table2 = array , S16, 128, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table3 = array , S16, 160, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+
+ srpm_table1 = array , U16, 192, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 224, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table3 = array , U16, 256, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ smap_table1 = array , S16, 288, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table2 = array , S16, 320, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table3 = array , S16, 352, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ EAEAWCRPMbins2 = array, U16, 384, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAESOCRPMbins2 = array, U16, 408, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAEAWCKPAbins2 = array, U16, 432, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAESOCKPAbins2 = array, U16, 456, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAEBAWC2 = array, U08, 480, [ 12], "%", 1.0000, 0.00000, 0.00, 100.00, 0
+ EAEBSOC2 = array, U08, 492, [ 12], "%", 0.10000, 0.00000, 0.00, 25.5, 1
+ EAEAWN2 = array, U08, 504, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON2 = array, U08, 516, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAEAWW2 = array, U08, 528, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+ EAESOW2 = array, U08, 540, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+
+#if CELSIUS
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ ITB_load_loadvals= array, S16, 600, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 624, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 648, [ 12], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+ idleve_table1 = array, U16, 672, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_table2 = array, U16, 704, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_loads1 = array, S16, 736, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_loads2 = array, S16, 744, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_rpms1 = array, U16, 752, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+ idleve_rpms2 = array, U16, 760, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+;TC
+ tc_perfect_vss = array, U16, 768, [ 10 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_perfect_time = array, U16, 788, [ 10 ], "s", 0.001024, 0.00000, 0, 30, 1
+ tc_react_x = array, U16, 808, [ 4 ], "slip% x 0.01s", 0.1, 0.00000, 0, 10000, 1
+ tc_retard = array, U16, 816, [ 4 ], "deg", 0.1, 0.00000, 0, 30, 1
+ tc_spkcut = array, U08, 824, [ 4 ], "cut%", 1, 0.00000, 0, 100, 0
+ tc_addfuel = array, U08, 828, [ 4 ], "add%", 1, 0.00000, 0, 100, 1
+ tc_nitrous = array, U08, 832, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+ tc_boost = array, U08, 836, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+;840
+ knock_rpms = array, U16, 840, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds= array, U16, 860, [10], "%", 0.1, 0, 0, 100, 1
+ knock_starts= array, S16, 880, [10], "deg", 0.1, 0, -50, 50, 1
+ knock_durations = array, S16, 900, [10], "deg", 0.1, 0, 0, 50, 1
+;920
+ pwmidle_cl_initialvalue_rpms = array, U16, 920, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°C", 0.05555, -320, -40, 230, 0
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°F", 0.10000, 0.000, -40, 450, 0
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 940, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 940, [5 x 5], "steps", 1, 0, 0, 255, 0
+;pad
+#if CELSIUS
+ knock_clts = array, S16, 966, [ 4], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ knock_clts = array, S16, 966, [ 4], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ knock_upscale = array, U16, 974, [4], "%", 0.1, 0, 100, 600, 1
+ tc_perfect_rpm = array, U16, 982, [ 10 ], "rpm", 1.0000, 0.00000, 0, {rpmhigh}, 0
+ tc_boost_duty_delta = array, S08, 1002, [ 4 ], "+/-duty", 1, 0.00000, -100, 100, 0
+
+page = 11 ; 21
+ pwm_rpms_a = array, S16, 0, [6], "rpm",{ pwm_opt_curve_a == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_a_offset) } , { pwm_opt_curve_a == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_loadvals_a = array, S16, 12, [6], "%", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_xaxis_a = array, S16, 0, [12], "", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+
+ pwm_rpms_b = array, S16, 24, [6], "rpm",{ pwm_opt_curve_b == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_b_offset) } , { pwm_opt_curve_b == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_loadvals_b = array, S16, 36, [6], "%", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_xaxis_b = array, S16, 24, [12], "", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+
+ pwm_rpms_c = array, S16, 48, [6], "rpm",{ pwm_opt_curve_c == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_c_offset) } , { pwm_opt_curve_c == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_loadvals_c = array, S16, 60, [6], "%", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_xaxis_c = array, S16, 48, [12], "", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+
+ pwm_rpms_d = array, S16, 72, [6], "rpm",{ pwm_opt_curve_d == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_d_offset) } , { pwm_opt_curve_d == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_loadvals_d = array, S16, 84, [6], "%", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_xaxis_d = array, S16, 72, [12], "", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+
+ pwm_rpms_e = array, S16, 96, [6], "rpm",{ pwm_opt_curve_e == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_e_offset) } , { pwm_opt_curve_e == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_loadvals_e = array, S16, 108,[6], "%", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_xaxis_e = array, S16, 96, [12], "", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+
+ pwm_rpms_f = array, S16, 120, [6], "rpm",{ pwm_opt_curve_f == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_f_offset) } , { pwm_opt_curve_f == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_loadvals_f = array, S16, 132, [6], "%", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_xaxis_f = array, S16, 120, [12], "", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+
+ pwm_duties_a = array, U08, 144, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_a = array, U08, 144, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_b = array, U08, 180, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_b = array, U08, 180, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_c = array, U08, 216, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_c = array, U08, 216, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_d = array, U08, 252, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_d = array, U08, 252, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_e = array, U08, 288, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_e = array, U08, 288, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_f = array, U08, 324, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_f = array, U08, 324, [12], "%", 1, 0, 0, 250, 0
+
+ primePWTable2 = array, S16, 360, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable2 = array, U16, 380, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable2 = array, S16, 400, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable2 = array, S16, 420, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+ wueBins2 = array, U08, 440, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+#if CELSIUS
+ temp_table_p21 = array, S16, 450, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p21 = array, S16, 450, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ frpm_table4 = array , U16, 470, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table4 = array , S16, 502, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ srpm_table4 = array , U16, 534, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table4 = array , S16, 566, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ dualfuel_temp = array, S16, 598, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ dualfuel_temp = array, S16, 598, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ dualfuel_temp_adj=array, S16, 618, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ dualfuel_press = array, S16, 638, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ dualfuel_press_adj=array, S16, 658, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ inj_timing_sec=array, S16, 678, [12x12], "deg", 0.10000, 0.000, -360, 720, 1
+ inj_timing_sec_load=array, S16, 966, [ 12], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ inj_timing_sec_rpm=array, U16, 990, [ 12], "rpm", 1, 0, 0, {rpmhigh}, 0
+
+page = 12 ; 22
+ veTable4 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable4 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 13 ; 23
+ ; Generic on/off outputs "Spare Port Settings"
+ psEnabled = array , U08, 0, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psCondition = array , U08, 51, [ 51x2], "", 1, 0, 32, 124, 0, noSizeMutation
+ psConnector = array , U08, 153, [ 51], "", 1, 0, 32, 124, 0, noSizeMutation
+ psInitValue = array , U08, 204, [ 51], "", 1, 0 0, 1, 0, noSizeMutation
+ psPortValue = array , U08, 255, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psOutSize = array , U08, 306, [ 51x2], "", 1, 0, 0, 255, 0, noSizeMutation
+ psOutOffset = array , U16, 408, [ 51x2], "", 1, 0, 0, 1024, 0, noSizeMutation
+ psThreshold = array , S16, 612, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ psHysteresis = array , S16, 816, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ ;next is 1020
+ vvt_softout1 = bits, U08, 1020, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout2 = bits, U08, 1021, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout3 = bits, U08, 1022, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout4 = bits, U08, 1023, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+page = 14 ; 24
+ narrowband_tgts = array, U16, 0, [12x12], "V", 0.00488, 0.00000, 0, 1, 3
+ narrowband_tgts_rpms = array, U16, 288, [ 12], "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ narrowband_tgts_loads = array, S16,312, [ 12], "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+ als_opt_fc = bits, U08, 336, [0:0], "Off", "On"
+ als_opt_sc = bits, U08, 336, [1:1], "Off", "On"
+ als_opt_idle = bits, U08, 336, [2:2], "Off", "On"
+ als_opt_fuel = bits, U08, 336, [3:3], "Off", "On"
+ als_opt_pwmout= bits, U08, 336, [4:4], "Off", "On"
+ als_opt_ri = bits, U08, 336, [5:5], "Off", "On"
+ als_maxtime = scalar, U08, 337, "s", 0.1, 0, 1, 25.5, 1
+; als_mintps = scalar, S16, 338, "%", 0.10000, 0.00000, 0, 100, 1
+ als_maxtps = scalar, S16, 340, "%", 0.10000, 0.00000, 0, 100, 1
+ als_iac_duty = scalar, U08, 342, "%", 0.392, 0.00000, 0, 100, 1
+ als_iac_steps = scalar, U08, 342, "steps", 1, 0, 0, 255, 0
+ als_in_pin = bits, U08, 343, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ als_out_pin = bits, U08, 344, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ als_pwm_duty = scalar, U08, 345, "%", 1, 0, 0, 100, 0
+ als_pausetime = scalar, U08, 346, "s", 0.1, 0, 0, 25.5, 1
+ vvt_slew = scalar, U08, 347, "deg", 0.1, 0, 0.1, 25.5, 1
+#if CELSIUS
+ als_minclt = scalar, S16, 348, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+ als_maxclt = scalar, S16, 350, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_minclt = scalar, S16, 348, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+ als_maxclt = scalar, S16, 350, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+;ALS tables
+ als_rpms = array, U16, 352, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_tpss = array, U16, 364, [6], "%", 0.1, 0, 0, 100, 0
+ als_timing = array, S16, 376, [6x6], "degrees", 0.10000,0.00000,-50.00, 50.00,1;
+ als_addfuel = array, S16, 448, [6x6], "%", 0.1, 0, 0, 100, 1
+ als_fuelcut = array, U08, 520, [6x6], "%", 1, 0, 0, 100, 0
+ als_sparkcut = array, U08, 556, [6x6], "%", 1, 0, 0, 100, 0
+ als_minrpm = scalar, U16, 592, "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_maxrpm = scalar, U16, 594, "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ als_maxmat = scalar, S16, 596, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_maxmat = scalar, S16, 596, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_onoff_ang = scalar, S16, 598, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt1_on = bits, U08, 600, [0:1], "Off", "1", "2", "4"
+ vvt_opt1_filter = bits, U08, 600, [2:2], "Off", "On"
+ vvt_opt1_int = bits, U08, 600, [3:3], "Synced to cam", "Timed"
+ vvt_opt1_tst = bits, U08, 600, [4:6], "Off", "VVT1", "VVT2", "VVT3", "VVT4", "INVALID", "INVALID", "INVALID" ; 0, 1, 2, 3, 4
+ vvt_opt1_dir_exhaust = bits, U08, 600, [7:7], "Advance", "Retard"
+ vvt_hold_duty = scalar, U08, 601, "%", 0.392, 0, 0, 100, 1
+ vvt_out1 = bits, U08, 602, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out2 = bits, U08, 603, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out3 = bits, U08, 604, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out4 = bits, U08, 605, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out1_dir = bits, U08, 602, [7:7], "Advance", "Retard"
+ vvt_out2_dir = bits, U08, 603, [7:7], "Advance", "Retard"
+ vvt_out3_dir = bits, U08, 604, [7:7], "Advance", "Retard"
+ vvt_out4_dir = bits, U08, 605, [7:7], "Advance", "Retard"
+ vvt_ctl_ms = scalar, U16, 606, "ms", 1, 0.00000, 10, 500, 0
+ vvt_ctl_Kp = scalar, U08, 608, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki = scalar, U08, 609, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd = scalar, U08, 610, "%", 1, 0.00000, 0, 200, 0
+ vvt_test_duty = scalar, U08, 611, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_min_ang1 = scalar, S16, 612, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang2 = scalar, S16, 614, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang3 = scalar, S16, 616, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang4 = scalar, S16, 618, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang1 = scalar, S16, 620, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang2 = scalar, S16, 622, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang3 = scalar, S16, 624, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang4 = scalar, S16, 626, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt2_pid = bits, U08, 628, [0:0], "On/off", "PID"
+ vvt_opt2_pid2 = bits, U08, 628, [0:0], "On/Off", "Variable"
+ vvt_opt2_use_hold_intake = bits, U08, 628, [1:1], "Off", "On"
+ vvt_opt2_use_hold_exhaust = bits, U08, 628, [2:2], "Off", "On"
+ vvt_opt2_cam2pol = bits, U08, 628, [4:4], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam3pol = bits, U08, 628, [5:5], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam4pol = bits, U08, 628, [6:6], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam1pol = bits, U08, 628, [7:7], "Falling Edge", "Rising Edge"
+ vvt_opt3_cam2 = bits, U08, 629, [0:1], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam3 = bits, U08, 629, [2:3], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam4 = bits, U08, 629, [4:5], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam1 = bits, U08, 629, [6:6], "Main cam", "INVALID" ; for display only
+ vvt_timing_load = array, S16, 630, [ 8], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ vvt_timing_rpm = array, U16, 646, [ 8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ vvt_timing1 = array, S16, 662, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_timing2 = array, S16, 790, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_tth1 = scalar, U08, 918, "", 1, 0, 0, 24, 0
+ vvt_tth2 = scalar, U08, 919, "", 1, 0, 0, 24, 0
+ vvt_tth3 = scalar, U08, 920, "", 1, 0, 0, 24, 0
+ vvt_tth4 = scalar, U08, 921, "", 1, 0, 0, 24, 0
+
+ vvt_coldpos1 = scalar, S16, 922, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_coldpos2 = scalar, S16, 924, "degrees", 0.10000,0.00000,0, 720.00,1;
+
+ tclu_opt_vss = bits, U08, 926, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ tclu_opt_gear = bits, U08, 926, [2:2], "Off", "On"
+ tclu_brakepin = bits, U08, 927, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tclu_enablepin = bits, U08, 928, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ tclu_outpin = bits, U08, 929, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ tclu_gearmin = scalar, U08, 930, "", 1, 0, 0, 8, 0
+ tclu_delay = scalar, U08, 931, "s", 0.1, 0, 0, 10, 1
+ tclu_vssmin = scalar, U16, 932, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ tclu_tpsmin = scalar, S16, 934, "%", 0.1, 0, 0, 100, 1
+ tclu_tpsmax = scalar, S16, 936, "%", 0.1, 0, 0, 100, 1
+ tclu_mapmin = scalar, S16, 938, "%", 0.1, 0, 0, {loadhigh}, 1
+ tclu_mapmax = scalar, S16, 940, "%", 0.1, 0, 0, {loadhigh}, 1
+ vvt_opt4_decode = bits, U08, 942, [0:2], "Standard", "BMW V10", "BMW S54", "Hemi VVT", "Ford Coyote", "Ford Duratec 4 cyl", "INVALID", "INVALID"
+ vvt_opt5_add1 = bits, U08, 943, [0:1], "Off", "Cam 1", "Cam 2", "INVALID"
+ vvt_opt5_add2 = bits, U08, 943, [2:2], "Commanded", "Actual"
+ vvt_opt5_err = bits, U08, 943, [3:3], "Yes","No"
+ vvt_opt5_vvt1 = bits, U08, 943, [4:4], "Intake","Exhaust"
+ vvt_opt5_vvt2 = bits, U08, 943, [5:5], "Intake","Exhaust"
+ vvt_opt5_vvt3 = bits, U08, 943, [6:6], "Intake","Exhaust"
+ vvt_opt5_vvt4 = bits, U08, 943, [7:7], "Intake","Exhaust"
+ vvt_hold_duty_exh = scalar, U08, 944, "%", 0.392, 0, 0, 100, 1
+ vvt_ctl_Kp_exh = scalar, U08, 945, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki_exh = scalar, U08, 946, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd_exh = scalar, U08, 947, "%", 1, 0.00000, 0, 200, 0
+ vvt_cam1tth1 = scalar, U08, 948, "", 1, 0.00000, 0, 255, 0
+ vvt_cam1tth2 = scalar, U08, 949, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth1 = scalar, U08, 950, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth2 = scalar, U08, 951, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth1 = scalar, U08, 952, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth2 = scalar, U08, 953, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth1 = scalar, U08, 954, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth2 = scalar, U08, 955, "", 1, 0.00000, 0, 255, 0
+ vvt_opt6_freq = bits, U08, 956, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ vvt_opt7_yaxis = bits, U08, 957, [0:2], "Fuelload", "MAP", "% baro", "TPS", "MAFload", "INVALID", "INVALID", "INVALID"
+ als_rifuelcut = array, U08, 958, [6x6], "%", 1, 0, 0, 100, 0
+ als_rirpms = array, U16, 994, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_ritpss = array, U16, 1006, [6], "%", 0.1, 0, 0, 100, 0
+ als_pwm_opt_freq = bits, U08, 1018, [1:4], "On-Off", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ als_pwm_opt2 = bits, U08, 1019, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+#if CELSIUS
+ vvt_minclt = scalar, S16, 1020, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ vvt_minclt = scalar, S16, 1020, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_minduty1 = scalar, U08, 1022, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_maxduty1 = scalar, U08, 1023, "%", 0.392, 0.00000, 0, 100, 1
+
+page = 15 ; 25
+ mafv = array, U16, 0, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ maff = array, U16, 0, [64], "Hz", { (maf_freq1 - maf_freq0) / 5000 }, { maf_freq0 * 5000 / (maf_freq1 - maf_freq0) }, {maf_freq0}, { maf_freq1 }, 0
+ mafflow = array, U16, 128, [64], "g/sec", {0.01 * (maf_range + 1)}, -8192, {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 2
+ alphaMAPtable = array , S16, 256, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes)
+ amap_tps = array , S16, 328, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ amap_rpm = array , U16, 340, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ tpswot_tps = array , S16, 352, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 364, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 376, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 376, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 388, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+;next is 400
+ boost_ctl_cl_pwm_targs1 = array, U08, 400, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_targs2 = array, U08, 464, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 528, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_rpms2 = array, U16, 544, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 560, [8], "%", 0.10000, 0, 0, 600, 0
+ boost_ctl_cl_pwm_targboosts2 = array, S16, 576, [8], "%", 0.10000, 0, 0, 600, 0
+ blendx1 = array, S16, 592, [9], "X", 1, 0, -32767, 32767, 0
+ blendx2 = array, S16, 610, [9], "X", 1, 0, -32767, 32767, 0
+ blendx3 = array, S16, 628, [9], "X", 1, 0, -32767, 32767, 0
+ blendx4 = array, S16, 646, [9], "X", 1, 0, -32767, 32767, 0
+ blendx5 = array, S16, 664, [9], "X", 1, 0, -32767, 32767, 0
+ blendx6 = array, S16, 682, [9], "X", 1, 0, -32767, 32767, 0
+ blendx7 = array, S16, 700, [9], "X", 1, 0, -32767, 32767, 0
+ blendx8 = array, S16, 718, [9], "Flex%", 0.1, 0, 0, 100, 1
+ blendy1 = array, U08, 736, [9], "VE2", 1, 0, 0, 100, 0
+ blendy2 = array, U08, 745, [9], "Spk2", 1, 0, 0, 100, 0
+ blendy3 = array, U08, 754, [9], "VE3/4", 1, 0, 0, 100, 0
+ blendy4 = array, U08, 763, [9], "Spk3/4", 1, 0, 0, 100, 0
+ blendy5 = array, U08, 772, [9], "AFR2", 1, 0, 0, 100, 0
+ blendy6 = array, U08, 781, [9], "Boost2", 1, 0, 0, 100, 0
+ blendy7 = array, U08, 790, [9], "Crank%2", 1, 0, 0, 100, 0
+ blendy8 = array, U08, 799, [9], "Blend%", 1, 0, 0, 100, 0
+ fpd_duty= array, U08, 808, [6x6], "%", 0.392, 0.00000, 0, 100, 1
+ fpd_load= array, S16, 844, [6], "%", 0.10000, 0.00000, 0.0,{loadhigh}, 1
+ fpd_rpm = array, U16, 856, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+#if CELSIUS
+ fp_temps = array, S16, 868, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ fp_temps = array, S16, 868, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ fp_temp_adj = array, S16, 888, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ fp_presss = array, S16, 908, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ fp_press_adj = array, S16, 928, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ hpte_times = array, S16, 948, [ 6], "s", 0.10000, 0.000, 0.00, 25.5, 1
+ hpte_afrs = array, U08, 960, [ 6], "AFR", 0.10000, 0.000, 0.00, 5.0, 1
+ oil_rpm = array, U16, 966, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ oil_press_min = array, S16, 978, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ oil_press_max = array, S16, 990, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ alt_dutyin = array, U16, 1002, [7], "%", 1, 0, 0, 100, 0
+ alt_dutyout = array, U08, 1016, [7], "%", 1, 0, 0, 100, 0
+
+page = 16 ; 26 ; this is a RAM only page with no burnable flash
+; Quickform realtime data. Lower part of data is offset into outpc. Upper 3 bits are size. 0 = nothing, 1 = 1 byte, 2 = 2 bytes, 3 = 4 bytes
+ qfrtfielddata= array, U16, 0, [ 256], "", 1.0000, 0.00000, 0.00, 65535, 0, noMsqSave
+ ltt_table1 = array , S08, 512, [16x16], "%", 0.10000, 0.00000, -12.7, 12.7, 1, noMsqSave ; * (512 bytes)
+ ltt_rpms = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0, noMsqSave ; * ( 24 bytes)
+ ltt_loads = array , S16, 800, [ 16], "%", 0.10000, 0.00000, 0.00, {loadhigh}, 1, noMsqSave ; * ( 24 bytes)
+
+ portusage = array, U08, 832, [ 148], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_a = array, U08, 832, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_b = array, U08, 840, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_e = array, U08, 848, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_h = array, U08, 856, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_j = array, U08, 864, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_k = array, U08, 872, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_m = array, U08, 880, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_p = array, U08, 888, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_t = array, U08, 896, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0h=array, U08, 904, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0l=array, U08, 912, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canin=array, U08, 920, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canout=array,U08, 928, [16], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canadc=array,U08, 944, [24], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canpwm=array,U08, 968, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_pwmscl=array,U08, 976, [ 4], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_loop =array, U08, 980, [ 3], "", 1, 0, 0, 255, 0, noMsqSave
+
+page = 17 ; 27
+ ego_auth_table = array, U08, 0, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1
+ ego_auth_rpms = array, U16, 144, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ ego_auth_loads = array, S16, 168, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ vsslaunch_vss = array, U16, 192, [ 10], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ vsslaunch_rpm = array, U16, 212, [ 10], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ vsslaunch_retard = array, U16, 232, [ 10], "deg", 0.10000, 0.00000, 0.00, 50, 1
+ ego_delay_table = array, U08, 252, [12x12], "ms", 10.00000, 0, 0, 2550, 0
+ ego_delay_rpms = array, U16, 396, [ 12], "rpm", 1.00000, 0, 0, {rpmhigh}, 0
+ ego_delay_loads = array, S16, 420, [ 12], "%", 0.10000, 0, 0, {loadhigh}, 0
+ ego_sensor_delay = scalar,U08, 444, "ms", 2, 0, 0, 510, 0
+
+; 2 Generic PID channels
+ generic_pid_flags_a_on = bits,U08, 445, [0:0], "Off", "On"
+ generic_pid_flags_a_type = bits, U08, 445, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_a_direction = bits, U08, 445, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_a_output_type = bits, U08, 445, [4:4], "PWM", "Stepper"
+ generic_pid_flags_a_lookup_type = bits, U08, 445, [5:5], "Table", "Curve"
+ generic_pid_flags_b_on = bits,U08, 446, [0:0], "Off", "On"
+ generic_pid_flags_b_type = bits, U08, 446, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_b_direction = bits, U08, 446, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_b_output_type = bits,U08, 446, [4:4], "PWM", "Stepper"
+ generic_pid_flags_b_lookup_type = bits, U08, 446, [5:5], "Table", "Curve"
+
+ generic_pid_pwm_opts_freq_a = bits, U08, 447, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_a = bits, U08, 447, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ generic_pid_pwm_opts_freq_b = bits, U08, 448, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_b = bits, U08, 448, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ generic_pid_pwm_outs_a = bits, U08, 449, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ generic_pid_pwm_outs_b = bits, U08, 450, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+ generic_pid_load_offset_a = scalar, U16, 451, "", 1, 0, 0, 65535, 0
+ generic_pid_load_offset_b = scalar, U16, 453, "", 1, 0, 0, 65535, 0
+ generic_pid_load_size_a = scalar, U08, 455, "", 1, 0, 0, 255, 0
+ generic_pid_load_size_b = scalar, U08, 456, "", 1, 0, 0, 255, 0
+
+; These are positioned here so that TS reads them in the correct order and the autoscaling on the next block function
+ generic_pid_PV_offset_a = scalar, U16, 469, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_offset_b = scalar, U16, 471, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_size_a = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ generic_pid_PV_size_b = scalar, U08, 474, "", 1, 0, 0, 255, 0
+
+ generic_pid_upper_inputlim_a = scalar, S16, 457, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_upper_inputlim_b = scalar, S16, 459, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_lower_inputlim_a = scalar, S16, 461, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_lower_inputlim_b = scalar, S16, 463, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_output_upperlim_a = scalar, U08, 465, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_upperlim_b = scalar, U08, 466, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_a = scalar, U08, 467, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_b = scalar, U08, 468, "%", 0.392, 0.00000, 0, 100, 1
+ ;
+ ; not a gap!
+ ;
+ generic_pid_rpms_a = array, S16, 475, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_a = array, S16, 491, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_a) } , { getChannelTranslateByOffset(generic_pid_load_offset_a) }, { getChannelMinByOffset(generic_pid_load_offset_a) }, { getChannelMaxByOffset(generic_pid_load_offset_a) }, { getChannelDigitsByOffset(generic_pid_load_offset_a) }
+ generic_pid_rpms_b = array, S16, 507, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_b = array, S16, 523, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_b) } , { getChannelTranslateByOffset(generic_pid_load_offset_b) }, { getChannelMinByOffset(generic_pid_load_offset_b) }, { getChannelMaxByOffset(generic_pid_load_offset_b) }, { getChannelDigitsByOffset(generic_pid_load_offset_b) }
+
+ generic_pid_targets_a = array, S16, 539, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_targets_b = array, S16, 667, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+
+ generic_pid_control_interval_a = scalar, U08, 795, "ms", 1, 0, 10, 255, 0
+ generic_pid_control_interval_b = scalar, U08, 796, "ms", 1, 0, 10, 255, 0
+
+ generic_pid_P_a = scalar, U08, 797, "%", 1, 0, 0, 255, 0
+ generic_pid_P_b = scalar, U08, 798, "%", 1, 0, 0, 255, 0
+ generic_pid_I_a = scalar, U08, 799, "%", 1, 0, 0, 255, 0
+ generic_pid_I_b = scalar, U08, 800, "%", 1, 0, 0, 255, 0
+ generic_pid_D_a = scalar, U08, 801, "%", 1, 0, 0, 255, 0
+ generic_pid_D_b = scalar, U08, 802, "%", 1, 0, 0, 255, 0
+;gap
+ tcslipx = array, U16, 804, [9], "Knob%", 0.0978, 0, 0, 100, 0
+ tcslipy = array, U08, 822, [9], "Slip threshold %", 1, 0, 0, 100, 0
+;gap
+; 4 outmsg
+ outmsg1_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+page = 18 ; 28
+ dwell_table_values = array, U08, 262, [8x8], "%", 0.10000, 0.00000, 0.5, 25.5, 1
+ dwell_table_rpms = array, U16, 326, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ dwell_table_loads = array, S16, 342, [ 8], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ can_rcv_id1 = scalar, U16, 358, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id2 = scalar, U16, 360, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id3 = scalar, U16, 362, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id4 = scalar, U16, 364, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id5 = scalar, U16, 366, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id6 = scalar, U16, 368, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id7 = scalar, U16, 370, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id8 = scalar, U16, 372, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id9 = scalar, U16, 374, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id10= scalar, U16, 376, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id11= scalar, U16, 378, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id12= scalar, U16, 380, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id13= scalar, U16, 382, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id14= scalar, U16, 384, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id15= scalar, U16, 386, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id16= scalar, U16, 388, "", 1, 0.00000, 0, 2047, 0
+
+ can_rcv_var1 = bits, U08, 390, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var2 = bits, U08, 391, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var3 = bits, U08, 392, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var4 = bits, U08, 393, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var5 = bits, U08, 394, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var6 = bits, U08, 395, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var7 = bits, U08, 396, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var8 = bits, U08, 397, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var9 = bits, U08, 398, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var10 = bits, U08, 399, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var11 = bits, U08, 400, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var12 = bits, U08, 401, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var13 = bits, U08, 402, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var14 = bits, U08, 403, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var15 = bits, U08, 404, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var16 = bits, U08, 405, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ can_rcv_off1 = scalar, U08, 406, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off2 = scalar, U08, 407, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off3 = scalar, U08, 408, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off4 = scalar, U08, 409, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off5 = scalar, U08, 410, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off6 = scalar, U08, 411, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off7 = scalar, U08, 412, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off8 = scalar, U08, 413, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off9 = scalar, U08, 414, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off10 = scalar, U08, 415, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off11 = scalar, U08, 416, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off12 = scalar, U08, 417, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off13 = scalar, U08, 418, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off14 = scalar, U08, 419, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off15 = scalar, U08, 420, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off16 = scalar, U08, 421, "", 1, 0.00000, 0, 7, 0
+
+ can_rcv_size1 = bits, U08, 422, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size2 = bits, U08, 423, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size3 = bits, U08, 424, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size4 = bits, U08, 425, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size5 = bits, U08, 426, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size6 = bits, U08, 427, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size7 = bits, U08, 428, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size8 = bits, U08, 429, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size9 = bits, U08, 430, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size10 = bits, U08, 431, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size11 = bits, U08, 432, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size12 = bits, U08, 433, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size13 = bits, U08, 434, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size14 = bits, U08, 435, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size15 = bits, U08, 436, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size16 = bits, U08, 437, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ can_rcv_mult1 = scalar, S16, 438, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult2 = scalar, S16, 440, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult3 = scalar, S16, 442, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult4 = scalar, S16, 444, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult5 = scalar, S16, 446, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult6 = scalar, S16, 448, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult7 = scalar, S16, 450, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult8 = scalar, S16, 452, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult9 = scalar, S16, 454, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult10 = scalar, S16, 456, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult11 = scalar, S16, 458, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult12 = scalar, S16, 460, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult13 = scalar, S16, 462, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult14 = scalar, S16, 464, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult15 = scalar, S16, 466, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult16 = scalar, S16, 468, "", 1, 0.00000, -32767, 32767,0
+
+ can_rcv_div1 = scalar, U16, 470, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div2 = scalar, U16, 472, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div3 = scalar, U16, 474, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div4 = scalar, U16, 476, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div5 = scalar, U16, 478, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div6 = scalar, U16, 480, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div7 = scalar, U16, 482, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div8 = scalar, U16, 484, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div9 = scalar, U16, 486, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div10 = scalar, U16, 488, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div11 = scalar, U16, 490, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div12 = scalar, U16, 492, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div13 = scalar, U16, 494, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div14 = scalar, U16, 496, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div15 = scalar, U16, 498, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div16 = scalar, U16, 500, "", 1, 0.00000, 1, 32767,0
+
+ can_rcv_add1 = scalar, S16, 502, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add2 = scalar, S16, 504, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add3 = scalar, S16, 506, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add4 = scalar, S16, 508, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add5 = scalar, S16, 510, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add6 = scalar, S16, 512, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add7 = scalar, S16, 514, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add8 = scalar, S16, 516, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add9 = scalar, S16, 518, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add10 = scalar, S16, 520, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add11 = scalar, S16, 522, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add12 = scalar, S16, 524, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add13 = scalar, S16, 526, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add14 = scalar, S16, 528, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add15 = scalar, S16, 530, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add16 = scalar, S16, 532, "", 1, 0.00000, -32767, 32767,0
+ can_bcast_user_id = scalar, U16, 534, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 536, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 537, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 538, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 539, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 540, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 541, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 542, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 543, "", 1, 0, 0, 255, 0
+
+ iobox_opta1 = bits, U08, 544, [0:0], "Off", "On"
+ iobox_opta1adv = bits, U08, 544, [1:1], "Automatic", "Advanced"
+ iobox_opta1canin = bits, U08, 544, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta1canout= bits, U08, 544, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta1canadc= bits, U08, 544, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta2 = bits, U08, 545, [0:0], "Off", "On"
+ iobox_opta2adv = bits, U08, 545, [1:1], "Automatic", "Advanced"
+ iobox_opta2canin = bits, U08, 545, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta2canout= bits, U08, 545, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta2canadc= bits, U08, 545, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta3 = bits, U08, 546, [0:0], "Off", "On"
+ iobox_opta3adv = bits, U08, 546, [1:1], "Automatic", "Advanced"
+ iobox_opta3canin = bits, U08, 546, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta3canout= bits, U08, 546, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta3canadc= bits, U08, 546, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta4 = bits, U08, 547, [0:0], "Off", "INVALID"
+ iobox_opta4adv = bits, U08, 547, [1:1], "Automatic", "Advanced"
+ iobox_opta4canin = bits, U08, 547, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta4canout= bits, U08, 547, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta4canadc= bits, U08, 547, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+
+ iobox_optb1tachrate= bits, U08, 548, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb1inrate = bits, U08, 548, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1outrate = bits, U08, 548, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1vss = bits, U08, 548, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb2tachrate= bits, U08, 549, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb2inrate = bits, U08, 549, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2outrate = bits, U08, 549, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2vss = bits, U08, 549, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb3tachrate= bits, U08, 550, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb3inrate = bits, U08, 550, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3outrate = bits, U08, 550, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3vss = bits, U08, 550, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_optb4tachrate= bits, U08, 551, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb4inrate = bits, U08, 551, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4outrate = bits, U08, 551, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4vss = bits, U08, 551, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_id1 = scalar, U16, 552, "", 1, 0.00000, 0, 2047, 0
+ iobox_id2 = scalar, U16, 554, "", 1, 0.00000, 0, 2047, 0
+ iobox_id3 = scalar, U16, 556, "", 1, 0.00000, 0, 2047, 0
+ iobox_id4 = scalar, U16, 558, "", 1, 0.00000, 0, 2047, 0
+ pitlim_opt_on = bits, U08, 560, [0:0], "Off", "On"
+ pitlim_opt_mode = bits, U08, 560, [1:1], "Fixed", "Holding"
+ pitlim_opt_retard=bits, U08, 560, [2:2], "Off", "On"
+ pitlim_opt_spkcut=bits, U08, 560, [3:3], "Off", "On"
+ pitlim_opt_fuelcut=bits,U08, 560, [4:4], "Off", "On"
+ pitlim_opt_fuelprog=bits,U08, 560, [5:5], "Off", "On"
+ pitlim_opt_vssrpm= bits,U08, 560, [6:6], "VSS", "RPM"
+ pitlim_enin = bits, U08, 561, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pitlim_speed = scalar, U16, 562, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ pitlim_retardmax= scalar, S16, 564, "deg", 0.1, 0.00000, 0, 30, 1
+ pitlim_sensitivity=scalar, U16, 566, "", 0.1, 0.00000, 0, 20, 0
+ pitlim_speed_range=scalar, U16, 568, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,20, 1
+ pitlim_rpm_range=scalar, U16, 570, "RPM", 1.00000, 0.00000, 200, 1000, 0
+;accel wizard mini tables
+ taeBins = array , U08, 572, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins = array , U08, 576, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates = array , S16, 580, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 588, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+;accel wizard #2
+ taeBins2 = array , U08, 596, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins2 = array , U08, 600, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates2 = array , S16, 604, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates2 = array , S16, 612, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+ accel_mapdots = array, S16, 620, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots = array, S16, 636, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts = array, S16, 652, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts = array, S16, 668, [8], "%", 0.1, 0, -500, 500, 1
+ accel_mapdots2 = array, S16, 684, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots2 = array, S16, 700, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts2 = array, S16, 716, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts2 = array, S16, 732, [8], "%", 0.1, 0, -500, 500, 1
+ dashbcast_id1 = scalar, U16, 748, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 750, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 750, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 750, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 751
+
+;768-1023 reserved
+
+ page = 19 ; 29
+
+; dome settings
+
+;progressive nitrous tables
+ n2o1_time = array, U16, 346, [10], "s", 0.001, 0, 0, 15, 2
+ n2o1_rpm = array, U16, 366, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o1_vss = array, U16, 386, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o1_duty = array, U08, 406, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o1_pw = array, S16, 416, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o1_pw = array, S16, 416, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o1_retard = array, U16, 436, [10], "deg", 0.1, 0, 0, 30, 1
+ n2o2_time = array, U16, 456, [10], "s", 0.001, 0, 0, 15, 2
+ n2o2_rpm = array, U16, 476, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o2_vss = array, U16, 496, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o2_duty = array, U08, 516, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o2_pw = array, S16, 526, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o2_pw = array, S16, 526, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o2_retard = array, U16, 546, [10], "deg", 0.1, 0, 0, 30, 1
+ alternator_fvolts = array , U16, 566, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_freqv = array , U08, 578, [ 6], "", 1, 0.00000,0, 255, 0 ; * ( 6 bytes)
+#if CELSIUS
+ alternator_temp = array, S16, 584, [ 6], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ alternator_temp = array, S16, 584, [ 6], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ alternator_targvolts = array , U08, 596, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dvolts = array , U16, 602, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dutyv = array , U08, 614, [ 6], "", 1, 0.00000,0, 255, 1 ; * ( 6 bytes)
+; next is 620
+ ; watch out for dome settings
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = hardware_spk
+ requiresPowerCycle = hardware_cam
+ requiresPowerCycle = hardware_fuel
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+; requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = AfrAlgorithm
+ requiresPowerCycle = opt142_rtc
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knk_option_an
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gmtfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_campol
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = map2port
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = mapport
+ requiresPowerCycle = mapport_t
+ requiresPowerCycle = mapport_f
+ requiresPowerCycle = knkport_an
+
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tsw_pin_f
+ requiresPowerCycle = tsw_pin_s
+ requiresPowerCycle = tsw_pin_rf
+ requiresPowerCycle = tsw_pin_ob
+ requiresPowerCycle = tsw_pin_afr
+ requiresPowerCycle = tsw_pin_stoich
+ requiresPowerCycle = f5_0_tsf
+ requiresPowerCycle = f5_0_tsf_opt
+ requiresPowerCycle = f5_0_tss
+ requiresPowerCycle = f5_0_tss_opt
+
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = tacho_optvar
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = launch_opt_vss
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = pwmidle_freq_scale
+ requiresPowerCycle = boost_ctl_pins_pwm
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = boost_ctl_pwm_scale
+ requiresPowerCycle = boost_ctl_pwm
+ requiresPowerCycle = boost_ctl_settings_invert_new
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = log_style_led
+ requiresPowerCycle = log_style2_but
+ requiresPowerCycle = log_style_on2
+ requiresPowerCycle = log_style3_adc
+ requiresPowerCycle = sequential
+ requiresPowerCycle = boost_feats_tsw
+ requiresPowerCycle = launch_3step_in
+ requiresPowerCycle = maxafr_opt1_led
+ requiresPowerCycle = vss1_pos
+ requiresPowerCycle = vss2_pos
+ requiresPowerCycle = launch_var_on
+ requiresPowerCycle = reluctorteeth1
+ requiresPowerCycle = reluctorteeth2
+ requiresPowerCycle = vss_opt1
+ requiresPowerCycle = vss_opt2
+ requiresPowerCycle = vss1_an
+ requiresPowerCycle = vss2_an
+ requiresPowerCycle = vss1_can_scale
+ requiresPowerCycle = vss2_can_scale
+ requiresPowerCycle = ss_opt1
+ requiresPowerCycle = ss_opt2
+ requiresPowerCycle = wheeldia1
+ requiresPowerCycle = wheeldia2
+ requiresPowerCycle = fdratio1
+ requiresPowerCycle = vss1_can_id
+ requiresPowerCycle = vss1_can_offset
+ requiresPowerCycle = vss2_can_offset
+ requiresPowerCycle = vss3_can_offset
+ requiresPowerCycle = vss4_can_offset
+ requiresPowerCycle = vss_opt0_1
+ requiresPowerCycle = vss_opt0_2
+ requiresPowerCycle = vss_opt0_3
+ requiresPowerCycle = vss_opt0_4
+ requiresPowerCycle = ss_opt1_spd
+ requiresPowerCycle = ss1_pwmseq
+ requiresPowerCycle = ss2_pwmseq
+ requiresPowerCycle = gear_can_offset
+ requiresPowerCycle = n2o1n_pins
+ requiresPowerCycle = n2o1f_pins
+ requiresPowerCycle = n2o2n_pins
+ requiresPowerCycle = n2o2f_pins
+ requiresPowerCycle = water_freq_on
+ requiresPowerCycle = water_pins_pump
+ requiresPowerCycle = water_pins_valve
+ requiresPowerCycle = water_pins_in_shut
+ requiresPowerCycle = egt_num
+ requiresPowerCycle = accXport
+ requiresPowerCycle = accYport
+ requiresPowerCycle = accZport
+ requiresPowerCycle = egt1port
+ requiresPowerCycle = egt2port
+ requiresPowerCycle = egt3port
+ requiresPowerCycle = egt4port
+ requiresPowerCycle = egt5port
+ requiresPowerCycle = egt6port
+ requiresPowerCycle = egt7port
+ requiresPowerCycle = egt8port
+ requiresPowerCycle = egt9port
+ requiresPowerCycle = egt10port
+ requiresPowerCycle = egt11port
+ requiresPowerCycle = egt12port
+ requiresPowerCycle = egt13port
+ requiresPowerCycle = egt14port
+ requiresPowerCycle = egt15port
+ requiresPowerCycle = egt16port
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = MAFOption_t
+ requiresPowerCycle = MAFOption_f
+ requiresPowerCycle = vssout_opt
+ requiresPowerCycle = vssout_optunits
+ requiresPowerCycle = gear_method
+ requiresPowerCycle = gear_port_an
+ requiresPowerCycle = ac_idleup_io_in
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = fanctl_settings_on
+ requiresPowerCycle = fanctl_settings_pin
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = boost_ctl_settings_on2
+ requiresPowerCycle = boost_ctl_settings_cl2
+ requiresPowerCycle = boost_ctl_pins_pwm2
+ requiresPowerCycle = boost_ctl_pins2
+ requiresPowerCycle = boost_ctl_sensor2
+ requiresPowerCycle = egoport1
+ requiresPowerCycle = egoport2
+ requiresPowerCycle = egoport3
+ requiresPowerCycle = egoport4
+ requiresPowerCycle = egoport5
+ requiresPowerCycle = egoport6
+ requiresPowerCycle = egoport7
+ requiresPowerCycle = egoport8
+ requiresPowerCycle = egoport9
+ requiresPowerCycle = egoport10
+ requiresPowerCycle = egoport11
+ requiresPowerCycle = egoport12
+ requiresPowerCycle = egoport13
+ requiresPowerCycle = egoport14
+ requiresPowerCycle = egoport15
+ requiresPowerCycle = egoport16
+ requiresPowerCycle = tc_opt_on
+ requiresPowerCycle = tc_led_out
+ requiresPowerCycle = tc_opt_method
+ requiresPowerCycle = tc_enin
+ requiresPowerCycle = fueltemp1
+ requiresPowerCycle = sensor01_source
+ requiresPowerCycle = sensor02_source
+ requiresPowerCycle = sensor03_source
+ requiresPowerCycle = sensor04_source
+ requiresPowerCycle = sensor05_source
+ requiresPowerCycle = sensor06_source
+ requiresPowerCycle = sensor07_source
+ requiresPowerCycle = sensor08_source
+ requiresPowerCycle = sensor09_source
+ requiresPowerCycle = sensor10_source
+ requiresPowerCycle = sensor11_source
+ requiresPowerCycle = sensor12_source
+ requiresPowerCycle = sensor13_source
+ requiresPowerCycle = sensor14_source
+ requiresPowerCycle = sensor15_source
+ requiresPowerCycle = sensor16_source
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_gear
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = shift_cut_fuel
+ requiresPowerCycle = pwm_opt_on_a
+ requiresPowerCycle = pwm_opt_on_b
+ requiresPowerCycle = pwm_opt_on_c
+ requiresPowerCycle = pwm_opt_on_d
+ requiresPowerCycle = pwm_opt_on_e
+ requiresPowerCycle = pwm_opt_on_f
+ requiresPowerCycle = pwm_opt2_a
+ requiresPowerCycle = pwm_opt2_b
+ requiresPowerCycle = pwm_opt2_c
+ requiresPowerCycle = pwm_opt2_d
+ requiresPowerCycle = pwm_opt2_e
+ requiresPowerCycle = pwm_opt2_f
+ requiresPowerCycle = dualfuel_sw_on
+ requiresPowerCycle = dualfuel_pin
+ requiresPowerCycle = dualfuel_opt_mode
+ requiresPowerCycle = dualfuel_opt_out
+ requiresPowerCycle = dualfuel_temp_sens
+ requiresPowerCycle = dualfuel_press_sens
+
+ requiresPowerCycle = dualfuel_sw_fuel
+ requiresPowerCycle = dualfuel_sw_spk
+ requiresPowerCycle = dualfuel_sw_afr
+ requiresPowerCycle = dualfuel_sw_rf
+ requiresPowerCycle = dualfuel_sw_stoich
+ requiresPowerCycle = dualfuel_sw_wue
+ requiresPowerCycle = dualfuel_sw_ase
+ requiresPowerCycle = dualfuel_sw2_prime
+ requiresPowerCycle = dualfuel_sw2_crank
+ requiresPowerCycle = dualfuel_sw2_injp
+ requiresPowerCycle = dualfuel_sw2_smpw
+ requiresPowerCycle = dualfuel_sw2_ob
+ requiresPowerCycle = dualfuel_sw2_boosw
+ requiresPowerCycle = dualfuel_sw2_ae
+
+ requiresPowerCycle = als_opt_pwmout
+ requiresPowerCycle = als_in_pin
+ requiresPowerCycle = als_out_pin
+ requiresPowerCycle = als_pwm_opt_freq
+ requiresPowerCycle = als_pwm_opt2
+ requiresPowerCycle = vvt_opt1_on
+ requiresPowerCycle = vvt_out1
+ requiresPowerCycle = vvt_out2
+ requiresPowerCycle = vvt_out3
+ requiresPowerCycle = vvt_out4
+ requiresPowerCycle = vvt_opt2_cam1pol
+ requiresPowerCycle = vvt_opt2_cam2pol
+ requiresPowerCycle = vvt_opt2_cam3pol
+ requiresPowerCycle = vvt_opt2_cam4pol
+ requiresPowerCycle = vvt_opt3_cam2
+ requiresPowerCycle = vvt_opt3_cam3
+ requiresPowerCycle = vvt_opt3_cam4
+ requiresPowerCycle = tclu_brakepin
+ requiresPowerCycle = tclu_enablepin
+ requiresPowerCycle = tclu_outpin
+ requiresPowerCycle = vvt_opt4_decode
+ requiresPowerCycle = vvt_opt6_freq
+ requiresPowerCycle = vvt_softout1
+ requiresPowerCycle = vvt_softout2
+ requiresPowerCycle = vvt_softout3
+ requiresPowerCycle = vvt_softout4
+ requiresPowerCycle = knk_pin_out
+ requiresPowerCycle = ltt_opt_on
+ requiresPowerCycle = ltt_but_in
+ requiresPowerCycle = ltt_led_out
+ requiresPowerCycle = timedout1_in
+ requiresPowerCycle = timedout1_out
+ requiresPowerCycle = tstop_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = map_phase_thresh
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = staged_extended_opts_pw1off
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_second_param
+ requiresPowerCycle = staged_transition_on
+ requiresPowerCycle = staged_pw1_0
+ requiresPowerCycle = staged_out1
+ requiresPowerCycle = fp_opt_mode
+ requiresPowerCycle = fp_opt_inv
+ requiresPowerCycle = fp_out1
+ requiresPowerCycle = alternator_opt_mode
+ requiresPowerCycle = alternator_controlout
+ requiresPowerCycle = alternator_control_inv
+ requiresPowerCycle = alternator_freq
+ requiresPowerCycle = alternator_lampout
+ requiresPowerCycle = alternator_freq_monin
+ requiresPowerCycle = alternator_freq_moninv
+ requiresPowerCycle = alternator_freq_currin
+ requiresPowerCycle = alternator_freq_currinv
+ requiresPowerCycle = oilpress_in
+ requiresPowerCycle = oilpress_out
+ requiresPowerCycle = cel_port
+ requiresPowerCycle = generic_pid_flags_a_on
+ requiresPowerCycle = generic_pid_flags_b_on
+ requiresPowerCycle = generic_pid_flags_a_direction
+ requiresPowerCycle = generic_pid_flags_b_direction
+ requiresPowerCycle = generic_pid_pwm_opts_freq_a
+ requiresPowerCycle = generic_pid_pwm_opts_freq_b
+ requiresPowerCycle = generic_pid_pwm_outs_a
+ requiresPowerCycle = generic_pid_pwm_outs_b
+ requiresPowerCycle = can_rcv_opt_on
+ requiresPowerCycle = iobox_opta1
+ requiresPowerCycle = iobox_opta2
+ requiresPowerCycle = iobox_opta3
+ requiresPowerCycle = iobox_opta4
+ requiresPowerCycle = iobox_optb1vss
+ requiresPowerCycle = iobox_optb2vss
+ requiresPowerCycle = iobox_optb3vss
+ requiresPowerCycle = iobox_optb4vss
+ requiresPowerCycle = pitlim_opt_on
+ requiresPowerCycle = pitlim_enin
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = wue_lpg, "No"
+ defaultValue = vehigh, 255
+ defaultValue = clt_exp, 0
+ defaultValue = sensor01Alias, "Sensor 01"
+ defaultValue = sensor02Alias, "Sensor 02"
+ defaultValue = sensor03Alias, "Sensor 03"
+ defaultValue = sensor04Alias, "Sensor 04"
+ defaultValue = sensor05Alias, "Sensor 05"
+ defaultValue = sensor06Alias, "Sensor 06"
+ defaultValue = sensor07Alias, "Sensor 07"
+ defaultValue = sensor08Alias, "Sensor 08"
+ defaultValue = sensor09Alias, "Sensor 09"
+ defaultValue = sensor10Alias, "Sensor 10"
+ defaultValue = sensor11Alias, "Sensor 11"
+ defaultValue = sensor12Alias, "Sensor 12"
+ defaultValue = sensor13Alias, "Sensor 13"
+ defaultValue = sensor14Alias, "Sensor 14"
+ defaultValue = sensor15Alias, "Sensor 15"
+ defaultValue = sensor16Alias, "Sensor 16"
+ defaultValue = prefSpeedUnits, 0
+ defaultValue = prefLengthUnits, 0
+ defaultValue = scatterRuntimeEnabled, 1
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ tempTable = ""
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valve may work in the opposite direction."
+ pwmidle_freq_pin = "Output for idle valve."
+ pwmidle_freq_pin3 = "Second output for idle valve in 3-wire mode."
+ pwmidle_freq_scale = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz."
+ pwmidle_freq_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ feature3_tps = "Automatically recalibrate TPS if negative TPS values are seen. This can be useful if the zero position on your TPS varies.\n(The temporary recalibration is not saved.)"
+ baud = "This should be set to 115200."
+ baudhigh = "Optional faster baudrate for SDcard datalog readback.\nUseful options are 115200, 230400, 460800.\nUse the quickest that works reliably on your hardware. A direct USB cable is likely to work best."
+; These tips for on/off outputs do not show up in 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ firea = "Firing order is used for trim and per-cylinder corrections so the adjustment is applied to the correct cylinder number. Injectors and coils must still be wired in firing order sequence. i.e. InjA = cyl1, InjB = next cylinder to fire"
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+
+ sequential = "Off - disables sequential fuel and runs batch fire. Semi-sequential - fires injectors in pairs spread over a crank rotation (Requires a crank wheel.) Fully-Sequential - fires each injector in turn spread over a full engine cycle (requires a cam sensor on 4-stroke for phase information.)"
+ sequential_angle_spec = "Whether to time the injection by the start, middle or end of the pulse. End is most common and typically arranged so that injection has finished just before the inlet valve opens."
+ sequential_trim_on_off = "Whether to enable per-cylinder trim tables. This allows each cylinder to be tuned individually if you have per-cylinder widebands or EGT."
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on. Not recommended as this can easily get an incorrect reading if you are quick on the key or powercycle while the engine is running.\nTwo independent sensors = use a second dedicated barometer sensor.\n\nIt is strongly recommended to use a dedicated baro sensor if your vehicle will see altitude changes."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ mapport_t = "Selects voltage (common) or frequency (rare) type MAP sensor input.\nOff disables the MAP input. e.g. for pure Alpha-N or MAF installs."
+ mapport = "The connection to an external or internal voltage MAP sensor."
+ mapport_f = "The connection to an external or internal frequency MAP sensor."
+ map_freq0 = "The low frequency corresponding to the least MAP."
+ map_freq1 = "The high frequency corresponding to the most MAP."
+ map2port = "If fitted, the connection to a second voltage MAP sensor."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier or blended fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier or blend method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadMult2 = "The same as Multiply MAP, but this setting controls the secondary blended tables VE2 and VE4 - allowing for example Speed-Density (with MAP) on VE1 to be blended with a Pure Alpha-N (without MAP) on VE2."
+ loadStoich = "Including the AFR target allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier or blended fuel table (Spk2)\n\nAdvanced use only."
+ loadCombineign = "Selects the modifier or blend method"
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ OvrRunC_progcut = "Allows sequential injectors to be cut progressively for a smoother activation."
+ OvrRunC_progret = "Allows sequential injectors to be returned progressively for a smoother return. Does not make sense to use this with the accel-event option."
+ OvrRunC_progign = "Allows ignition timing transition during fuel cut."
+ OvrRunC_retign = "Allow ignition timing transition during fuel return."
+
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+ fc_transition_time = "Once main fuel cut delay timer has run, this sets a transition time from normal spark advance to the advance during overrun. The timer is also used for the progressive fuel cut.\nTypically set a retarded timing for overrun with a second time for smooth activation."
+ fc_trans_time_ret = "This sets a transition time from overrun to normal conditions and is used with progressive spark return and progressive fuel return.\nIf the throttle is applied above the threshold, the fuel and timing are immediately returned cancelling this timer."
+ fc_ae_time = "The length of time that additional fuel is added after over-run ends to avoid a lean-spike."
+ fc_timing = "The ignition advance during overrun. Typically set to a low number or ATDC timing."
+ fc_ae_pct = "Fuel adder after over-run ends to avoid a lean-spike."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou must also select a rev-limiter type below."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If full fuel cut the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored and the normal hard rev limit is used. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+ tacho_optvar = "Fixed = Use a fixed tachometer scaling of full speed or half speed.\nVariable = fully variable tachometer output.\nTypical settings are 'Fixed' and 'Normal'"
+ tacho_scale = "Percentage scaling of tachometer output, 100% means a true output. Adjust up or down to correct inaccuracies in your tachometer."
+
+ fanctl_settings_on = "Enables fan control"
+ fanctl_settings_idleup = "Whether the fan activation should also raise the idle"
+ fanctl_settings_pin = "Selects the output pin for the fan relay"
+ fanctl_idleup_delay = "How long to wait after raising idle before turning on fan"
+ fanctl_idleup_adder_duty = "PWM open-loop duty cycle to increase by"
+ fanctl_idleup_adder_steps = "Additional stepper idle steps to open"
+ fan_idleup_cl_targetadder = "Target rpm to increase by"
+ fanctl_ontemp = "Turn fan on above this temperature"
+ fanctl_offtemp = "Turn fan off below this temperature (must be lower than "on" temperature)"
+ fanctl_opt2_engineoff = "Allows fan to run in key-on, engine-off situation"
+ fan_ctl_settings_acfan = "Whether the fan should be automatically turned on to help cool the A/C radiator."
+ fan_idleup_tps_offpoint = "Disable fan above this TPS% (reduces load on engine when max power desired.)"
+ fan_idleup_tps_hyst = "Deadband of TPS% "
+ fan_idleup_vss_offpoint = "Disable fan above this vehicle speed (at high speeds airflow through radiator will be sufficient on its own.)"
+ fan_idleup_vss_hyst = "Deadband of VSS"
+
+ tclu_outpin = "Selects output port to connect to lockup solenoid "
+ tclu_enablepin = "Selects optional input port for enable switch (could be used for 4th gear pressure switch.) "
+ tclu_brakepin = "Selects optional input port for brake light switch (brake light unlocks convertor.) "
+ tclu_tpsmin = "Minimum TPS to enable lockup "
+ tclu_tpsmax = "Maximum TPS to enable lockup "
+ tclu_mapmin = "Minimum MAP to enable lockup "
+ tclu_mapmax = "Maximum MAP to enable lockup "
+ tclu_opt_vss = "Optionally allow VSS1 or VSS2 speed input as criteria "
+ tclu_vssmin = "Sets minimum speed for lockup. (Requires VSS input in speed/gear sensors.) "
+ tclu_opt_gear = "Optionally allows gear number as criteria. (Requires gear to be enable in speed/gear sensors.) "
+ tclu_gearmin = "Minimum gear to enable lockup "
+ tclu_delay = "Wait this long after conditions are met before locking up."
+ MAFOption_t = "Selects between 0-5V voltage input (e.g. most MAFs) or frequency input (e.g. GM)\nOff disables the MAF input. "
+ MAFOption = "Selects the hardware input pin where the voltage MAF is connected."
+ MAFOption_f = "Selects from four possible frequency input pins."
+ maf_freq0 = "The frequency the MAF outputs to indicate least air flow."
+ maf_freq1 = "The frequency the MAF outputs to indicate greatest air flow."
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ opentime_opt1_master = "Same = one dead-time across all injectors. Most common.\n\nIndividual = the dead time for each injector is set individually."
+ opentime_opt1 = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)"
+ opentime_opta_pwm = "Enables PWM current limiting (peak and hold) for low ohm injectors."
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ opentime_optb_own = "Enables different settings for bank 2. Only applicable if physically different injectors are on the second bank. Could be used with staged injection.\nFor most engines, this should be set to Off."
+ opentime_opta = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ smallpw_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. "
+ smallpw2_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. \n\nThis setting applies to table switched different injectors."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+
+ staged_extended_opts_pw1off = "Off = when staged, primary and secondary pulse-widths are equal.\n\nOn = when staged, primaries are shut down completely and just secondary injectors are used."
+ staged_extended_opts_use_v3 = "Whether the secondaries are connected to MS3X outputs or to the InjI/J batch fire outputs."
+ staged_extended_opts_simult = "Whether the batch fire outputs alternate during an engine cycle or fire once together."
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ staged_out1 = "Use a relay output to enable secondary injectors (GM systems) where primary and secondary injectors are wired to the same injector output."
+ staged_out2 = "Use a relay output earlier than secondary injectors (GM air-flaps)."
+ staged_out1_inv = "Allows output polarity sense to be swapped"
+ staged_out2_inv = "Allows output polarity sense to be swapped"
+ staged_out2_time = "How long the pre-output is active before the staging transition begins."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected."
+ fueltemp1 = "If used, specifies a sensor input for fuel temperature."
+ fuelFreq0 = "The low and high frequencies generated by the sensor (e.g. 50Hz, 150Hz for the GM sensor)"
+ flex_pct0 = "The ethanol percentage corresponding to the low and high frequencies."
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 163% for fully ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees. E85 burns more slowly than pure gasoline and will require more advance."
+ ff_tpw0 = "The pulsewidth from the sensor at low and high temperatures (1.0, 5.0ms for GM)"
+ ff_temp0 = "The low/high temperatures at low/high pulsewidths"
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ fuelFreq1 = ""
+ flex_pct1 = ""
+ fuelCorr1 = ""
+ fuelSpkDel1 = ""
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoAlgorithm_auth = "Enables a table of EGO authority based on RPM/load. This allows greater control over when closed-loop EGO is operational and permits variable authority. An authority of zero means there will be no correction made. Normally the RPM and load axes should be set the same as the AFR tables."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ ego_lower_bound = "Only correct above this AFR"
+ ego_upper_bound = "Only correct below this AFR"
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ egonum = "Selects the number of oxygen sensors in use."
+ egoport1 = "Selects where the sensor or controller is connected."
+ egomap1 = "Selects which oxygen sensor applies to this cylinder if multiple sensors are used. When only a single sensor is fitted, ensure all cylinders are set to EGO1."
+
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received.\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gmtfi = "GM HEI, Ford TFI and Buick C3I specific options.\nWith HEI7/8 and GM-DIS, this setting enables the 'bypass' output on spark B.\nThe C3I mode enables the 'bypass' and also quick-sync after the cam signal is received.\n Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors (where one vane is shorter than the others) for sequential fuel."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils. For 99% of installs, this should be set to 'Going high'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ hardware_spk = "Selects what outputs are used for ignition.\nSpark = normal logic spark outputs\nTacho = single channel output suitable for TFI and CDI boxes."
+ hardware_cam = "Selects where the cam input is connected.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only. Enable 'Timed min' MAP sampling. Set the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_tach3 = "Selects where the tertiary tach input is connected"
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam or hi-res tach input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_mode3_kick = "Primarily for kick-start engines, the enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\n\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ spk_conf2_dwell = "For time-after-spark, the dwell can be varied with rpm."
+ spk_conf2_dwelltbl = "For 'standard dwell', a table of dwell values can be used. Normally a single dwell value is used."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "This is not used on MS3-Pro."
+ spk_mode3_trim = "Enables the adjustment of timing per individual cylinder."
+
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "How often are second trigger (e.g. cam) input pulses received."
+ poll_level_tooth = "Which crank tooth number to poll the cam level at. Default is 1.\nRover 4.6 try 17.\nChanging the tooth no. may also change the phase."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ map_sample_duration = "How many degrees to sample over. The starting angle is set in the curve above."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl."
+
+ fp_opt_mode = "On/Off is used for basic control where the Megasquirt controls the negative side of a relay.\nOpen-Loop PWM provides a table based duty cycle for a fuel pump controller.\nClosed-Loop PWM monitors actual rail pressure and adjusts the duty cycle output to the pump controller to maintain a set differential pressure."
+ fp_ctl_ms = "How often to run the control calculations"
+ fp_out1 = "The output used to control the fuel pump (either to the relay or to a controller.)"
+ fp_freq = "For PWM outputs, this sets the output frequency."
+ fp_opt_inv = "Set to 'Normal' for On/Off. This setting is useful for PWM outputs and should be set to 'Invert' when using one of the mid-current ECU outputs as they invert the signal. The Spark or Digital outputs do not invert the signal and 'Normal' should be used. Note that the on/off fuel pump output is always a low-side driver and connects to the negative side of the relay - changing this setting will have no impact on that."
+ fp_opt_reg = "By preference, fuel systems use a vacuum/boost referenced regulator that maintains line pressure Xbar above inlet pressure. Some GM fuel systems use a fixed fuel pressure referenced to ambient air pressure instead. The vac referenced systems give even injector flow across all inlet pressure conditions. The un-referenced systems give a varying flow and require a calculation within the ECU to compensate. Enabling 'Fixed' here turns on that automatic compensation."
+ fp_opt_safety = "Enables fuel pressure safety system.\nIf the measured fuel pressure drops too low for more than a set time, the engine is shutdown."
+ rail_pressure_psig = "The fuel rail pressure in PSI referenced to manifold pressure. Typically 43.5PSI for many installs."
+ rail_pressure_kpag = "The fuel rail pressure in kPa referenced to manifold pressure. Typically 304kPa for many installs."
+ fp_prime_duty = "The PWM duty cycle used during the priming pulse."
+ fp_off_duty = "The PWM duty cycle used when the pump should be off. Set to 0 for most applications, or 75% for Ford FPDM modules."
+ fp_min_duty = "The minimum PWM duty cycle to be used when running. Set to 0 for most applications, or 5% for Ford FPDM modules."
+ fp_max_duty = "The maximum PWM duty cycle to be used when running. Set to 100 for most applications, or 50% for Ford FPDM modules."
+ fp_press_in = "If used, specifies a Generic Sensor that is configured for fuel pressure in kPa."
+ fp_press_type = "'Gauge' sensors are referenced to atmospheric pressure - with a vac referenced regulator, the reported pressure will drop under vacuum and increase under boost.\n'Differential' sensors are referenced to manifold vacuum/boost - this pressure will typically remain static e.g. 43psi, 3bar.\n'Absolute' sensors are referenced to true vaccum and will read about 14.7psi/1bar when there is no fuel pressure."
+ fueltemp1_corr = "Enables fuel correction based on fuel temperature."
+ fp_Kp = "Closed-loop Proportional term"
+ fp_Ki = "Closed-loop Integral term"
+ fp_Kd = "Closed-loop Differential term"
+
+ hpte_opt_on = "Allows richer mixture after prolonged high power operation to cool piston crown. The richer mixture is calculated by decreasing the AFR target using the number from the curve. The 'high power timer' counts up when above the load/rpm points and counts down below those points. The relevant enrichment is applied until the counter returns to zero."
+ hpte_load = "Only enable above this fuel-load."
+ hpte_rpm = "Only enable above this RPM."
+ shiftlight_opt_pins = "Allows a specific output to be used to switch a shift light. (Do not also enable the same output in the generic on/off outputs.)"
+ shiftlight_opt_gear = "Allows per-gear limits, can be useful to set a lower limit in lower gears to avoid overshooting."
+ shiftlight_limit1 = "Light is on above this RPM."
+ ltt_opt_on = "Enables the long-term fuel trim. This is intended to automatically make minor corrections in fuelling AFTER the engine is fully tuned. It requires EGO control to be enabled and operational."
+ ltt_opt_feedback = "Reports the total %change in 'sensor15' - mainly for testing."
+
+ ltt_samp_time = "How often (in seconds) the code checks the current EGO correction."
+ ltt_agg = "How softly the trim correction is applied."
+ ltt_opt_mode = "Timed - if needed, the trim table is automatically saved to flash\nButton - an external button is used to save the trim table to flash."
+ ltt_but_in = "User operated button to burn trim table from RAM to flash so it is used at next power-on."
+ ltt_int = "Minimum time between automatic burns to flash."
+ ltt_led_out = "LED output is illuminated when RAM trim table exceeds change threshold. The user can then choose to Burn to flash."
+ ltt_thresh = "If the sum of all changes exceeds this threshold than a burn to flash is requested - either automatically or by lighting the LED for user intervention. The purpose is to only make permanent changes if there was a widespread change."
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "How long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle does not leave PID running. Avoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ IdleCtl_vss = "Controls whether the VSS activates closed-loop idle."
+ idleminvss = "Closed-loop idle is disabled above this VSS."
+ pwmidle_tps_threshold = "The TPS value below which the other factors for entering closed-loop idle are considered."
+ pwmidle_rpmdot_threshold = "The value RPMdot must be below before closed-loop idle can be activated."
+ pwmidle_decelload_threshold = "The value load must be above before closed-loop idle can be activated."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_pwm = "Controls the frequency range allowed on the boost control output(s). Mid allows 12-1021 Hz. Slow allows 11.1-78Hz. Most installs use Slow."
+ boost_ctl_pwm_scale = "Frequencies available with Mid solenoid frequency range. Frequency is shared with other pins in the same PWM group\rPWM group A : High Current 1/2, InjI/J\rPWM group B : High Current Out 3, PWM Out 2, PWM / Idle Out 1, PWM Out 3"
+ boost_ctl_pins_pwm = "Output pins available when using the Mid frequency range."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range.\nThe 'Off' setting is only useful when using CAN broadcasting to send the turbo vane position."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_clt_threshold = "Coolant temperature must be above this value before boost control will work."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_flags = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_flags2 = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostKpa = "Maximum desired boost before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ tsw_pin_ob = "Allows an input pin to toggle maximum boost to an alternate value."
+ OverBoostKpa2 = "The alternate maximum desired boost before overboost protection cuts fuel/spark."
+; overboostcutx = "When using spark cut, controls the number of sparks to cut."
+; overboostcuty = "When using spark cut, controls the number of potential spark events from which to cut spark."
+ boost_feats_tsw = "Allow boost tables to be switched when an input is toggled on/off."
+ boost_gear_switch = "Selects which gear to switch tables on when gear-based boost table switching is enabled."
+ boost_feats_timed = "Launch control must be enabled to use this feature. Times the amount of boost from launch."
+ boost_feats_launch = "Allow a specific target (closed-loop) or duty (open loop) to be specified when launch control is active."
+ boost_launch_duty = "Duty to use when launch is active."
+ boost_launch_target = "Target to use when launch is active."
+ boost_vss = "Requires VSS to be enabled. Allows boost target to be controlled based on vehicle speed or detected gear."
+ boost_vss_tps = "TPS must be above this value for the VSS target boost to be used."
+ boost_geartarg1 = "Boost target for each gear.\n\nTo use these settings you need:\n Boost = On\nClosed-Loop Boost\nGear detection\n Boost vs speed/gear = Gear."
+ boost_ctl_settings_on2 = "Controls whether the second channel of boost control is enabled."
+ boost_ctl_pins_pwm2 = "Output for solenoid."
+ boost_ctl_pins2 = "Output for solenoid."
+ boost_ctl_closeduty2 = "The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty2 = "The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_lowerlimit2 = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl2 = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp2 = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki2 = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd2 = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_sensor2 = "MAP sensor input to monitor."
+
+ alternator_opt_mode = "Control mode for alternator.\nOff = disabled\nOn-Off = most basic control, typically on the 'L' lamp terminal\nOpen-loop frequency = Frequency applied sets target voltage (Ford)\nOpen-loop duty = Duty cycle applied sets target voltage (GM)\nClosed-loop field control = MS3 uses a closed-loop algorithm to control the alternator field to target a voltage (Chrysler)\nHigh-speed feedback field switching = MS3 monitors the voltage at 20kHz and switches the field on or off to match the monitored voltage to the target voltage. (99-05 Miata)"
+ alternator_ctl_ms = "How often to run the control calculations"
+ alternator_controlout = "Output connection to the alternator"
+ alternator_control_inv = "Whether a positive or negative active edge is used"
+ alternator_freq = "Frequency used for control output signal"
+ alternator_lampout = "Output for charge/warning light"
+ alternator_freq_currin = "PWM digital input used for monitoring battery current. (Display only.)"
+ alternator_diff = "Light warning lamp if actual voltage is too far away from target."
+ alternator_freq_monin = "PWM digital input from alternator as load sense - often the 'F' terminal."
+ alternator_freq_moninv = "Whether a positive or negative capture edge is used"
+ alternator_maxload = "Light warning lamp if sensed load is above this limit."
+ alternator_Kp = "Closed-loop Proportional term"
+ alternator_Ki = "Closed-loop Integral term"
+ alternator_Kd = "Closed-loop Differential term"
+ alternator_sensitivity = "Overall sensitivity"
+ alternator_freq_currinv = "Whether a positive or negative capture edge is used"
+ alternator_startdelay = "How long after start before alternator control is enabled. Allows engine to stabilise before alternator load is applied."
+ alternator_ramptime = "Time to ramp up to target voltage"
+ alternator_tempin = "If used, specifies a Generic Sensor that is configured for battery temperature. The temperature is then used to lookup a target charging voltage from the upper curve."
+ alternator_targv = "Target voltage when in 'Charge' mode"
+ alternator_chargetime = "How long after start is considered 'Charge' before transitioning to 'Run' mode."
+ alternator_targvr = "Target voltage during 'Run' mode."
+ alternator_wot = "TPS% to trigger Wide Open Throttle (WOT) mode"
+ alternator_wotv = "Target voltage when in WOT mode, typically set lower than normal to free up some engine power."
+ alternator_wottimeout = "Timeout before WOT mode ends and target voltage returns to charge or run mode."
+ alternator_overrv = "Target voltage when over-run fuel cut is active. Setting a slightly higher voltage here will give a minor 'regenerative braking' effect."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ vehigh = "The maximum for VE values."
+ wue_lpg = "For most installs, setting warmup enrichment (WUE) to below 100% indicates a serious tuning mistake and the code will flag up a 'Configuration Error' to alert the user. In rare conditions such as using LPG (propane) for fuel, it can be valid. This setting disables the Config Error warning message."
+ prefSpeedUnits = "Chooses the speed units - either Mile-per-hour or Kilometres-per-hour\nClose the page and re-open after changing."
+ prefLengthUnits = "Chooses the size units - either metres or inches\nClose the page and re-open after changing."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+ maxafr_opt1_on = "Enables the AFR safety system"
+ maxafr_opt1_led = "Sets an on/off warning output"
+ maxafr_opt1_load = "Selects the load axis on the AFR difference table"
+ maxafr_en_load = "Only check above this TPS/kPa"
+
+ maxafr_en_rpm = "Only check above this RPM"
+ maxafr_en_time = "Specifies a wait time before taking action, to prevent transients from tripping."
+ maxafr_spkcut_time = "Cuts spark as the first stage in the system for this long."
+ maxafr_ret_tps = "throttle is below this limit."
+ maxafr_ret_map = "Fuel and spark remain cut until MAP (boost) is below this limit."
+ maxafr_ret_rpm = "Fuel and spark remain cut until RPM is below this limit."
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ dlyct = "Sets the CPU hardware based noise filter. Typically a small number or zero."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ feature7_batchcrank = "Allows fuel to be fired on each tach event in a batch-fire mode on a sequential install. Can be useful in cold climates to allow large cranking fuel flow."
+ feature7_cranktaper = "Allows a taper curve on crank pulsewidth, either to reduce pulsewidth over time, or to allow an initial large shot of fuel."
+ feature7_crtpunits = "Selects units of ignition events or 0.1 seconds."
+ alternate_blend = "Enables a blend curve between cranking curves."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ feature3_aseunit = "Selects whether After Start Enrichment (ASE) uses Seconds or Ignition Events as the timer."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_auto = "Whether the system operates from a pushbutton or automatically."
+ shift_cut_fuel = "Whether to also cut fuel."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_gear = "Option to add additional spark cut time per gear."
+ shift_cut_add12 = "Additional time to cut spark for this shift."
+ shift_cut_add23 = "Additional time to cut spark for this shift."
+ shift_cut_add34 = "Additional time to cut spark for this shift."
+ shift_cut_add45 = "Additional time to cut spark for this shift."
+ shift_cut_add56 = "Additional time to cut spark for this shift."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+ shift_cut_rpm12 = "Shift at this rpm."
+ shift_cut_rpm23 = "Shift at this rpm."
+ shift_cut_rpm34 = "Shift at this rpm."
+ shift_cut_rpm45 = "Shift at this rpm."
+ shift_cut_rpm56 = "Shift at this rpm."
+
+ ac_idleup_settings = "Enables the A/C idle-up feature."
+ ac_idleup_settings_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Normal' settings should be used. In certain installations with appropriate wiring, the 'Inverted' setting can be required."
+ ac_idleup_io_out = "Output to engage compressor."
+ ac_idleup_io_in = "Switch input."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps= "Additional idle steps to add when A/C is active."
+ ac_idleup_cl_targetadder= "Bump up RPM by this much when A/C is active."
+ ac_idleup_cl_lockout_mapadder = "When A/C is active the engine load will increase. Set this number so that the additional load doesn't kick you out of closed-loop idle."
+ ac_idleup_tps_offpoint = "Disable A/C when TPS is above this. (Reduces load on engine when driver demands full power.)"
+ ac_idleup_tps_hyst = "Deadband in TPS to prevent bouncing on/off."
+ ac_idleup_vss_offpoint = "Disable A/C above this speed."
+ ac_idleup_vss_hyst = "Deadband in VSS to prevent bouncing on/off."
+ ac_idleup_max_rpm = "Maximum allowed RPM for AC."
+
+ idleadvance_on = "Enables Idle-advance feature"
+ idle_special_ops_timing_assist = "Enables additional advance curve linked to closed-loop idle target. This allows you to use timing control to assist with idle speed regulation."
+ idleveadv_to_pid_idleadv = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ idleve_on = "Enables Idle-VE feature"
+ idleveadv_to_pid_idleve = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleve_tps = "Only activate below this TPS."
+ idleve_rpm = "Only activate below this RPM."
+ idleve_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleve_clt = "Only activate above this coolant temperature. (Typically idle-VE does not work too well during warmup.)"
+ idleve_vsson = "Selects whether VSS1 must be zero before idle-VE is activated."
+ idleve_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level\nInternal: internal knock module."
+ knkport = "Input for knock on/off signal"
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied. When using the suggested Datalog/Tableswitch/Launch input pin set to 'None'"
+ knkport_an = "Input for knock analogue signal"
+ knk_option_wind = "Either read single analogue value at end knock window or peak detect."
+ knk_pin_out = "Optional digital output for knock window signal."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_step_adv = "The ignition advance step size after knock has stopped."
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+ knock_bpass = "This should be adjusted to suit the resonant frequency of you engine."
+ knock_int = "How long the signal is sampled for."
+ knock_conf_num = "How many knock sensors (1 or 2)"
+ knock_conf_launch = "Knock detection can be disabled when launch/flatshift are active to prevent false detection."
+ knock_conf_percyl = "Enables linking of knock signal to cylinder number. This only works if coil-on-plug or sequential fuel are enabled."
+ knock_conf_percylact = "Enables per-cylinder timing adjustment for knock.\nRequires a knock feedback system such as the internal one that reports knock per-cylinder."
+ knock_conf_debug = "Debug option to record per-cylinder knock retards into 'sensors' variables."
+ knock_gain01 = "Compensate for sensor sensitivity and distance between cylinder and sensor."
+ knock_sens01 = "Pick which sensor to use for each cylinder."
+ AE_options = "Selects between time-based accel enrichment or pump-style enrichment."
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value."
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ feature7_aeevents = "Length of enrichment pulse is measured in ignition events or seconds.\n(Primary and secondary fuel.)"
+ tpsasync_events = "Length of enrichment pulse."
+ tpsasync2_events = "Length of enrichment taper."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value."
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+
+ mapThresh2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ aeEndPW2 = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested.\n(Second fuel.)"
+ taeTime_events2 = "Length of enrichment pulse.\n(Second fuel.)"
+ aeTaperTime_events2 = "Length of enrichment taper.\n(Second fuel.)"
+ taeTime2 = "Length of main enrichment pulse.\n(Second fuel.)"
+ aeTaperTime2 = "Length of 'taper' time after main enrichment pulse.\n0 is suggested.\n(Second fuel.)"
+ tpsThresh2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ tdePct2 = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested.\n(Second fuel.)"
+ taeColdA2 = "At full cold (-40C/F), add this amount to the enrichment.\n(Second fuel.)"
+ taeColdM2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+
+ accel_mapdot_threshold = "Trigger enrichment above this MAPdot value."
+ accel_tpsdot_threshold = "Trigger enrichment above this TPSdot value."
+ accel_CLT_multiplier = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ accel_blend_percent = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+ accel_mapdot_threshold2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ accel_tpsdot_threshold2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ accel_CLT_multiplier2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ accel_blend_percent2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+ als_in_pin = "Enables the Anti-Lag system and selects the Enable input."
+ als_maxtps = "Disable ALS above this TPS%."
+ als_minrpm = "Disable ALS below this RPM."
+ als_maxrpm = "Disable ALS above this RPM."
+ als_maxmat = "Disable ALS above this manifold temperature."
+ als_maxtime = "Only allow ALS to be active for this long to reduce temperature build-up."
+ als_pausetime = "Enforce a minimum time between activations to reduce temperature build-up."
+ als_minclt = "Disable ALS below this coolant temperature."
+ als_maxclt = "Disable ALS above this coolant temperature."
+ als_opt_fc = "Whether cyclic fuel cut should be used. ONLY for use with sequential fuel."
+ als_opt_sc = "Whether cyclic spark cut should be used."
+ als_opt_ri = "Whether roving idle fuel cut should be used."
+ als_opt_idle = "Enables the idle valve in ALS mode."
+ als_iac_duty = "What valve duty should be used to give the extra air needed for ALS."
+ als_iac_steps = "What valve steps should be used to give the extra air needed for ALS."
+ als_out_pin = "Enables an additional output in ALS mode for extra-air valve."
+ als_opt_pwmout = "Enables an additional pulsed output in ALS mode."
+ als_pwm_opt2 = "Pulsed output."
+ als_pwm_duty = "Duty cycle on pulsed output when ALS is active."
+ als_pwm_opt_freq = "Frequency on pulsed output."
+
+ vvt_opt1_on = "Enables VVT control and selects number of cams to control."
+ vvt_opt1_filter = "Enables a filter on the VVT teeth to reject false triggers."
+ vvt_opt4_decode = "Enables a special decoder if applicable.\n\nThe BMW S54 decoder also supports S62. Wire main VVT outputs to opening solenoids 1, wire the complementary outputs to closing solenoids 2. Use 20Hz."
+ vvt_opt6_freq = "VVT solenoid PWM frequency."
+ vvt_opt2_pid2 = "Chooses between basic on/off mode or variable position control."
+ vvt_opt5_add1 = "Whether to adjust injection timing based on cam position and which cam."
+ vvt_opt5_add2 = "If injector timing is being adjusted, whether to adjust it based on target or actual current position."
+ vvt_onoff_ang = "Angle to advance injector timing by when VVT is active."
+ vvt_opt7_yaxis = "The load unit used for the Y-axis on the lookup tables."
+ vvt_opt1_int = "How often to run the calculations.\nSynced to cam is most typical meaning that the calculations are run as soon as new cam tooth passes the sensor."
+ vvt_ctl_ms = "Specifies a fixed calculation interval."
+ vvt_opt5_err = "Whether error checking should be applied to the measured cam angles."
+ vvt_opt1_tst = "Selects a cam output to test."
+ vvt_test_duty = "What duty cycle to output to the VVT solenoid."
+ vvt_opt2_use_hold_intake = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty = "Specific hold duty."
+ vvt_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt2_use_hold_exhaust = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty_exh = "Specific hold duty."
+ vvt_ctl_Kp_exh = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki_exh = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd_exh = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt1_dir_exhaust = "Whether the exhaust cam table is a table of advances (old method) or a table of retards (matches most exhaust VVTs.)"
+ vvt_opt3_cam1 = "Cam1 is always the main cam input."
+ vvt_opt2_cam1pol = "Cam1 capture polarity is defined on the Ignition Options page."
+ vvt_tth1 = "The number of teeth on the cam1 trigger wheel."
+ vvt_out1 = "VVT1 solenoid output"
+ vvt_min_ang1 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang1 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt1 = "Whether this is an intake or exhaust cam."
+ vvt_cam1tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam1tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out1_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam2 = "The input for cam2."
+ vvt_opt2_cam2pol = "The capture polarity for cam2.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth2 = "The number of teeth on the cam2 trigger wheel."
+ vvt_out2 = "VVT2 solenoid output"
+ vvt_min_ang2 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang2 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt2 = "Whether this is an intake or exhaust cam."
+ vvt_cam2tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam2tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out2_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam3 = "The input for cam3."
+ vvt_opt2_cam3pol = "The capture polarity for cam3.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth3 = "The number of teeth on the cam3 trigger wheel."
+ vvt_out3 = "VVT3 solenoid output"
+ vvt_min_ang3 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang3 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt3 = "Whether this is an intake or exhaust cam."
+ vvt_cam3tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam3tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out3_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam4 = "The input for cam4."
+ vvt_opt2_cam4pol = "The capture polarity for cam4.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth4 = "The number of teeth on the cam4 trigger wheel."
+ vvt_out4 = "VVT4 solenoid output"
+ vvt_min_ang4 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang4 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt4 = "Whether this is an intake or exhaust cam."
+ vvt_cam4tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam4tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out4_dir = "What direction the cam moves with output duty."
+ vvt_minclt = "VVT only operates when coolant is above this temperature."
+ vvt_minduty1 = "Minimum duty cycle for VVT solenoids"
+ vvt_maxduty1 = "Maximum duty cycle for VVT solenoids"
+ vvt_slew = "Limits rate of change of VVT target to minimise overshoot caused by rapid target changes or low oil pressure at low rpms.\nDefault is 2.0deg per cam event."
+ vvt_softout1 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout2 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout3 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout4 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+
+ f5_0_tsf = "Enables fuel table switching."
+ f5_0_tsf_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_f = "Table switch input."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "kPa threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching."
+ f5_0_tss_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_s = "Table switch input."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "kPa threshold."
+ tss_tps = "TPS threshold."
+ tsw_pin_rf = "Enables ReqFuel switch input."
+ ReqFuel_alt = "ReqFuel to use when switched."
+ tsw_pin_afr = "Enables AFR table switch input."
+ tsw_pin_stoich = "Enables Stoich switch input."
+ stoich_alt = "Stoich to use when switched."
+ dualfuel_sw_on = "Enables Dual Fuel support (e.g. LPG or secondary race fuel on a different system.)"
+ dualfuel_opt_mode = "Switching = swaps from fuel 1 to fuel 2.\nDual Table = parallel fuel tables allowing simultaneous control of both fuels. e.g. mapped methanol under boost.\nFlex Blend = ethanol %age from flex fuel sensor is used to blend between two sets of tables."
+ dualfuel_opt_out = "Shared outputs = used when two sets of injectors share one set of control wires from the ECU and have a relay to switch +12V.\nDifferent outputs = where each main and secondary injectors are wired to different outputs."
+ dualfuel_pin = "Input for Dual Fuel switching."
+ dualfuel_sw_fuel = "Whether to switch fuel tables."
+ dualfuel_sw_spk = "Whether to switch spark tables."
+ dualfuel_sw_afr = "Whether to switch AFR tables."
+ dualfuel_sw_rf = "Whether to switch ReqFuel."
+ dualfuel_sw_stoich = "Whether to switch Stoich."
+ dualfuel_sw_wue = "Whether to switch warmup curves."
+ dualfuel_sw_ase = "Whether to switch afterstart curves."
+ dualfuel_sw2_prime = "Whether to switch priming curves."
+ dualfuel_sw2_crank = "Whether to switch cranking pulse curves."
+ dualfuel_sw2_injp = "Whether to switch injector parameters."
+ dualfuel_sw2_smpw = "Whether to switch small pulsewidth curves."
+ dualfuel_sw2_ob = "Whether to switch overboost limits."
+ dualfuel_sw2_boosw = "Whether to switch boost tables."
+ dualfuel_sw2_ae = "Whether to switch accel enrich settings and curves."
+ dualfuel_opt_temp = "Enable secondary fuel temperature adjustment."
+ dualfuel_temp_sens = "Secondary fuel temperature input."
+ dualfuel_opt_press = "Enable secondary fuel pressure adjustment."
+ dualfuel_press_sens = "Secondary fuel pressure input."
+ dualfuel_press_type = "Sensor type: Gauge, Absolute, Differential"
+
+ vss_opt0_1 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss1_an = "Input for analogue 0-5V speed sensor."
+ vss1_an_max = "Speed at 5V input."
+ vss_opt1 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia1 = "Overall diameter of wheel and tyre."
+ vss1_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth1 = "Number of teeth on speed pickup reluctor."
+ vss1_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss1_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_2 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss2_an = "Input for analogue 0-5V speed sensor."
+ vss2_an_max = "Speed at 5V input."
+ vss_opt2 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia2 = "Overall diameter of wheel and tyre."
+ vss2_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth2 = "Number of teeth on speed pickup reluctor."
+ vss2_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss2_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_3 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss3_an = "Input for analogue 0-5V speed sensor."
+ vss_opt3 = "Selects digital pulse input or input via CAN from expansion board."
+ vss3_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss_opt0_4 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss4_an = "Input for analogue 0-5V speed sensor."
+ vss_opt4 = "Selects digital pulse input or input via CAN from expansion board."
+ vss4_pwmseq = "CAN PWM port for capturing from expansion board."
+ vssout_opt = "Digital pulsed output to drive a speedometer."
+ vssout_optunits = "Type of output conversion."
+ vssout_scale = "Scaling factor."
+ vssdot_int = "How often to calculate VSSdot (acceleration.)"
+ vssdotLF = "Smoothing factor on VSSdot. 100% = no smoothing, 15% = maximum smoothing."
+ fdratio1 = "Final drive gear ratio."
+ gear_method = "How to determine gear no.\nVSS/RPM - compares the vehicle speed with RPM and the gear ratio table.\nAnalogue - uses a 0-5V analogue gear-position-sensor input.\nCAN gear# - fetches a gear number from an expansion board over CAN."
+ gear_no = "How many gears."
+ gear1ratio = "Ratio of each gear."
+ gear_port_an = "Analogue input for gear-position-sensor."
+ gear0v = "Nominal voltage in each position."
+ vss_samp_int = "How often to sample/accumulate VSS teeth. Normally 50ms is ok and gives smoothing.\nHard accelerating vehicles will need to lower this number for improved zero-speed response."
+
+ ss_opt1 = "Selects digital pulse input."
+ reluctorteeth3 = "Number of pickup teeth on reluctor."
+ ss_opt1_spd = "Where possible, configures this as a high-speed input."
+ ss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ ss_opt2 = "Selects digital pulse input."
+ reluctorteeth4 = "Number of pickup teeth on reluctor."
+ ss_opt2_spd = "Where possible, configures this as a high-speed input."
+ ss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ accXport = "Analogue 0-5V input for X-axis."
+ accYport = "Analogue 0-5V input for Y-axis."
+ accZport = "Analogue 0-5V input for Z-axis."
+ accXcal1 = "Calibration value when X is -1g. See the manual."
+ accXcal2 = "Calibration value when X is +1g. See the manual."
+ accYcal1 = "Calibration value when Y is -1g. See the manual."
+ accYcal2 = "Calibration value when Y is +1g. See the manual."
+ accZcal1 = "Calibration value when Z is -1g. See the manual."
+ accZcal2 = "Calibration value when Z is +1g. See the manual."
+ accxyzLF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ log_style_on2 = "Enables SDcard datalogging.\nAlways - log always.\nButton - use a button to start and stop logs.\nTrigger - start logs when trigger condition is met."
+ log_style2_but = "Digital switch input."
+ log_style4_opt = "Type of trigger to start logging."
+ log_trig_rpm = "Start logging above this RPM."
+ log_trig_tps = "Start logging above this TPS or MAP kPa"
+ log_trig_map = "Start logging above this MAP"
+ sdpulse_out = "Typically used to synchronise a video camera recording, sends a low pulse at the start of a datalog."
+
+ log_style_led = "Output for LED or indicator lamp."
+ log_style_block = "Type of datalog to record.\n64byte = regular SDcard datalog.\n64byte+stream = datalog plus simulataneous audio soundtrack."
+ log_style2_samp = "Timed = suitable for all installs.\nCycle/tooth = for developer use."
+ log_int = "How often to record data.\nLower limit for most cards is 3ms."
+ log_length = "How long each datalog file should be. After this time a new logfile is started."
+ log_style3_adc = "Optional analogue (sound) stream input."
+ log_style_ledspd = "Unless advised otherwise, use 'Normal'"
+ log_style_gps = "Enables the recording of interleaved GPS data.\n\nRequires a CAN connected GPS module."
+
+ egt_num = "Number of EGT channels to enable."
+ egtcal_temp0 = "Temperature at 0V."
+ egtcal_tempmax = "Temperature at 5V - depends on interface design."
+ egt_conf_action = "EGT over-temperature reactions"
+ egt_warn = "Turn on warning output above this temperature."
+ egt_addfuel = "Bump up pulsewidth on over-temperature."
+ egt_conf_bank = "Most installs should use 'Both' Bank1,2 only apply to Staged primary and secondaries."
+ egt_conf_shutdown = "Enables engine shutdown if above max temperature or too long above warning limit."
+ egt_conf_percyl = "For sequential fuel ONLY, allows fuel to be added per cylinder.\nRequires that EGT1 = #1, EGT2 = #2 etc."
+ egt_time = "Shutdown if above warning temperature for this long."
+ egt_max = "Shutdown if temperature exceeds this maximum (even for a split second.)"
+ egt1port = "Analogue 0-5V input from thermocouple. (Note that an interface circuit is required.)"
+
+ sensor01_source = "Analogue 0-5V input."
+ sensor01Alias = "User defined name assigned to this sensor input. e.g. pre-intercooler air temperature."
+ sensor01_trans = "Type of transformation from raw input to useful numbers.\nRaw = raw 0-1023 ADC count\nLinear = useful for many ratiometric sensors with a linear scale.\nSame as XXX applies the same transform as other sensors on your ECU.\nGM calibration = same transform as GM air/coolant thermistor sensors."
+ sensor01_val0 = "The number you want to see when 0V is applied"
+ sensor01_max = "The number you want to see when 5V is applied"
+ sensor01LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ opt142_gs_share = "Normally each input can only be used by one feature. This setting allows inputs to be shared between generic sensors and other features. (Obviously you can still only connect one sensor to each input!)"
+ sensor_temp = "Selects degF/degC for temperature units when using CLT/MAT calibrations. This is set on the Generic Sensors page."
+
+ tc_opt_on = "Enables traction control"
+ tc_led_out = "Light output when traction is active."
+ tc_opt_method = "Traction control method:\nPerfect Run = a drag race strategy for a single pass comparing actual VSS against best possible.\nVSS %slip = compares VSS1 to VSS2 and detects slip%.\nPerfect Run RPM = similar to perfect run but without VSS for classes where that is not allowed.\nSwitch input = for use with an external slip detector."
+ tc_enin = "Optional digital switch input"
+ tc_mintps = "Only enable traction control above this TPS%"
+ tc_minmap = "Only enable traction control above this MAP"
+ tc_minvss = "Only enable traction control above this VSS"
+ tc_opt_slipcurve = "Whether to use a fixed slip% limit or an adjustable curve."
+ tc_slipthresh = "Fixed slip% limit."
+ tc_opt_n2o = "Only on/off control is presently supported."
+ tc_opt_bank = "Which bank of injectors to add fuel to.\nNormally select 'Both'\nWhen staging bank 1 = primary, bank 2 = secondary"
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_vss = "Enables wheel speed based launch instead of switch input. Select the wheel-speed sensor for a non-driven wheel."
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_opt_bank = "Allows fuelling to be changed while the launch limiter is on."
+ launch_addfuel = "The raw millisecond pulsewidth change to make (+/-)"
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ launchlimopt_adv = "Basic = limiter type is automatically set\nAdvanced = Choice of hard limiter type and spark cut zone.\n\nApplies to launch and flat-shift."
+ launchlimopt_cut = "Selects the spark cut limiter type.\nRandom Progressive = random cut that increases linearly across the spark cut zone.\nRandom Ramped = random cut that ramps up across the spark cut zone.\nFixed 5/7 = non-progressive rotational cut. 5 missed sparks, 2 actual sparks, repeat.\nFixed 4/5 = non-progressive rotational cut. 4 missed sparks, 1 actual spark, repeat."
+ launchvsstime = "Once you have been moving for this number of seconds, VSS based launch control is locked out until next stop.\nSet to zero to make it permanently active (no timeout.)"
+ launch_fcut_rpm = "During the flat-shift up-shift and the revs are falling, the fuel is cut off until the revs have fallen below this set point to reduce exhaust explosions."
+ launch_maxvss = "Prevents launch from activating once you are rolling."
+ launchvss_minvss = "Below this speed the wheel speed launch is re-armed.\n\nTypically set to a very low number."
+ launch_opt_vssgear = "Enables/disables checking of gear no.\n\n(Requires gear detection to be enabled.)"
+ launchvss_maxgear = "Wheel speed launch is applied up to this gear number.\n\ne.g. 2 means launch can be used in 1st and 2nd."
+ launchcutzone = "The RPM band below the hard limit where spark cutting begins.\nCan be set to 0 to apply spark cutting only at the hard limit when using the fixed limiter types.\nThe random cuts need an RPM band to operate across 200+ RPM suggested."
+ launchcuttiming = "The ignition timing during the cut zone and at the hard limit.\nOnly applies to launch - not flat-shift."
+ flats_minvss = "Prevents flat-shift from activating at low speeds e.g. just after launch"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+ launch_opt_retard = "Enables feature to feed in timing after launch."
+ launch_var_on = "Input for 0-5V potentiometer used to vary launch RPM."
+ launch_var_low = "With a 0V input, the launch hard limit is set to this RPM."
+ launch_var_up = "With a 5V input, the launch hard limit is set to this RPM."
+ launch_3step_in = "Input for 3-step switch. Could be used as burnout limiter."
+ launch_sft_deg3 = "The timing is retarded to this angle when the 3-step is on."
+ launch_hrd_lim3 = "Sets the hard limit RPM when the 3-step is on."
+ timedout1_in = "Input for transbrake button."
+ timedout1_out = "Output for transbrake solenoid."
+ timedout1_offdelay = "Delay between button release and transbrake release."
+ tcs_in = "Input for Turbo Staging control"
+ tcs_offtime = "How long to release trans-brake for on each move step. This should be set long enough to move the car a little without gaining any speed."
+ tcs_ontime = "How long the trans-brake should be re-activated for between each step. This should be set long enough to fully grab again."
+ tcs_moves = "How many moves (trans-brake release steps) on the first press of the button. Each subsequent press of the button gives a single move."
+ tstop_out = "Output for throttle-stop solenoid."
+ tstop_delay = "Delay after launch before solenoid is activated."
+ tstop_hold = "How long to keep solenoid on for."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt2_prog = "Selects between On/Off or Progressive control mode."
+ N2Oopt2_prog_time = "Chooses between Time, RPM or VSS as control factor."
+ N2Oopt2_prog_freq = "Selects solenoid frequency. Typically around 13Hz."
+ N2Oopt2_prog_freqf = "Allows a different fuel solenoid frequency if different fuel and nitrous outputs are used. Typically around 13Hz."
+ N2Oopt_4 = "Allows optional AFR safety system to use alternate AFR targets when nitrous is active."
+ N2Oopt_5 = "Allows nitrous stage 1 during launch (2-step)."
+ N2Olaunchmaxmap = "Maximimum MAP when nitrous is used during launch to build boost."
+ n2o1n_pins = "Output for stage 1 nitrous solenoid."
+ n2o1f_pins = "Output for stage 1 fuel solenoid."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a 12V signal.)"
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ n2o2n_pins = "Output for stage 2 nitrous solenoid."
+ n2o2f_pins = "Output for stage 2 fuel solenoid."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ water_freq_on = "Enables the feature."
+ water_pins_pump = "Output to pump relay."
+ water_freq_type = "'Off' - no valve output (used fixed nozzle)\n'Slow' - slow speed valve output with chosen PWM duty cycle\n'Fast' - valve switches at injector speed with chosen PWM duty cycle."
+ water_freq = "Valve operating frequency."
+ water_pins_valve = "Output for valve."
+ water_tps = "Only enable above this TPS%."
+ water_rpm = "Only enable above this RPM."
+ water_map = "Only enable above this MAP."
+ water_mat = "Only enable above this MAT."
+ water_pins_in_shut = "Allows a low fluid level sensor switch input.\n\nThe switch must be wired so that the input is grounded when the level is ok and no connection is made in low or fault conditions.\n\nIf fluid reserve is low when water injection is required, for safety the engine will be shutdown using the parameters in the AFR Safety System."
+
+ oilpress_in = "Sensor channel used for oil pressure input."
+ oilpress_out = "Output for warning lamp."
+
+ fp_drop_load = "Only check for low pressure above this engine load (e.g. MAP, TPS, MAFload)"
+ fp_drop_rpm = "Only check for low pressure above this RPM."
+ fp_drop_psig = "Allowed drop in pressure below target."
+ fp_drop_kpag = "Allowed drop in pressure below target."
+ fp_drop_time = "If fuel pressure stays too low for more than this time, the engine is shutdown using the AFR safety settings."
+
+ pwm_opt_on_a = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_a = "Output for relay/solenoid."
+ pwm_opt_freq_a = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_a = "Output is on when the table/curve is above this number."
+ pwm_offbelow_a = "Output is off when the table/curve is below this number."
+ pwm_opt_load_a = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_a = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_b = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_b = "Output for relay/solenoid."
+ pwm_opt_freq_b = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_b = "Output is on when the table/curve is above this number."
+ pwm_offbelow_b = "Output is off when the table/curve is below this number."
+ pwm_opt_load_b = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_b = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_c = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_c = "Output for relay/solenoid."
+ pwm_opt_freq_c = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_c = "Output is on when the table/curve is above this number."
+ pwm_offbelow_c = "Output is off when the table/curve is below this number."
+ pwm_opt_load_c = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_c = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_d = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_d = "Output for relay/solenoid."
+ pwm_opt_freq_d = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_d = "Output is on when the table/curve is above this number."
+ pwm_offbelow_d = "Output is off when the table/curve is below this number."
+ pwm_opt_load_d = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_d = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_e = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_e = "Output for relay/solenoid."
+ pwm_opt_freq_e = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_e = "Output is on when the table/curve is above this number."
+ pwm_offbelow_e = "Output is off when the table/curve is below this number."
+ pwm_opt_load_e = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_e = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_f = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_f = "Output for relay/solenoid."
+ pwm_opt_freq_f = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_f = "Output is on when the table/curve is above this number."
+ pwm_offbelow_f = "Output is off when the table/curve is below this number."
+ pwm_opt_load_f = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_f = "Chooses between a 3D mapped table or a 2D curve."
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll_id = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ canpwm_clk = "Clock frequency on expansion board. See documentation."
+ canpwm_pre = "Prescaler on expansion board. See documentation."
+ canpwm_div = "Divider on expansion board. See documentation."
+ enable_pollADC= "Enables capturing analogue inputs from expansion board."
+ canadc_opt1 = "Enables this group of analogue inputs."
+ canadc_id1 = "CANid of expansion board."
+ canadc_tab1 = "Table number on expansion board."
+ canadc_off1 = "Data offset on expansion board."
+ can_poll_id_ports = "CANid of expansion board for digital inputs/outputs."
+ poll_tableports = "Table number on expansion board."
+ enable_pollports_digin = "Enables using digital inputs from expansion board."
+ can_poll_digin_offset = "Data offset on expansion board."
+ enable_pollports_digout = "Enables using on/off outputs on expansion board."
+ can_poll_digout_offset = "Data offset on expansion board."
+ enable_pwmout = "Enables sending PWM/pulsed outputs to expansion board."
+ enable_pwmout255 = "Forces PWM duty cycle to 0-255 range.\ne.g. generic PWMs operate on a 0-100 scale, but your remote device might require a 0-255 scale."
+ can_pwmout_id = "CANid of expansion board."
+ can_pwmout_tab = "Table number on expansion board."
+ can_pwmout_offset = "Data offset on expansion board."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+ can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+
+ can_enable_on = "Master enable/disable for all CAN polling and broadcasting."
+ vss1_can_id = "CANid of expansion board."
+ vss1_can_table = "Table number on expansion board."
+ vss1_can_offset = "Data offset on expansion board."
+ vss1_can_size = "How the data is stored on the expansion board. See documentation."
+ vss2_can_offset = "Data offset on expansion board."
+ vss2_can_size = "How the data is stored on the expansion board. See documentation."
+ gear_can_offset = "Data offset on expansion board."
+ vss3_can_offset = "Data offset on expansion board. Uses same size as VSS1"
+ vss4_can_offset = "Data offset on expansion board. Uses same size as VSS2"
+
+ opt142_rtc = "Enables the built-in real time clock or selects a clock on an expansion board via CAN."
+ rtc_trim = "Applies a trim to correct for slow/fast running clock."
+ can_poll_id_rtc = "CANid of expansion board."
+ poll_table_rtc = "Table number on expansion board."
+ poll_offset_rtc = "Data offset on expansion board."
+
+ can_poll2_ego2 = "Enables collecting EGO/AFR from innovate widebands on expansion board."
+ can_poll2_egolag = "Enables or disables the 'lag factor' smoothing for EGO data collected from a CAN device. Typically set to Off."
+ can_ego_id = "CANid of expansion board."
+ can_ego_table = "Table number on expansion board."
+ can_ego_offset = "Data offset on expansion board."
+ can_poll2_gps = "Whether to enable CAN polling for GPS data."
+ can_gps_id = "CANid of expansion board."
+ can_gps_table = "Table number on expansion board."
+ can_gps_offset = "Data offset on expansion board."
+ can_poll2_vss = "How VSS data is captured:\nPoll = use polling\nListen = CAN receiving will be configured to listen for messages."
+
+ cel_opt_on = "Enables sensor checking feature."
+ cel_port = "Output for warning lamp.\nIt is STRONGLY SUGGESTED that a lamp be connected when the CEL feature is used."
+ cel_opt_flash = "Selects whether CEL lights up solidly or flashes codes to aid diagnostics.\n\nNumber of flashes and fault:\n2=MAP 3=MAT 4=CLT 5=TPS 6=BATT 7=AFR0 8=SYNC 9=EGT 10=FLEX 11=MAF 12=KNOCK 13=CAM 14=OIL 15=FUELPRESS 16=EGTSHUT 17=AFRSHUT"
+ cel_opt_when = "Do you want the light on when the engine is off?"
+ cel_runtime = "Period after-start before sensors are checked."
+ cel_opt2_map = "Enables checking of the MAP sensor."
+ map_minadc = "Minimum raw ADC 0-1023 input allowed."
+ map_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ map_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ map_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_mat = "Enables checking of the MAT sensor."
+ mat_minadc = "Minimum raw ADC 0-1023 input allowed."
+ mat_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ mat_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_clt = "Enables checking of the CLT sensor."
+ clt_minadc = "Minimum raw ADC 0-1023 input allowed."
+ clt_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ clt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_tps = "Enables checking of the TP sensor."
+ tps_minadc = "Minimum raw ADC 0-1023 input allowed."
+ tps_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ tps_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+
+ cel_opt2_batt = "Enables checking of the battery voltage input."
+ batt_minv = "Minimum voltage allowed."
+ batt_maxv = "Maximum voltage allowed."
+ batt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_afr0 = "Enables checking of the EGO/AFR input."
+ afr_min = "Minimum AFR allowed."
+ afr_max = "Maximum AFR allowed."
+ afr_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ afr_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_sync = "Enables checking for sync-losses."
+ cel_synctol = "Set CEL above this many sync-losses."
+ cel_opt2_egt = "Enables checking of the EGT input."
+ egt_minvalid = "Minimum EGT allowed."
+ egt_maxvalid = "Maximum EGT allowed."
+ egt_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ egt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt3_flex = "Enables checking of the Flex-fuel sensor input."
+ cel_opt_adc = "Sets gauge 'status5' to record 'fluctuations' number or raw ADC count for the chosen sensor input."
+ cel_opt_stat = "Selects input for 'status5' value. Observe the dash gauge and examine datalogs to determine sensible min/max fluctuation limits and ADC counts for each sensor input in turn."
+ cel_action1_map = "Whether an invalid MAP reading will trigger limp mode."
+ cel_action1_map_an = "Whether an invalid MAP reading will enable the fallback MAP table."
+
+ cel_action1_mat = "Whether an invalid MAT reading will trigger limp mode."
+ cel_mat_default = "If MAT fails, assume MAT is this temperature."
+ cel_action1_clt = "Whether an invalid CLT reading will trigger limp mode."
+ cel_clt_cold = "If CLT fails, start engine using this assumed temperature."
+ cel_clt_warm = "If CLT fails, assume this is the warmed up engine temperature."
+ cel_warmtime = "If CLT fails, assume engine takes this long to warmup."
+ cel_action1_tps = "Whether an invalid TPS reading will trigger limp mode."
+ cel_action1_batt = "Whether an invalid battery voltage reading will trigger limp mode."
+ cel_action1_ego = "Whether an invalid AFR/EGO reading will trigger limp mode."
+ cel_action2_flex = "Whether an invalid Flex-fuel reading will trigger limp mode."
+ cel_action2_egt = "Whether an invalid EGT reading will trigger limp mode."
+ cel_revlim = "Rev limiter when in limp mode."
+ cel_overboost = "Maximum boost when in limp mode. Typically 102kPa for no boost."
+ cel_boost_duty = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_boost_duty2 = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_retard = "Retard timing by this amount when in limp mode."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Whether to test a single coil output or operate in sequence."
+ testsel_coil = "Whether to test a single coil output or operate in sequence."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Whether to test a single injector output or operate in sequence."
+ testsel_inj = "Whether to test a single injector output or operate in sequence."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ feature3_pw4x = "Only used on low-revving large engines for extra-long pulsewidths. MUST also set PW4X in Project Properties."
+ feature3_n2oin = "Normally this should be on so that the input responds to a +12V signal."
+
+ fuelcalctime = "How often to perform fuel consumption calculations."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+;curves help text
+ oil_press_min = "For each RPM setting, set the min and max oil pressures allowed at that RPM.\nOutside of the limits the warning light will be illuminated.\nIt is suggested that the first row be 0 RPM. Set the Min and Max limits above 0 so that the oil warning light is tested on each start."
+ hpte_afrs = "The curve specifies AFR decrease (richer) vs. time.\nIt is normal for the first row to be 0, 0.\nThe second row typically specifies when the enrichment should begin. e.g. 7, 0. This means that there is no change from 0-7 seconds as both are set to a 0 decrease in AFR.\nThe third row onwards specify the richening."
+ fp_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ fp_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ dualfuel_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ dualfuel_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ fpd_duty = "The values in the table specify the duty cycle percent of the control output to the pump or controller based on the RPM/load axes."
+ alt_dutyout = "This allows for non-linear control within alternators. It also allows you to restrict the output duty range."
+ alternator_targvolts = "Specifies the target charge voltage related to the battery temperature.\nOnly works if you have a battery temperature sensor."
+ alternator_dutyv = "Specifies the control duty to achieve the desired voltage."
+ alternator_freqv = "Specifies the control frequency to achieve the desired voltage."
+ pwm_duties_a = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_b = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_c = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_d = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_e = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_f = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_yaxis_a = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_b = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_c = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_d = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_e = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_f = "Specifies the output duty or frequency based on the input 'load' value."
+ tcslipy = "Sets the desired slip% threshold at different knob settings 0-100%"
+ tc_knob = "This enables a link to a Generic Sensor input to enable you to set the slip threshold. Configure the Generic Sensor to give 0-100 as the linear output."
+ blendy1 = "Sets a percentage blend from VE1 (0%) to VE2 (100%) based on the input X axis value."
+ blendy2 = "Sets a percentage blend from Spk1 (0%) to Spk2 (100%) based on the input X axis value."
+ blendy3 = "Sets a percentage blend from the combined VE1+2 (0%) to VE3+4 (100%) based on the input X axis value."
+ blendy4 = "Sets a percentage blend from the combined Spk1+2 (0%) to Spk3+4 (100%) based on the input X axis value."
+ blendy5 = "Sets a percentage blend from AFR1 (0%) to AFR2 (100%) based on the input X axis value."
+ blendy6 = "Sets a percentage blend from Boost1 (0%) to Boost2 (100%) based on the input X axis value."
+ blendy7 = "Sets a percentage blend from Cranking Pulse1 (0%) to Cranking Pulse2 (100%) based on the input X axis value."
+ blendy8 = "Sets a percentage blend from Tables1 (0%) to Tables2 (100%) based on the Flex fuel percentage value.\ne.g. set 0% table for 10% flex and 100% table for 85% flex."
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ launch_retard = "The curve sets the degrees of ignition subtracted from the normal timing (i.e. retarding it) against time after launch.\nThis can be used to launch at higher RPMs without blowing the tyres away and then feeding the timing back in.\nBe sure to end the curve with zero degrees of retard to use normal timing for the rest of the run."
+ cl_idle_timing_advance_deltas = "Uses timing to assist closed-loop idle control.\nThe X axis of the curve is RPMs +/- the target. i.e. if the target was 800, then -75 in the curve means 800-75 = 725RPM\nThe Y axis of the curve is timing +/-. i.e. + means add timing, - means subtract timing.\nTypically, use positive (advanced) timing when RPMs are below target and negative (retarded) timing when RPMs are above target."
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ accel_mapdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ accel_tpsdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ maeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ taeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_mapdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_tpsdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ knock_starts = "Set the crank angle (for each cylinder) when the knock system starts 'listening' for knock.\nKnock usually occurs in the time after TDC."
+ knock_durations = "Set the number of crank degrees that the knock system 'listens' for knock."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ knock_upscale = "Allows the threshold to be scaled up on a cold engine. Frequently a cold engine is noiser and may cause false alarms without a raised threshold."
+ tc_perfect_vss = "The perfect run traction control sets a curve of the 'best' speed (VSS) that you can run for each time-point after launch.\nIf your VSS is reporting a higher number than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy is typically applied early in a run only.\nNote that VSS based traction control is outlawed in some race classes."
+ tc_perfect_rpm = "The perfect run traction control sets a curve of the 'best' RPM that you can run for each time-point after launch.\nIf your RPM is higher than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy only makes sense in first gear. Set the final row in the table to just earlier than the time when you expect to shift with an RPM higher than your maximum RPM."
+ tc_retard = "Sets the number of degrees of timing retard to apply based on the amount of wheelspin multiplied by how long."
+ tc_spkcut = "Sets the amount of spark cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_nitrous = "Sets the amount of nitrous cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_boost = "Sets the amount to reduce the boost target by based on the amount of wheelspin multiplied by how long."
+ tc_boost_duty_delta = "Sets the amount to change the boost duty by based on the amount of wheelspin multiplied by how long."
+ tc_addfuel = "Sets the amount of fuel to add based on the amount of wheelspin multiplied by how long."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ primePWTable2 = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ crankPctTable2 = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ asePctTable2 = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ aseCntTable2 = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ wueBins2 = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ dwellrpm_dwell = "For Saab Trionic ignition, this allows the dwell time to be varied with RPM."
+ boostvss_duty = "For open-loop boost control, this specifies a solenoid duty based on the wheel speed on VSS1 or VSS2."
+ boostvss_target = "For closed-loop boost control, this specifies a target boost level based on the wheel speed on VSS1 or VSS2.\nThis can be used to limit boost in lower gears to reduce the change of wheelspin or loss of control."
+ n2o1_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o2_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o1_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o2_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o1_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ n2o2_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ smallpw0 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw1 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw2 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw3 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ opentimepct0 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct1 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct2 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct3 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ boost_timed_pct = "Allows boost to be feathered in after launching.\n100% means use normal boost settings."
+ map_sample_timing = "When timed MAP sampling is enabled, this specifies the angle BTDC for each cylinder when MAP sampling should begin.\nExperimentation and use of the Diagnostics-MAP logger will be required to determine the best settings."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC2 = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC2 = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ XAcc = "This is the percentage of the fuel (0-100%) that goes into the wall puddle while accelerating (fuel pulse width increasing), with the remainder of the squirt going directly into the cylinder to be burned."
+ XDec = "This is the percentage of fuel (0-100%) going into the wall puddle while decelerating (fuel pulse width decreasing),"
+ TauAcc = "This is the time factor vs. RPM used during acceleration."
+ TauDec = "This is the time factor vs. RPM used during deceleration."
+ XClt = "Coolant temperature (CLT) correction to the puddling factor X."
+ TauClt = "Coolant temperature (CLT) correction to the time factor Tau."
+ MapThreshXTD = "X-Tau accel tables are used when MAPdot is positive or less negative than this start transition threshold. In-between a blend is used."
+ MapThreshXTD2 = "X-Tau Decel tables are used when MAPdot is more negative than this finish transition threshold. In-between a blend is used."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load when Idle-Advance is active. Typically the curve will ramp from low advance at low load to more advance at higher loads to stabilise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_mappoint = "Above this MAP value, tuning switches from MAP based to TPS based. Default is 90% and works for most engines."
+ ITB_load_idletpsthresh = "A minimum TPS value that must be met to allow the switch to TPS based tuning to occur. This is sometimes useful in idle tuning."
+; tables
+ ego_auth_table = "Specifies the EGO authority limit across the range of engine operation condition. Setting zero means there will be no change in fuel based on the lambda sensor i.e. open-loop mode. "
+ ltt_table1 = "This read-only table shows the long-term-terim values the ECU has calculated based on lambda sensor feedback."
+ alphaMAPtable = "The best-guess MAP value from an alpha-N (TPS vs. RPM) lookup table. This is primarily used as a fallback in case of MAP sensor failure."
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ vvt_timing1 = "Desired VVT (relative) timing vs RPM/load"
+ vvt_timing2 = "Desired VVT (relative) timing vs RPM/load"
+ als_rifuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag idle mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_fuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_sparkcut = "The spark-cut percentage vs. RPM/load when in anti-lag mode.\nThis drops sparks in a round-robin manner."
+ als_timing = "The ignition advance vs. RPM/load when in anti-lag mode.\nTypically this will be -20 to -50 for ATDC timing."
+ als_addfuel = "The percentage of fuel to be added vs. RPM/load when in anti-lag mode."
+ waterinj_duty = "The duty cycle of the output vs RPM/load"
+ maxafr1_diff = "The maximum AFR difference allowed on the leaner side. This compares the AFR target table and the wideband lambda sensor reading.\nTypically a larger allowance is allowed under low load and low RPMs. High load and into boost require tight control to guard against engine-damaging lean conditions."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate main fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable4 = "The alternate secondary fuel table (4). Can be used as a blended and switched table from no.1+2. Larger VE values mean more fuel, smaller mean less fuel."
+ idleve_table1 = "Sets the VE values when 'idle-VE' is active."
+ idleve_table2 = "Sets the VE values when 'idle-VE' is active."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate main ignition advance table (3). Can be used as a switched table from no.1"
+ advanceTable4 = "The alternate secondary ignition advance table (4). Can be used as a blended and switched table from no.1+2."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ boost_ctl_pwm_targets2 = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_cl_pwm_targs2 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_load_targets2 = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ inj_trima = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimb = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimc = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimd = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trime = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimf = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimg = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimh = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimi = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimj = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimk = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_triml = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimm = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimn = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimo = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimp = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_timing = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ inj_timing_sec = "The injector timing (for secondary staged injectors) in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ spk_trima = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimb = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimc = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimd = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trime = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimf = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimg = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimh = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimi = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimj = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimk = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_triml = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimm = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimn = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimo = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimp = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ narrowband_tgts = "The target narrowband lamba sensor voltage vs. load/RPM"
+ vsslaunch_rpm = "RPM specifies the hard limiter RPM for given wheel speed.\nRetard is the retard to ignition advance for given wheel speed.\nWhen wheel speed exceeds maximum speed on curve, the launch control is disabled until speed drops below the re-arm setting."
+ fuelcut_fuelon_upper_rpmdot = "When revs are falling more quickly than this RPMdot value the initial RPM is used for fuel return.\nIn-between upper and lower RPMdot values, the return RPM is interpolated. This number must be larger than the 'lower' RPMdot setting.\nTypically 1000."
+ fuelcut_fuelon_lower_rpmdot = "When revs are falling more slowly than this RPMdot value the lower RPM is used for fuel return. This will happen when coasting down.\nIf revs are falling more quickly then any return transitions will be cancelled and the return RPM will be raised.\n\nSet this so that clutch-in during fuel cut does not stall.\nTypically 500.\n\n(The RPMdot shows negative in datalogs when revs are falling, so a setting of 500 means less negative than -500)"
+ egoAlgorithm_delay_table = "Specifies whether to use IGN events or delay table to determine how often EGO runs"
+ ego_delay_table = "Table which specifies the delay between runs of the EGO algorithm in ms"
+ ego_delay_rpms = "RPM (x) axis of the EGO delay table."
+ ego_delay_loads = "Load (y) axis of the EGO delay table."
+ ego_sensor_delay = "Static value representing O2 sensor response time"
+ generic_pid_flags_a_on = "Generic Closed-Loop channel A on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_a_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_a_direction = "Output polarity for PID output"
+ generic_pid_flags_a_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_a_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_flags_b_on = "Generic Closed-Loop channel B on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_b_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_b_direction = "Output polarity for output"
+ generic_pid_flags_b_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_b_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_pwm_opts_freq_a = "Frequency to use for PWM output"
+ generic_pid_pwm_opts_freq_b = "Frequency to use for PWM output"
+ generic_pid_pwm_outs_a = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_pwm_outs_b = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_upper_inputlim_a = "Maximum value for feedback input (PV)"
+ generic_pid_upper_inputlim_b = "Maximum value for feedback input (PV)"
+ generic_pid_lower_inputlim_a = "Minimum value for feedback input (PV)"
+ generic_pid_lower_inputlim_b = "Minimum value for feedback input (PV)"
+ generic_pid_output_upperlim_a = "Maximum output duty"
+ generic_pid_output_upperlim_b = "Maximum output duty"
+ generic_pid_output_lowerlim_a = "Minimum output duty"
+ generic_pid_output_lowerlim_b = "Minimum output duty"
+ generic_pid_rpms_a = "RPM axis bins for lookup table"
+ generic_pid_rpms_b = "RPM axis bins for lookup table"
+ generic_pid_loadvals_a = "Load axis bins for lookup table"
+ generic_pid_loadvals_b = "Load axis bins for lookup table"
+ generic_pid_targets_a = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_targets_b = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_control_interval_a = "Time in milliseconds between each run of PID control loop"
+ generic_pid_control_interval_b = "Time in milliseconds between each run of PID control loop"
+ generic_pid_P_a = "Proportional gain"
+ generic_pid_P_b = "Proportional gain"
+ generic_pid_I_a = "Integral gain"
+ generic_pid_I_b = "Integral gain"
+ generic_pid_D_a = "Derivative gain"
+ generic_pid_D_b = "Derivative gain"
+ generic_pid_load_offset_a = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_a = "Variable used as feedback input (PV)"
+ generic_pid_load_offset_b = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_b = "Variable used as feedback input (PV)"
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+
+ dwell_table_values = "Specifies the base dwell time in milliseconds based on RPM/load.\nThis can be used to reduce dwell where possible to increase spark-plug life.\nAreas in the tune of very rich or very dilute mixture will need most spark energy.\n(Battery voltage correction is applied afterwards.)"
+ spkadj_max = "Sets a limit on the maximum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a positive number, meaning advance."
+ spkadj_min = "Sets a limit on the minimum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a negative number, meaning retard."
+
+ cranktaper_pct = "Allows cranking fuel to be tapered down during extended cranking to reduce flooding.\n100% means normal cranking pulsewidth."
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ scatterRuntimeEnabled = "On = Enables a faster method of collecting realtime data from MS3. Off = use previous slower method for realtime data."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp16 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp32 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp48 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ can_rcv_id1 = "11bit CAN identifier to listen for. (See also Offset)"
+ can_rcv_var1 = "Megasquirt variable to store resulting data to.\nThis can then be used by other subsystems."
+ can_rcv_off1 = "Offset of data within each 8-byte CAN message.\nFor systems sending sequential messages, you need to calculate the actual identifier and offset.\ne.g. Take the offset and divide by 8. e.g. offset = 19. Divide by 8 gives 2 remainder 3. Add 2 to the identifier and the offset is 3."
+ can_rcv_size1 = "Endianism, data size and sign.\nB = Big endian\n (Motorola, high byte first)\nL = Little endian\n (Intel, low byte first)\n# = # bytes\nU = Unsigned\nS = Signed"
+ can_rcv_mult1 = "Result = ((raw_data * mult) / divide) + add"
+ pwm_opt_load_a_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_b_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_c_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_d_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_e_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_f_offset = "This selects the 'load' axis on the table or curve."
+ iobox_opta1 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id1 = "Base CAN identifier used by IO-box."
+ iobox_optb1vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta1adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta1canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta1canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta1canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb1tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb1inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb1outrate = "Rate to send outputs to IO-box."
+ iobox_opta2 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id2 = "Base CAN identifier used by IO-box."
+ iobox_optb2vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta2adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta2canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta2canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta2canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb2tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb2inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb2outrate = "Rate to send outputs to IO-box."
+ iobox_opta3 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id3 = "Base CAN identifier used by IO-box."
+ iobox_optb3vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta3adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta3canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta3canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta3canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb3tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb3inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb3outrate = "Rate to send outputs to IO-box."
+ iobox_opta4 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id4 = "Base CAN identifier used by IO-box."
+ iobox_optb4vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta4adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta4canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta4canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta4canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb4tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb4inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb4outrate = "Rate to send outputs to IO-box."
+ pitlim_opt_on = "Enables Pit Lane Limiter"
+ pitlim_opt_mode = "Fixed = one fixed limiter speed\nHolding = takes speed when button pressed as limiter and holds it."
+ pitlim_opt_retard = "Whether to use spark retard."
+ pitlim_opt_spkcut = "Whether to use spark cut. (Can cause backfires and exhaust damage.)"
+ pitlim_opt_fuelcut = "Whether to use fuel cut."
+ pitlim_opt_fuelprog = "Whether to use a progressive fuel cut (sequential only.)"
+ pitlim_opt_vssrpm = "Whether VSS or RPM is used as the hold target."
+ pitlim_enin = "Switch input."
+ pitlim_speed = "Fixed speed limit."
+ pitlim_retardmax = "Maximum allowed spark retard."
+ pitlim_sensitivity = "Adjust tracking sensitivity to adjust limiter window. Initially the 0% fuel/spark cut is applied at the limit and full cut is applied at the limit+range. If the speed is above the limit, the lower limiting point is lowered slowly."
+ pitlim_speed_range = "Control range of speed to apply limiters across. 5mph recommended as a starting point. Setting the range too small will cause oscillation."
+ pitlim_rpm_range = "Control range of RPM to apply limiters across. Setting the range too small will cause oscillation."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+ llstg_in = "The ground-switch button input to arm the line-lock staging system."
+ llstg_out = "The relay output to control the line-lock."
+ can_bcast_user_id = "Decimal message identifier to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+ u08_debug38_1 = "This enables an experimental feature to record engine trigger times to sensors9-16 to monitor per-cylinder effort. Only for developers."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = shiftlight, "Shift Light"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = fan_control, "Fan Control"
+ subMenu = tcluparams, "Torque Convertor Lockup"
+ subMenu = alternator, "Alternator Control"
+ subMenu = std_separator
+ subMenu = barometerCorr, "Barometric Correction",0, {baroCorr}
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable, "MAF Flow Curve", 0, {!feature7_mafcalib}
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {feature7_mafmat && ((algorithm == 5) || (algorithm2 == 4) || (algorithm2 == 5))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = iopinlist, "Feature List Showing I/O pins"
+ subMenu = pinusage, "I/O pins List Showing Usage"
+ subMenu = pinusagecan, "Expansion I/O pins List/Usage"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injsettings, "Injector Dead-Time/PWM"
+ subMenu = smallpw, "Injector Small Pulsewidths"
+ subMenu = inj_timing_tbl, "Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_tbl, "Secondary Injector Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "AFR/&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { (!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr) || ( N2Oopt_2 && N2Oopt_4) }
+ subMenu = ego_auth_Tbl, "EGO Authority Table", 0, {egoType && egoAlgorithm_auth }
+ subMenu = ego_delay_Tbl, "EGO Delay Table", 0, {egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ subMenu = narrowband_tgts_tbl, "Narrowband EGO targets", 0, { egoType == 1 }
+ subMenu = maxafr, "AFR safety system"
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { (algorithm2 != 0) }
+ subMenu = veTable3Tbl, "Fuel VE Table 3", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = veTable4Tbl, "Fuel VE Table 4", 0, { (algorithm2 != 0) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = std_separator
+ subMenu = inj_trimad, "Cyl 1-4 Trims", 7, { hardware_fuel && sequential_trim_on_off }
+ subMenu = inj_trimeh, "Cyl 5-8 Trims", 7, { hardware_fuel && (nInjectors > 4) && sequential_trim_on_off }
+
+ subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { sequential == 0 }
+ subMenu = std_separator
+ subMenu = fuelpump, "Fuel Pump and Pressure"
+ subMenu = fp_temp_curve, "Temperature Adjustment", 0, {fueltemp1 && fueltemp1_corr}
+ subMenu = fp_press_curve, "Pressure Adjustment", 0, {(fp_opt_mode != 2) && fp_press_in && (fp_opt_reg == 2)}
+ subMenu = fp_safety, "Fuel Pressure Safety", 0, {fp_press_in}
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options/Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = dwellrpm_curve, "Dwell vs RPM", 0, {spk_mode0 > 1 && dwellmode == 2 && spk_conf2_dwell}
+ subMenu = dwell_tbl, "Dwell Table", 0, {(spk_mode0 > 1) && (dwellmode == 0) && spk_conf2_dwelltbl}
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = noisefiltering2, "Noise Filtering", 0
+ subMenu = std_separator
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = knockSettings4, "Knock Sensor Parameters", 0, {knk_option && (knk_option_an == 3)}
+ subMenu = knockSettings2, "Knock Window Settings", 0, {knk_option}
+ subMenu = knockupscale_curve, "Knock Coolant Scaling", 0, {knk_option}
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, { (spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk) }
+ subMenu = ignitionTbl4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = spk_trimad, "Cyl 1-4 Trims", 8, { spk_mode3_trim }
+ subMenu = spk_trimeh, "Cyl 5-8 Trims", 8, { spk_mode3_trim && (nCylinders > 4)}
+ subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)}
+
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking/Startup Settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse", 0
+ subMenu = cranktaper_curvet, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 0}
+ subMenu = cranktaper_curvee, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 1}
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = primingPW2, "Priming Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_prime) }
+ subMenu = crankingPW2, "Cranking Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_crank) || alternate_blend }
+ subMenu = nestedasePct2, "AfterStart Enrichment (ASE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = aseTaper2, "AfterStart Enrichment (ASE) Taper 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = nestedwarmup_curve2, "Warmup Enrichment (WUE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_wue) }
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {IdleCtl && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target Curve", 0, { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up", 0
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = cl_idle_timing_curve, "Idle RPM Timing Correction Curve", 0, { idle_special_ops_timing_assist }
+ subMenu = idleVe, "Idle VE Settings"
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel",0, { !(AE_options & 0x1) }
+ subMenu = AEpump_settings, "Accel-Pump Accel Enrichment Settings",0, { AE_options & 0x1 }
+ subMenu = AEtime_settings2, "Time-Based Accel 2",0, { !(AE_options & 0x1) && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = AEpump_settings2, "Accel-Pump Accel Enrichment Settings 2",0, { AE_options & 0x1 && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = tpswot_curve, "TPS WOT Curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEcombi1, "EAE Sucked/Adhered Coefficients", 0, { EAEOption == 1 }
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = std_separator
+ subMenu = XAccTable, "Puddling Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XDecTable, "Puddling Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauAccTable, "Time Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauDecTable, "Time Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { EAEOption == 4 }
+ subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { EAEOption == 4 }
+
+ menu = "Boost/VVT"
+ subMenu = boost, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl)}
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Bias Duty Table 1", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boost_timed_curve, "Boost Delay (Timed From Launch)",0, { boost_ctl_settings_on && launch_opt_on && boost_feats_timed }
+ subMenu = boostvss_curve, "Boost Control vs Speed", 0, { (boost_ctl_settings_on) && ((boost_vss == 1) || (boost_vss == 2))}
+ subMenu = std_separator
+ subMenu = boostctlSettings2, "Boost Control Settings 2", 0 , {boost_ctl_settings_on}
+ subMenu = boostctlDutys2, "Boost Control Duty Table 2", 0, { boost_ctl_settings_on && (((!boost_ctl_settings_cl) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && !boost_ctl_settings_cl2)) }
+ subMenu = boostctlTargs2, "Boost Control Target Table 2", 0, { boost_ctl_settings_on && ((boost_ctl_settings_cl && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && boost_ctl_settings_cl2)) }
+ subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 }
+ subMenu = std_separator
+ subMenu = antilag, "Turbo Anti-lag (ALS)"
+ subMenu = antilagtables, "Turbo Anti-lag Tables", 0, {als_in_pin}
+ subMenu = als_rifuelcut_tbl, "Turbo Anti-lag Roving Idle", 0, {als_in_pin && als_opt_ri && hardware_fuel && sequential}
+ subMenu = std_separator
+ subMenu = vvtparams, "VVT Settings"
+ subMenu = vvt_timing1_tbl, "VVT Intake Table", 0, {vvt_opt1_on && vvt_opt2_pid2}
+ subMenu = vvt_timing2_tbl, "VVT Exhaust Table", 0, {vvt_opt1_on && vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2)}
+ subMenu = pwm_duties_Tbl_vvt, "VVT On/Off Table", 0, {vvt_opt1_on && !vvt_opt2_pid2}
+
+ menu = "Table choices"
+ subMenu = tablesw, "Table Switch/Dual Fuel"
+ subMenu = dualfuel_temp_curve, "Temperature Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_temp) }
+ subMenu = dualfuel_press_curve, "Pressure Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_press) }
+ subMenu = injsettings2, "Alt. Injector Dead-time 2", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+ subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+ subMenu = std_separator
+ subMenu = blend1menu, "Blend Curve (1) VE1->2", 0, {algorithm2 && (loadCombine == 2)}
+ subMenu = blend2menu, "Blend Curve (2) Spk1->2", 0, {IgnAlgorithm2 && (loadCombineign == 1)}
+ subMenu = blend3menu, "Blend Curve (3) VE1+2->3+4", 0, {f5_0_tsf && (f5_0_tsf_opt == 0) && (tsw_pin_f == 14)}
+ subMenu = blend4menu, "Blend Curve (4) Spk1+2->3+4", 0, {f5_0_tss && (f5_0_tss_opt == 0) && (tsw_pin_s == 14)}
+ subMenu = blend5menu, "Blend Curve (5) AFR1->2", 0, {tsw_pin_afr == 14}
+ subMenu = blend6menu, "Blend Curve (6) Boost1->2", 0, {(boost_feats_tsw == 14) && boost_ctl_settings_on}
+ subMenu = blend7menu, "Blend Curve (7) Crank%1->2", 0, {alternate_blend}
+ subMenu = blend8menu, "Blend Curve (8) Flex Blending", 0, { dualfuel_sw_on && (dualfuel_opt_mode == 2) }
+
+ menu = "Advanced Engine"
+ subMenu = speedsensors, "Speed and Gear Sensors"
+ subMenu = ss, "Shaft Speed Sensors"
+ subMenu = egt, "EGT/Thermocouple Settings"
+ subMenu = sensors, "Generic Sensor Inputs"
+ subMenu = accelerometer, "Accelerometer Parameters"
+ subMenu = tcsettings, "Traction Control Settings"
+ subMenu = tc_perfect_curve, "Traction Control - Perfect Run VSS", 0, {tc_opt_on && (tc_opt_method == 0)}
+ subMenu = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM", 0, {tc_opt_on && (tc_opt_method == 2)}
+ subMenu = tcslip_menu, "Traction Control - External Slip% Input", 0, {tc_opt_on && (tc_opt_method == 1) && tc_opt_slipcurve}
+ subMenu = tc_curves, "Traction Control Reactions", 0, {tc_opt_on}
+ subMenu = std_separator
+ subMenu = launch, "Launch / 2-step / 3-step / T-brake"
+ subMenu = launch_retard_time, "Timed Retard After Launch", 0, {launch_opt_on && launch_opt_retard}
+ subMenu = vsslaunch, "Speed-based Launch Control"
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = nitrous, "&Nitrous System"
+ subMenu = nitrous_curves_time, "Nitrous - Time-Based Progressive",0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) }
+ subMenu = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 0)}
+ subMenu = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 2)}
+ subMenu = waterinj, "Water Injection"
+ subMenu = hpte, "High Power Time Enrichment"
+ subMenu = oilpress, "Oil Pressure"
+ subMenu = pitlimiter, "Pit Lane Limiter"
+ subMenu = std_separator
+ subMenu = ms3_port_edit_wrap, "Programmable On/Off Outputs"
+ subMenu = gen_pwm_a, "Generic PWM output A"
+ subMenu = gen_pwm_b, "Generic PWM output B"
+ subMenu = gen_pwm_c, "Generic PWM output C"
+ subMenu = gen_pwm_d, "Generic PWM output D"
+ subMenu = gen_pwm_e, "Generic PWM output E", 0, {!(vvt_opt1_on)}
+ subMenu = gen_pwm_f, "Generic PWM output F"
+ subMenu = std_separator
+ subMenu = generic_pid_a, "Generic Closed-Loop A"
+ subMenu = generic_pid_b, "Generic Closed-Loop B"
+
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+ subMenu = veTable1Map, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { (algorithm2 != 0) && (algorithm2 != 5) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode) }
+ subMenu = veTable4Map, "Fuel VE Table &4", 0, { ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) && (algorithm2 != 0) }
+
+ subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType > 1 }
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { (egoType > 1) && ((!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr)) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "Ignition Table 2", 0, { (IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_fuel) }
+ subMenu = ignitionMap4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = boostctlDtyMap2, "Boost Control Duty Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap2, "Boost Control Target Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator
+ subMenu = inj_timing_map, "Sequential Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_map, "Sequential Injector Secondary Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+
+ menu = "CAN-bus/ Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting",0, {can_enable_on}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_enable_on && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_enable_on}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_3,"CAN Realtime Data Broadcasting 3", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_4,"CAN Realtime Data Broadcasting 4", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_rcv, "CAN Receiving", 0, {can_enable_on}
+ subMenu = canvss, "CAN VSS, Gear",0, {can_enable_on}
+ subMenu = canego, "CAN EGO, GPS",0, {can_enable_on}
+ subMenu = realtimeclock, "Real Time Clock"
+ subMenu = iobox, "IO-Box Settings"
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = checkengine, "Check Engine Light"
+ subMenu = limpmode, "Limp Mode", 0, {cel_opt_on}
+ subMenu = alphaMAPTbl, "Fallback MAP Table", 0, {cel_opt_on && cel_opt2_map && cel_action1_map && cel_action1_map_an}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = outputtest_io2, "Output Test Mode - I/O 2"
+ subMenu = outputtest_io3, "Output Test Mode - CAN I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+ subMenu = injseqtest, "Injector Sequential Testing"
+ subMenu = injspkonoff, "Inj/Spk Disabling Test Mode"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = special, "Special Options"
+ subMenu = std_separator
+ subMenu = lttrim, "Long Term Trim Settings"
+ subMenu = ltt_Table1Tbl, "Long Term Trim Table &1", 0
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+#endif
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Data Logging"
+ subMenu = sdcard_datalog, "SD Card Datalogging"
+ subMenu = std_ms3SdConsole, "Browse / Import SD Card",0, {log_style_on2 && (tsLocalCanId == tsCanId) }
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate", 0
+
+ menu = "Help"
+ subMenu = helpGeneral, "Megasquirt 3 Info"
+;-------------------------------------------------------------------------------
+
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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.
+
+;The offsets here must match the actual offsets in 'datax1' and include the 0x200 offset.
+cmdStopTestmode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x07"
+cmdtestiacoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0a"
+
+cmdskipinjoff= "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0b"
+cmdskipinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0c"
+cmdskipspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0d"
+
+cmdtestinjnorm = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x10"
+cmdtestinjbat = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x11"
+cmdtestinjsem = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x12"
+cmdtestinjseq = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x13"
+
+cmdtestiaccycle = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x18"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x92"
+
+cmdtest14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9f"
+
+cmdtesta0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa0"
+cmdtesta0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa2"
+cmdtesta0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa3"
+
+cmdtesta1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa4"
+cmdtesta1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa6"
+cmdtesta1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa7"
+
+cmdtesta2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa8"
+cmdtesta2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaa"
+cmdtesta2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xab"
+
+cmdtesta3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xac"
+cmdtesta3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xae"
+cmdtesta3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaf"
+
+cmdtesta4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb0"
+cmdtesta4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb2"
+cmdtesta4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb3"
+
+cmdtesta5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb4"
+cmdtesta5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb6"
+cmdtesta5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb7"
+
+cmdtesta6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb8"
+cmdtesta6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xba"
+cmdtesta6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbb"
+
+cmdtesta7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbc"
+cmdtesta7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbe"
+cmdtesta7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbf"
+
+cmdtestb0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc0"
+cmdtestb0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc2"
+cmdtestb0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc3"
+
+cmdtestb1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc4"
+cmdtestb1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc6"
+cmdtestb1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc7"
+
+cmdtestb2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc8"
+cmdtestb2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xca"
+cmdtestb2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcb"
+
+cmdtestb3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcc"
+cmdtestb3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xce"
+cmdtestb3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcf"
+
+cmdtestb4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd0"
+cmdtestb4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd2"
+cmdtestb4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd3"
+
+cmdtestb5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd4"
+cmdtestb5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd6"
+cmdtestb5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd7"
+
+cmdtestb6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd8"
+cmdtestb6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xda"
+cmdtestb6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdb"
+
+cmdtestb7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdc"
+cmdtestb7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xde"
+cmdtestb7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdf"
+
+cmdteste0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe0"
+cmdteste0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe2"
+cmdteste0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe3"
+
+cmdteste4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe4"
+cmdteste4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe6"
+cmdteste4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe7"
+
+cmdteste8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe8"
+cmdteste8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xea"
+cmdteste8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xeb"
+
+cmdtestecoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xec"
+cmdtestecpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xee"
+cmdtestecon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xef"
+
+cmdtestf0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf0"
+cmdtestf0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf2"
+cmdtestf0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf3"
+
+cmdtestf4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf4"
+cmdtestf4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf6"
+cmdtestf4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf7"
+
+cmdtestf8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf8"
+cmdtestf8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfa"
+cmdtestf8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfb"
+
+cmdtestfcoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfc"
+cmdtestfcpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfe"
+cmdtestfcon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xff"
+; CAN outs
+cmdtestcano0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x80"
+cmdtestcano0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x82"
+cmdtestcano0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x83"
+
+cmdtestcano1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x84"
+cmdtestcano1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x86"
+cmdtestcano1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x87"
+
+cmdtestcano2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x88"
+cmdtestcano2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8a"
+cmdtestcano2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8b"
+
+cmdtestcano3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8c"
+cmdtestcano3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8e"
+cmdtestcano3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8f"
+
+cmdtestcano4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x90"
+cmdtestcano4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x92"
+cmdtestcano4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x93"
+
+cmdtestcano5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x94"
+cmdtestcano5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x96"
+cmdtestcano5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x97"
+
+cmdtestcano6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x98"
+cmdtestcano6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9a"
+cmdtestcano6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9b"
+
+cmdtestcano7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9c"
+cmdtestcano7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9e"
+cmdtestcano7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9f"
+
+cmdtestcano8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa0"
+cmdtestcano8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa2"
+cmdtestcano8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa3"
+
+cmdtestcano9off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa4"
+cmdtestcano9pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa6"
+cmdtestcano9on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa7"
+
+cmdtestcano10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa8"
+cmdtestcano10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaa"
+cmdtestcano10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xab"
+
+cmdtestcano11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xac"
+cmdtestcano11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xae"
+cmdtestcano11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaf"
+
+cmdtestcano12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb0"
+cmdtestcano12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb2"
+cmdtestcano12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb3"
+
+cmdtestcano13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb4"
+cmdtestcano13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb6"
+cmdtestcano13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb7"
+
+cmdtestcano14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb8"
+cmdtestcano14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xba"
+cmdtestcano14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbb"
+
+cmdtestcano15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbc"
+cmdtestcano15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbe"
+cmdtestcano15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbf"
+
+cmdlttr1 = "w\$tsCanId\x07\x02\x9a\x00\x01\x41"
+cmdlttr2 = "w\$tsCanId\x07\x02\x9a\x00\x01\x42"
+cmdlttw = "w\$tsCanId\x07\x02\x9a\x00\x01\x51"
+cmdlttz = "w\$tsCanId\x07\x02\x9a\x00\x01\x61"
+
+cmdinjspk1 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x20"
+cmdinjspk2 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x21"
+cmdinjspk3 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x22"
+cmdinjspk4 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x23"
+cmdinjspk5 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x24"
+cmdinjspk6 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x25"
+cmdinjspk7 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x26"
+cmdinjspk8 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x27"
+cmdinjspk9 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x28"
+cmdinjspk10 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x29"
+cmdinjspk11 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2a"
+cmdinjspk12 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2b"
+cmdinjspk13 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2c"
+cmdinjspk14 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2d"
+cmdinjspk15 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2e"
+cmdinjspk16 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2f"
+
+cmdnull = ""
+
+[UserDefined]
+ dialog = pitlimiter, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pitlim"
+ field = "Pit Limiter Enable", pitlim_opt_on
+ field = "Input", pitlim_enin, pitlim_opt_on
+ field = "Mode", pitlim_opt_mode, { pitlim_opt_on && pitlim_enin }
+ field = "Use VSS or RPM target", pitlim_opt_vssrpm, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) }
+ field = "Speed", pitlim_speed, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 0) }
+ field = "Speed control range", pitlim_speed_range, { pitlim_opt_on && pitlim_enin && ((pitlim_opt_mode == 0) || (pitlim_opt_vssrpm == 0)) }
+ field = "RPM control range", pitlim_rpm_range, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) && pitlim_opt_vssrpm }
+ slider = "Tracking Sensitivity", pitlim_sensitivity, horizontal, { pitlim_opt_on && pitlim_enin}
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", pitlim_opt_retard, { pitlim_opt_on && pitlim_enin}
+ field = "Maximum Retard", pitlim_retardmax, { pitlim_opt_on && pitlim_enin&& (pitlim_opt_retard == 1) }
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", pitlim_opt_spkcut, { pitlim_opt_on && pitlim_enin}
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", pitlim_opt_fuelcut, { pitlim_opt_on && pitlim_enin}
+ field = "Progressive Fuel Cut", pitlim_opt_fuelprog, { pitlim_opt_on && pitlim_enin && pitlim_opt_fuelcut }
+
+ dialog = iobox1, "IO box 1", yAxis
+ field = "IO-Box #1 Enable", iobox_opta1
+ field = "VSS setting", iobox_optb1vss, {iobox_opta1}
+ field = "Configuration", iobox_opta1adv, {iobox_opta1}
+ field = "Base CAN identifier", iobox_id1, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANIN", iobox_opta1canin, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANOUT", iobox_opta1canout , {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANADC", iobox_opta1canadc, {iobox_opta1 && iobox_opta1adv }
+ field = "Tach transmit rate", iobox_optb1tachrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Inputs transmit rate", iobox_optb1inrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Outputs transmit rate", iobox_optb1outrate, {iobox_opta1 && iobox_opta1adv }
+
+ dialog = iobox2, "IO box 2", yAxis
+ field = "IO-Box #2 Enable", iobox_opta2
+ field = "VSS setting", iobox_optb2vss, {iobox_opta2}
+ field = "Configuration", iobox_opta2adv, {iobox_opta2}
+ field = "Base CAN identifier", iobox_id2, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANIN", iobox_opta2canin, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANOUT", iobox_opta2canout , {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANADC", iobox_opta2canadc, {iobox_opta2 && iobox_opta2adv }
+ field = "Tach transmit rate", iobox_optb2tachrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Inputs transmit rate", iobox_optb2inrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Outputs transmit rate", iobox_optb2outrate, {iobox_opta2 && iobox_opta2adv }
+
+ dialog = iobox3, "IO box 3", yAxis
+ field = "IO-Box #3 Enable", iobox_opta3
+ field = "VSS setting", iobox_optb3vss, {iobox_opta3}
+ field = "Configuration", iobox_opta3adv, {iobox_opta3}
+ field = "Base CAN identifier", iobox_id3, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANIN", iobox_opta3canin, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANOUT", iobox_opta3canout , {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANADC", iobox_opta3canadc, {iobox_opta3 && iobox_opta3adv }
+ field = "Tach transmit rate", iobox_optb3tachrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Inputs transmit rate", iobox_optb3inrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Outputs transmit rate", iobox_optb3outrate, {iobox_opta3 && iobox_opta3adv }
+
+ dialog = iobox4, "IO box 4", yAxis
+ field = "IO-Box #4 Enable", iobox_opta4
+ field = "VSS setting", iobox_optb4vss, {iobox_opta4}
+ field = "Configuration", iobox_opta4adv, {iobox_opta4}
+ field = "Base CAN identifier", iobox_id4, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANIN", iobox_opta4canin, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANOUT", iobox_opta4canout , {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANADC", iobox_opta4canadc, {iobox_opta4 && iobox_opta4adv }
+ field = "Tach transmit rate", iobox_optb4tachrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Inputs transmit rate", iobox_optb4inrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Outputs transmit rate", iobox_optb4outrate, {iobox_opta4 && iobox_opta4adv }
+
+ dialog = ioboxtop, "", xAxis
+ panel = iobox1, West
+ panel = iobox2, East
+
+ dialog = ioboxbot, "", xAxis
+ panel = iobox3, West
+ panel = iobox4, East, {0}
+
+ dialog = iobox, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iobox"
+ panel = ioboxtop, North
+ panel = ioboxbot, South
+
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_rcv2, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var1
+ field = "", can_rcv_var2
+ field = "", can_rcv_var3
+ field = "", can_rcv_var4
+ field = "", can_rcv_var5
+ field = "", can_rcv_var6
+ field = "", can_rcv_var7
+ field = "", can_rcv_var8
+
+ dialog = can_rcv2b, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var9
+ field = "", can_rcv_var10
+ field = "", can_rcv_var11
+ field = "", can_rcv_var12
+ field = "", can_rcv_var13
+ field = "", can_rcv_var14
+ field = "", can_rcv_var15
+ field = "", can_rcv_var16
+
+ dialog = can_rcv3, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id1
+ field = "", can_rcv_id2
+ field = "", can_rcv_id3
+ field = "", can_rcv_id4
+ field = "", can_rcv_id5
+ field = "", can_rcv_id6
+ field = "", can_rcv_id7
+ field = "", can_rcv_id8
+
+ dialog = can_rcv3b, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id9
+ field = "", can_rcv_id10
+ field = "", can_rcv_id11
+ field = "", can_rcv_id12
+ field = "", can_rcv_id13
+ field = "", can_rcv_id14
+ field = "", can_rcv_id15
+ field = "", can_rcv_id16
+
+ dialog = can_rcv4, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off1
+ field = "", can_rcv_off2
+ field = "", can_rcv_off3
+ field = "", can_rcv_off4
+ field = "", can_rcv_off5
+ field = "", can_rcv_off6
+ field = "", can_rcv_off7
+ field = "", can_rcv_off8
+
+ dialog = can_rcv4b, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off9
+ field = "", can_rcv_off10
+ field = "", can_rcv_off11
+ field = "", can_rcv_off12
+ field = "", can_rcv_off13
+ field = "", can_rcv_off14
+ field = "", can_rcv_off15
+ field = "", can_rcv_off16
+
+ dialog = can_rcv5, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size1
+ field = "", can_rcv_size2
+ field = "", can_rcv_size3
+ field = "", can_rcv_size4
+ field = "", can_rcv_size5
+ field = "", can_rcv_size6
+ field = "", can_rcv_size7
+ field = "", can_rcv_size8
+
+ dialog = can_rcv5b, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size9
+ field = "", can_rcv_size10
+ field = "", can_rcv_size11
+ field = "", can_rcv_size12
+ field = "", can_rcv_size13
+ field = "", can_rcv_size14
+ field = "", can_rcv_size15
+ field = "", can_rcv_size16
+
+ dialog = can_rcv6, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult1
+ field = "", can_rcv_mult2
+ field = "", can_rcv_mult3
+ field = "", can_rcv_mult4
+ field = "", can_rcv_mult5
+ field = "", can_rcv_mult6
+ field = "", can_rcv_mult7
+ field = "", can_rcv_mult8
+
+ dialog = can_rcv6b, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult9
+ field = "", can_rcv_mult10
+ field = "", can_rcv_mult11
+ field = "", can_rcv_mult12
+ field = "", can_rcv_mult13
+ field = "", can_rcv_mult14
+ field = "", can_rcv_mult15
+ field = "", can_rcv_mult16
+
+ dialog = can_rcv7, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div1
+ field = "", can_rcv_div2
+ field = "", can_rcv_div3
+ field = "", can_rcv_div4
+ field = "", can_rcv_div5
+ field = "", can_rcv_div6
+ field = "", can_rcv_div7
+ field = "", can_rcv_div8
+
+ dialog = can_rcv7b, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div9
+ field = "", can_rcv_div10
+ field = "", can_rcv_div11
+ field = "", can_rcv_div12
+ field = "", can_rcv_div13
+ field = "", can_rcv_div14
+ field = "", can_rcv_div15
+ field = "", can_rcv_div16
+
+ dialog = can_rcv8, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add1
+ field = "", can_rcv_add2
+ field = "", can_rcv_add3
+ field = "", can_rcv_add4
+ field = "", can_rcv_add5
+ field = "", can_rcv_add6
+ field = "", can_rcv_add7
+ field = "", can_rcv_add8
+
+ dialog = can_rcv8b, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add9
+ field = "", can_rcv_add10
+ field = "", can_rcv_add11
+ field = "", can_rcv_add12
+ field = "", can_rcv_add13
+ field = "", can_rcv_add14
+ field = "", can_rcv_add15
+ field = "", can_rcv_add16
+
+ dialog = can_rcv1, "", xAxis
+ panel = can_rcv2
+ panel = can_rcv3
+ panel = can_rcv4
+ panel = can_rcv5
+ panel = can_rcv6
+ panel = can_rcv7
+ panel = can_rcv8
+
+ dialog = can_rcv1b, "", xAxis
+ panel = can_rcv2b
+ panel = can_rcv3b
+ panel = can_rcv4b
+ panel = can_rcv5b
+ panel = can_rcv6b
+ panel = can_rcv7b
+ panel = can_rcv8b
+
+ dialog = can_rcv0, "", xAxis
+ field = "Enable receiving CAN data", can_rcv_opt_on
+ field = ""
+ field = ""
+
+ dialog = can_rcv, "CAN receiving", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrcv"
+ panel = can_rcv0, North
+ panel = can_rcv1, Center;, {can_rcv_opt_on} ; ungreying does not work
+ panel = can_rcv1b, South;, {can_rcv_opt_on}
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5,6,7", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: sensors1,2,3,4", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: sensors5,6,7,8", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: sensors9,10,11,12", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "16: sensors13,14,15,16", can_outpc_gp16
+ field = "17: boost_targ1,2,boostduty1,2,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "19: PWseq5,6,7,8", can_outpc_gp19
+ field = "20: PWseq9,10,11,12", can_outpc_gp20
+ field = "21: PWseq13,14,15,16", can_outpc_gp21
+ field = "22: EGT1,2,3,4", can_outpc_gp22
+ field = "23: EGT5,6,7,8", can_outpc_gp23
+ field = "24: EGT9,10,11,12", can_outpc_gp24
+ field = "25: EGT13,14,15,16", can_outpc_gp25
+ field = "26: nitrous:duty1,2,timer,addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2,VSS1dot,VSS2dot", can_outpc_gp29
+ field = "30: AccelX,Y,Z,streamlvl,waterduty", can_outpc_gp30
+ field = "31: AFR0,1,2,3,4,5,6,7,8", can_outpc_gp31
+
+ dialog = can_outpc_bcast_3, "CAN Realtime Data Broadcasting 3", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "32: AFR9,10,11,12,13,14,15,16", can_outpc_gp32
+ field = "33: PWMduty1,2,3,4,5,6,gear,timingerr", can_outpc_gp33
+ field = "34: EGOv1,2,3,4", can_outpc_gp34
+ field = "35: EGOv5,6,7,8", can_outpc_gp35
+ field = "36: EGOv9,10,11,12", can_outpc_gp36
+ field = "37: EGOv13,14,15,16", can_outpc_gp37
+ field = "38: EGOcor1,2,3,4", can_outpc_gp38
+ field = "39: EGOcor5,6,7,8", can_outpc_gp39
+ field = "40: EGOcor9,10,11,12", can_outpc_gp40
+ field = "41: EGOcor13,14,15,16", can_outpc_gp41
+ field = "42: VSS1,2,3,4", can_outpc_gp42
+ field = "43: synccnt,reason,SD:file#,err,phase,stat,timing_err", can_outpc_gp43
+ field = "44: VVTang1,2,3,4", can_outpc_gp44
+ field = "45: VVTtarg1,2,3,4", can_outpc_gp45
+ field = "46: VVTduty1,2,3,4,injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%,tpsacc,SS1,2", can_outpc_gp47
+
+ dialog = can_outpc_bcast_4, "CAN Realtime Data Broadcasting 4", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "48: knock_cyl1,2,3,4,5,6,7,8", can_outpc_gp48
+ field = "49: knock_cyl9,10,11,12,13,14,15,16", can_outpc_gp49
+ field = "50: MAPacc,totalacc,launch:timer,retard", can_outpc_gp50
+ field = "51: PORTa,b,eh,k,mj,p,t,cel_err", can_outpc_gp51
+ field = "52: CANin,CANout,knockretard,fuelflow,cons", can_outpc_gp52
+ field = "53: Fuel:press1,2,temp1,2", can_outpc_gp53
+ field = "54: battcurr,CLidletarg,FPduty,ALTduty,loadduty,ALTtarg", can_outpc_gp54
+ field = "55: looptime,fueltempcor,fuelprescor,lttcor", can_outpc_gp55
+ field = "56: Retards:TC,CEL,FCut,ext", can_outpc_gp56
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3,4", can_outpc_gp58
+ field = "59: Revlimretard,ALSadv,ext_advance,deadtime", can_outpc_gp59
+ field = "60: Launchadv,3stepadv,VSSlaunchretard,celstat2", can_outpc_gp60
+ field = "61: GPS", can_outpc_gp61
+ field = "62: GPS", can_outpc_gp62
+ field = "63: Gen CL duty1,2", can_outpc_gp63
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupgauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = fuelcorr
+ gauge = afr1targetGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = nitrous_addfuel
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = fueltemp_cor
+ gauge = fuelpress_cor
+ gauge = ltt_cor
+ gauge = als_addfuel
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+; gauge = pulseWidth3Gauge
+; gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see the Setting Up Manual."
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = adv4Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retard
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = tc_retardGauge
+ gauge = cel_retardGauge
+ gauge = fc_retardGauge
+ gauge = als_timingGauge
+
+ dialog = sparkcalc_gauges5, "", xAxis
+ gauge = launch_timingGauge
+ gauge = step3_timingGauge
+ gauge = launchvss_retardGauge
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+ panel = sparkcalc_gauges5
+
+ dialog = buts_injspk_label, "", yAxis
+ field = "Enabled -->>"
+ field = "Disabled ->>"
+
+ dialog = buts_injspk1, "", yAxis
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && ((status5 & 1) == 0)}
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && (status5 & 1)}
+ dialog = buts_injspk2, "", yAxis
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && ((status5 & 2) == 0)}
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && (status5 & 2)}
+ dialog = buts_injspk3, "", yAxis
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && ((status5 & 4) == 0)}
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && (status5 & 4)}
+ dialog = buts_injspk4, "", yAxis
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && ((status5 & 8) == 0)}
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && (status5 & 8)}
+ dialog = buts_injspk5, "", yAxis
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && ((status5 & 16) == 0)}
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && (status5 & 16)}
+ dialog = buts_injspk6, "", yAxis
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && ((status5 & 32) == 0)}
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && (status5 & 32)}
+ dialog = buts_injspk7, "", yAxis
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && ((status5 & 64) == 0)}
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && (status5 & 64)}
+ dialog = buts_injspk8, "", yAxis
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && ((status5 & 128) == 0)}
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && (status5 & 128)}
+
+ dialog = buts_injspk9, "", yAxis
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && ((status5 & 0x100) == 0)}
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && (status5 & 0x100)}
+ dialog = buts_injspk10, "", yAxis
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && ((status5 & 0x200) == 0)}
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && (status5 & 0x200)}
+ dialog = buts_injspk11, "", yAxis
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && ((status5 & 0x400) == 0)}
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && (status5 & 0x400)}
+ dialog = buts_injspk12, "", yAxis
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && ((status5 & 0x800) == 0)}
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && (status5 & 0x800)}
+ dialog = buts_injspk13, "", yAxis
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && ((status5 & 0x1000) == 0)}
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && (status5 & 0x1000)}
+ dialog = buts_injspk14, "", yAxis
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && ((status5 & 0x2000) == 0)}
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && (status5 & 0x2000)}
+ dialog = buts_injspk15, "", yAxis
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && ((status5 & 0x4000) == 0)}
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && (status5 & 0x4000)}
+ dialog = buts_injspk16, "", yAxis
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && ((status5 & 0x8000) == 0)}
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && (status5 & 0x8000)}
+
+ dialog = injspkonoffmaster, "", xAxis
+ commandButton = "Off", cmdskipinjoff, {status8 & 0x03}, clickOnCloseIfEnabled
+ commandButton = "Injectors", cmdskipinjon, {(status8 & 0x03) == 0}
+ commandButton = "Coils", cmdskipspkon, {(status8 & 0x03) == 0}
+
+ dialog = injspkonoffchans, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk1
+ panel = buts_injspk2
+ panel = buts_injspk3
+ panel = buts_injspk4
+ panel = buts_injspk5
+ panel = buts_injspk6
+ panel = buts_injspk7
+ panel = buts_injspk8
+ panel = buts_injspk9
+ panel = buts_injspk10
+
+ dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk9
+ panel = buts_injspk10
+ panel = buts_injspk11
+ panel = buts_injspk12
+
+ dialog = injspkonofftype, "", yAxis
+ displayOnlyField = "Off", dummyfield, {(status8 & 0x03) == 0}
+ displayOnlyField = "Injector disabling test.", dummyfield, {(status8 & 0x03) == 1}
+ displayOnlyField = "Coil disabling test - beware of plug fouling.", dummyfield, {(status8 & 0x03) == 2}
+ field = "Will not run as expected if running:"
+ field = " - semi-sequential fuel"
+ field = " - wasted spark and only a crank wheel"
+ field = " - a simple distributor input."
+
+ dialog = injspkonoff, "Inj/Spk Disabling Test Mode", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injspkonoff"
+ panel = injspkonoffmaster, North
+ panel = injspkonofftype, Center
+ panel = injspkonoffchans, South;, {status8 & 0x03} ; <--- this isn't ungreying
+
+ dialog = fp_safety, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsafety"
+ field = "Fuel pressure monitoring must be enabled."
+ field = "Enable Fuel Pressure Safety", fp_opt_safety, {fp_press_in}
+ field = "(Target fuel pressure are set on fuel pressure page.)"
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_psig
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_kpag
+ field = "Check Above Load", fp_drop_load, {fp_opt_safety && fp_press_in}
+ field = "Check Above RPM", fp_drop_rpm, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_psig, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_kpag, {fp_opt_safety && fp_press_in}
+ field = "Time Allowed At Low Pressure", fp_drop_time, {fp_opt_safety && fp_press_in}
+ field = "See AFR safety for shutdown options"
+
+ dialog = oilpress_set, ""
+ field = "Oil Pressure Input", oilpress_in
+ field = "Oil Pressure Warning", oilpress_out, {oilpress_in}
+ field = "Set the zero rpm pressures above zero"
+ field = "to ensure lamp is tested on each start."
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = oilpress, "Oil Pressure", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#oil"
+ panel = oilpress_set, West
+ panel = oil_curve, East, {oilpress_in}
+
+ dialog = shiftlight, "Shift Light"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shiftlight"
+ field = "Shift Light Output", shiftlight_opt_pins
+ field = "Per Gear Limits", shiftlight_opt_gear, {shiftlight_opt_pins}
+ field = "Limit", shiftlight_limit1, {shiftlight_opt_pins && (shiftlight_opt_gear == 0)}
+ field = "1st Gear Limit", shiftlight_limit1, {shiftlight_opt_pins && shiftlight_opt_gear}
+ field = "2nd Gear Limit", shiftlight_limit2, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 1)}
+ field = "3rd Gear Limit", shiftlight_limit3, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 2)}
+ field = "4th Gear Limit", shiftlight_limit4, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 3)}
+ field = "5th Gear Limit", shiftlight_limit5, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 4)}
+ field = "6th Gear Limit", shiftlight_limit6, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 5)}
+
+ dialog = hpte1, ""
+ field = "This feature requires Incorporate AFR be enabled"
+ field = "High Power Time Enrichment", hpte_opt_on, {loadStoich}
+ field = "Above Load", hpte_load, {hpte_opt_on && loadStoich}
+ field = "Above RPM", hpte_rpm, {hpte_opt_on && loadStoich}
+
+ dialog = hpte, "High Power Time Enrichment", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#hpte"
+ panel = hpte1, North
+ panel = hpte_curve, South, {hpte_opt_on && loadStoich}
+
+ dialog = MAFtable, "MAF Flow Curve", card
+ panel = MAFtable1, Center, { MAFOption_t == 0 }
+ panel = MAFtable1f, Center, { MAFOption_t == 1 }
+
+ dialog = alt_load, ""
+ field = "Warn on Voltage Difference >", alternator_diff, {alternator_opt_mode && alternator_lampout}
+ field = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ field = "Capture Polarity", alternator_freq_moninv, {alternator_opt_mode && (alternator_opt_mode < 4) && alternator_freq_monin}
+ field = "Warn On Load >", alternator_maxload, {alternator_lampout && ((alternator_opt_mode && alternator_freq_monin) || (alternator_opt_mode == 4) || (alternator_opt_mode == 5))}
+ field = ""
+ field = ""
+
+ dialog = alt_pids, ""
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", alternator_Kp, {alternator_opt_mode == 4}
+ field = "Integral Gain", alternator_Ki, {alternator_opt_mode == 4}
+ field = "Derivative Gain", alternator_Kd, {alternator_opt_mode == 4}
+ slider = "Sensitivity", alternator_sensitivity, horizontal, {alternator_opt_mode == 4}
+
+ dialog = alt_pidorload, "", card
+ panel = alt_load, Center, {alternator_opt_mode != 4}
+ panel = alt_pids, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_settings_t, ""
+ field = "Control Mode", alternator_opt_mode
+ field = "Control Interval", alternator_ctl_ms, {alternator_opt_mode}
+ field = "Control Output", alternator_controlout, {alternator_opt_mode}
+ field = "Output Polarity", alternator_control_inv, {alternator_opt_mode}
+ field = "Control Frequency", alternator_freq, {(alternator_opt_mode == 3) || (alternator_opt_mode == 4)}
+ field = "Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+
+ dialog = alt_settings_b, ""
+ field = "Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ field = "Capture Polarity", alternator_freq_currinv, {alternator_opt_mode && alternator_freq_currin}
+ field = "Start Delay", alternator_startdelay, {alternator_opt_mode}
+ field = "Ramp Up Time", alternator_ramptime, {alternator_opt_mode > 1}
+ field = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ field = "Charge Mode Target Voltage", alternator_targv, {(alternator_tempin == 0) && alternator_opt_mode}
+ field = "Charge Time", alternator_chargetime, {alternator_opt_mode > 1}
+ field = "Run Mode Target Voltage", alternator_targvr, {alternator_opt_mode > 1}
+ field = "WOT TPS%", alternator_wot, {alternator_opt_mode > 1}
+ field = "WOT Target Voltage", alternator_wotv, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "WOT Timeout", alternator_wottimeout, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "Over-Run Target Voltage", alternator_overrv, {alternator_opt_mode > 1}
+
+ dialog = alt_settings, ""
+ panel = alt_settings_t
+ panel = alt_pidorload
+ panel = alt_settings_b
+
+ dialog = alt_outcurve, "", card
+ panel = alternator_outfreq, Center, {alternator_opt_mode == 2}
+ panel = alternator_outduty, Center, {alternator_opt_mode == 3}
+ panel = alternator_linearise, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_curves, "", yAxis
+ panel = alternator_tempcurve, North, {alternator_opt_mode && alternator_tempin}
+ panel = alt_outcurve
+
+ dialog = alternator, "Alternator Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#altctl"
+ panel = alt_settings, West
+ panel = alt_curves, East
+
+ dialog = eaecombi1top, "", border
+ panel = EAEBSOCcurve, West
+ panel = EAEBAWCcurve, East
+
+ dialog = eaecombi1bot, "", yAxis
+ liveGraph = eaeGraph, "AE Graph", North
+ graphLine = EAEFuelCorr1
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+
+ dialog = EAEcombi1, "EAE Sucked/Adhered Coefficients", border
+ panel = eaecombi1top, Center
+ panel = eaecombi1bot, South
+
+ dialog = ms3_pe_t, ""
+ field = "Do not try to enable an output port that is already in use for another function."
+
+ dialog = ms3_port_edit_wrap, "", yAxis
+ panel = ms3_port_edit, North
+ panel = ms3_pe_t
+
+ dialog = fuelpump_set, ""
+ field = "Fuel Pump Mode", fp_opt_mode
+ field = "Control Interval", fp_ctl_ms
+ field = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ field = "Output Frequency", fp_freq, {fp_opt_mode}
+ field = "Fuel Pump Output Polarity", fp_opt_inv, {fp_opt_mode}
+ field = "Pressure Regulation/Correction", fp_opt_reg, {fp_opt_mode == 0}
+ field = "'Fixed' automatically adjusts fuel PW."
+ field = "Static/Target Rail Differential Pressure", rail_pressure_psig
+ field = "Static/Target Rail Differential Pressure", rail_pressure_kpag
+ field = "Priming Duty", fp_prime_duty, {fp_opt_mode}
+ field = "Off Duty", fp_off_duty, {fp_opt_mode}
+ field = "Minimum Duty", fp_min_duty, {fp_opt_mode}
+ field = "Maximum Duty", fp_max_duty, {fp_opt_mode}
+ field = "Pressure Sensor Input (kPa)", fp_press_in
+ field = "Sensor Type", fp_press_type, {fp_press_in}
+ field = "Temperature Sensor Input", fueltemp1
+ field = "Temperature Correction", fueltemp1_corr, {fueltemp1}
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", fp_Kp, {fp_opt_mode == 2}
+ field = "Integral Gain", fp_Ki, {fp_opt_mode == 2}
+ field = "Derivative Gain", fp_Kd, {fp_opt_mode == 2}
+
+ dialog = fuelpump, "Fuel Pump and Pressure Control", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpump"
+ panel = fuelpump_set, West
+ panel = fp_dutyTbl, East, {fp_opt_mode == 1}
+
+ dialog = boostvss_curve, "", card
+ panel = boostvss_duty_curve, Center, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) && ((boost_vss == 1) || (boost_vss == 2))}
+ panel = boostvss_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl)&& ((boost_vss == 1) || (boost_vss == 2))}
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = tcslip_set, "", yAxis
+ field = "0-5V knob Input", tc_knob
+ dialog = tcslip_menu, "Traction Control - External Slip% Input", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionslip"
+ panel = tc_slip_curve
+ panel = tcslip_set
+
+ dialog = blend1_set, "", yAxis
+ field = "X Axis Parameter", blend_opt1
+ field = "%VE2. 0% = Fully VE1. 100% = Fully VE2."
+ dialog = blend1menu, "Blend Curve (1)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend1"
+ panel = blend1_curve
+ panel = blend1_set
+
+ dialog = blend2_set
+ field = "X Axis Parameter", blend_opt2
+ field = "%Spk2. 0% = Fully Spk1. 100% = Fully Spk2."
+ dialog = blend2menu, "Blend Curve (2)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend2"
+ panel = blend2_curve
+ panel = blend2_set
+
+ dialog = blend3_set
+ field = "X Axis Parameter", blend_opt3
+ field = "%VE3/4. 0% = Fully VE1/2. 100% = Fully VE3/4."
+ dialog = blend3menu, "Blend Curve (3)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend3"
+ panel = blend3_curve
+ panel = blend3_set
+
+ dialog = blend4_set
+ field = "X Axis Parameter", blend_opt4
+ field = "%Spk3/4. 0% = Fully Spk1/2. 100% = Fully Spk3/4."
+ dialog = blend4menu, "Blend Curve (4)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend4"
+ panel = blend4_curve
+ panel = blend4_set
+
+ dialog = blend5_set
+ field = "X Axis Parameter", blend_opt5
+ field = "%AFR2. 0% = Fully AFR1. 100% = Fully AFR2."
+ dialog = blend5menu, "Blend Curve (5)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend5"
+ panel = blend5_curve
+ panel = blend5_set
+
+ dialog = blend6_set
+ field = "X Axis Parameter", blend_opt6
+ field = "%Boost2. 0% = Fully Boost1. 100% = Fully Boost2."
+ dialog = blend6menu, "Blend Curve (6)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend6"
+ panel = blend6_curve
+ panel = blend6_set
+
+ dialog = blend7_set
+ field = "X Axis Parameter", blend_opt7
+ field = "%Crank%2. 0% = Fully Cranking curve1. 100% = Fully Cranking curve2."
+ dialog = blend7menu, "Blend Curve (7)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend7_curve
+ panel = blend7_set
+
+ dialog = blend8_set
+ field = "Flex blend%. 0% = Fully Tables1. 100% = Fully Tables2."
+ dialog = blend8menu, "Blend Curve (8)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend8_curve
+ panel = blend8_set
+
+ dialog = airden_words
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ field = "Firmwares 1.1.x and earlier used an embedded curve and a correction curve on top."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = checkengine_l, "Sensor Validation"
+ field = "Sensor Checking", cel_opt_on
+ field = "Light Output", cel_port, {cel_opt_on}
+ field = "CEL Solid/Flash Codes", cel_opt_flash, {cel_opt_on}
+ field = "Light When Not Running", cel_opt_when, {cel_opt_on && cel_port}
+ field = "Ignore Fluctuations For First", cel_runtime, {cel_opt_on}
+ field = "#MAP Sensor Check", cel_opt2_map, {cel_opt_on}
+ field = "Minimum ADC", map_minadc, {cel_opt_on}
+ field = "Maximum ADC", map_maxadc, {cel_opt_on}
+ field = "Minimum Fluctuation", map_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", map_var_upper, {cel_opt_on}
+ field = "#MAT Sensor Check", cel_opt2_mat, {cel_opt_on}
+ field = "Minimum ADC", mat_minadc, {cel_opt_on}
+ field = "Maximum ADC", mat_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", mat_var_upper, {cel_opt_on}
+ field = "#CLT Sensor Check", cel_opt2_clt, {cel_opt_on}
+ field = "Minimum ADC", clt_minadc, {cel_opt_on}
+ field = "Maximum ADC", clt_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", clt_var_upper, {cel_opt_on}
+ field = "#TPS Check", cel_opt2_tps, {cel_opt_on}
+ field = "Minimum ADC", tps_minadc, {cel_opt_on}
+ field = "Maximum ADC", tps_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", tps_var_upper, {cel_opt_on}
+
+ dialog = checkengine_r, ""
+ field = "#Battery Check", cel_opt2_batt, {cel_opt_on}
+ field = "Minimum Voltage", batt_minv, {cel_opt_on}
+ field = "Maximum Voltage", batt_maxv, {cel_opt_on}
+ field = "Maximum Fluctuation", batt_var_upper, {cel_opt_on}
+ field = "#EGO1 Sensor Check", cel_opt2_afr0, {cel_opt_on}
+ field = "Minimum AFR", afr_min, {cel_opt_on}
+ field = "Maximum AFR", afr_max, {cel_opt_on}
+ field = "Minimum Fluctuation", afr_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", afr_var_upper, {cel_opt_on}
+ field = "#Sync-Loss Check", cel_opt2_sync, {cel_opt_on}
+ field = "No. Sync Losses Allowed", cel_synctol, {cel_opt_on}
+ field = "#EGT Sensor Check", cel_opt2_egt, {cel_opt_on}
+ field = "Minimum EGT", egt_minvalid, {cel_opt_on}
+ field = "Maximum EGT", egt_maxvalid, {cel_opt_on}
+ field = "Minimum Fluctuation", egt_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", egt_var_upper, {cel_opt_on}
+ field = "#Flex Sensor Check", cel_opt3_flex, {cel_opt_on && flexFuel}
+ field = "AFR safety, oil pressure set CEL."
+ field = ""
+ field = "status5 Input", cel_opt_stat, {cel_opt_on}
+ field = "status5 Shows", cel_opt_adc, {cel_opt_on && cel_opt_stat}
+
+ dialog = limpmode, "Limp Mode"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#limp"
+ field = "MAP Triggers Limp Mode", cel_action1_map, {cel_opt_on && cel_opt2_map}
+ field = "Use Fallback MAP Table", cel_action1_map_an, {cel_opt_on && cel_opt2_map && cel_action1_map}
+ field = "MAT Triggers Limp Mode", cel_action1_mat, {cel_opt_on && cel_opt2_mat}
+ field = "Fallback MAT", cel_mat_default, {cel_opt_on && cel_opt2_mat && cel_action1_mat}
+ field = "CLT Triggers Limp Mode", cel_action1_clt, {cel_opt_on && cel_opt2_clt}
+ field = "Fallback Cold CLT", cel_clt_cold, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Fallback Warmed Up CLT", cel_clt_warm, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Time To Warmup Engine", cel_warmtime, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "TPS Triggers Limp Mode", cel_action1_tps, {cel_opt_on && cel_opt2_tps}
+ field = "TPS-accel is disabled in fault conditions"
+ field = "Batt Triggers Limp Mode", cel_action1_batt, {cel_opt_on && cel_opt2_batt}
+ field = "EGO Triggers Limp Mode", cel_action1_ego, {cel_opt_on && cel_opt2_afr0}
+ field = "Flex Triggers Limp Mode", cel_action2_flex, {cel_opt_on && cel_opt3_flex}
+ field = "EGT Triggers Limp Mode", cel_action2_egt, {cel_opt_on && cel_opt2_egt}
+ field = "The following apply in limp mode:"
+ field = "Limp Rev Limit", cel_revlim
+ field = "Limp Boost Limit", cel_overboost
+ field = "Limp Boost Valve Duty", cel_boost_duty
+ field = "Limp Boost Valve2 Duty", cel_boost_duty2
+ field = "Limp Retard Timing By", cel_retard
+
+ dialog = checkengine, "Check Engine Light", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#cel"
+ panel = checkengine_l
+ panel = checkengine_r
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn level", rpmwarn
+ field = "RPM - Danger level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "VE Value - Max", vehigh
+ field = "Allow WUE Below 100% (only for LPG)", wue_lpg
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+ field = "Air-Cooled Expanded CLT Range", clt_exp
+
+; list of features and what pins they use
+ dialog = iopinlist1, ".", yAxis
+ displayOnlyField = "Main Fuel Outputs", hardware_fuel
+ displayOnlyField = "Injector Out I, Injector Out J", hardware_fuel, {hardware_fuel== 0}
+ displayOnlyField = "Injector Out A, Injector Out B etc.", hardware_fuel, {hardware_fuel}
+ displayOnlyField = "Spark Hardware In Use", hardware_spk
+ displayOnlyField = "Spark Out A, Spark Out B etc.", hardware_spk, {hardware_spk}
+ displayOnlyField = "Cam Input (If Used)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+
+ displayOnlyField = "Programmable On/Off Output: Stepper Out 2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Stepper Out 1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PWM Out 2", psEnabled[6], {psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 3", psEnabled[7], {psEnabled[7]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 1", psEnabled[8], {psEnabled[8]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 2", psEnabled[9], {psEnabled[9]}
+ displayOnlyField = "Programmable On/Off Output: PWM Out 3", psEnabled[10], {psEnabled[10]}
+ displayOnlyField = "Programmable On/Off Output: PWM / Idle Out 1", psEnabled[11], {psEnabled[11]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out I", psEnabled[12], {psEnabled[12]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out J", psEnabled[13], {psEnabled[13]}
+ displayOnlyField = "Programmable On/Off Output: Digital Frequency In 2", psEnabled[14], {psEnabled[14]}
+ displayOnlyField = "Programmable On/Off Output: Tach Out", psEnabled[15], {psEnabled[15]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out A", psEnabled[16], {psEnabled[16]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out B", psEnabled[17], {psEnabled[17]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out C", psEnabled[18], {psEnabled[18]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out D", psEnabled[19], {psEnabled[19]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out E", psEnabled[20], {psEnabled[20]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out F", psEnabled[21], {psEnabled[21]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out G", psEnabled[22], {psEnabled[22]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out H", psEnabled[23], {psEnabled[23]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out A", psEnabled[24], {psEnabled[24]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out B", psEnabled[25], {psEnabled[25]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out C", psEnabled[26], {psEnabled[26]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out D", psEnabled[27], {psEnabled[27]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out E", psEnabled[28], {psEnabled[28]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out F", psEnabled[29], {psEnabled[29]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out G", psEnabled[30], {psEnabled[30]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out H", psEnabled[31], {psEnabled[31]}
+
+ displayOnlyField = "Programmable On/Off Output: CANout01", psEnabled[32], {psEnabled[32]}
+ displayOnlyField = "Programmable On/Off Output: CANout02", psEnabled[33], {psEnabled[33]}
+ displayOnlyField = "Programmable On/Off Output: CANout03", psEnabled[34], {psEnabled[34]}
+ displayOnlyField = "Programmable On/Off Output: CANout04", psEnabled[35], {psEnabled[35]}
+ displayOnlyField = "Programmable On/Off Output: CANout05", psEnabled[36], {psEnabled[36]}
+ displayOnlyField = "Programmable On/Off Output: CANout06", psEnabled[37], {psEnabled[37]}
+ displayOnlyField = "Programmable On/Off Output: CANout07", psEnabled[38], {psEnabled[38]}
+ displayOnlyField = "Programmable On/Off Output: CANout08", psEnabled[39], {psEnabled[39]}
+ displayOnlyField = "Programmable On/Off Output: CANout09", psEnabled[40], {psEnabled[40]}
+ displayOnlyField = "Programmable On/Off Output: CANout10", psEnabled[41], {psEnabled[41]}
+ displayOnlyField = "Programmable On/Off Output: CANout11", psEnabled[42], {psEnabled[42]}
+ displayOnlyField = "Programmable On/Off Output: CANout12", psEnabled[43], {psEnabled[43]}
+ displayOnlyField = "Programmable On/Off Output: CANout13", psEnabled[44], {psEnabled[44]}
+ displayOnlyField = "Programmable On/Off Output: CANout14", psEnabled[45], {psEnabled[45]}
+ displayOnlyField = "Programmable On/Off Output: CANout15", psEnabled[46], {psEnabled[46]}
+ displayOnlyField = "Programmable On/Off Output: CANout16", psEnabled[47], {psEnabled[47]}
+ displayOnlyField = "Programmable On/Off Output: Loop 1", psEnabled[48], {psEnabled[48]}
+ displayOnlyField = "Programmable On/Off Output: Loop 2", psEnabled[49], {psEnabled[49]}
+ displayOnlyField = "Programmable On/Off Output: Loop 3", psEnabled[50], {psEnabled[50]}
+
+ displayOnlyField = "EGO 1 Port", egoport1
+ displayOnlyField = "EGO 2 Port", egoport2, {egonum > 1}
+ displayOnlyField = "EGO 3 Port", egoport3, {egonum > 2}
+ displayOnlyField = "EGO 4 Port", egoport4, {egonum > 3}
+ displayOnlyField = "EGO 5 Port", egoport5, {egonum > 4}
+ displayOnlyField = "EGO 6 Port", egoport6, {egonum > 5}
+ displayOnlyField = "EGO 7 Port", egoport7, {egonum > 6}
+ displayOnlyField = "EGO 8 Port", egoport8, {egonum > 7}
+ displayOnlyField = "EGO 9 Port", egoport9, {egonum > 8}
+ displayOnlyField = "EGO 10 Port", egoport10, {egonum > 9}
+ displayOnlyField = "EGO 11 Port", egoport11, {egonum > 10}
+ displayOnlyField = "EGO 12 Port", egoport12, {egonum > 11}
+ displayOnlyField = "Generic Sensor 01 Input", sensor01_source, {sensor01_source}
+ displayOnlyField = "Generic Sensor 02 Input", sensor02_source, {sensor02_source}
+ displayOnlyField = "Generic Sensor 03 Input", sensor03_source, {sensor03_source}
+ displayOnlyField = "Generic Sensor 04 Input", sensor04_source, {sensor04_source}
+ displayOnlyField = "Generic Sensor 05 Input", sensor05_source, {sensor05_source}
+ displayOnlyField = "Generic Sensor 06 Input", sensor06_source, {sensor06_source}
+ displayOnlyField = "Generic Sensor 07 Input", sensor07_source, {sensor07_source}
+ displayOnlyField = "Generic Sensor 08 Input", sensor08_source, {sensor08_source}
+ displayOnlyField = "Generic Sensor 09 Input", sensor09_source, {sensor09_source}
+ displayOnlyField = "Generic Sensor 10 Input", sensor10_source, {sensor10_source}
+ displayOnlyField = "Generic Sensor 11 Input", sensor11_source, {sensor11_source}
+ displayOnlyField = "Generic Sensor 12 Input", sensor12_source, {sensor12_source}
+ displayOnlyField = "Generic Sensor 13 Input", sensor13_source, {sensor13_source}
+ displayOnlyField = "Generic Sensor 14 Input", sensor14_source, {sensor14_source}
+ displayOnlyField = "Generic Sensor 15 Input", sensor15_source, {sensor15_source}
+ displayOnlyField = "Generic Sensor 16 Input", sensor16_source, {sensor16_source}
+ displayOnlyField = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ displayOnlyField = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ displayOnlyField = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ displayOnlyField = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ displayOnlyField = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ displayOnlyField = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ displayOnlyField = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ displayOnlyField = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ displayOnlyField = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ displayOnlyField = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ displayOnlyField = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ displayOnlyField = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ displayOnlyField = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ displayOnlyField = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ displayOnlyField = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ displayOnlyField = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+
+ dialog = iopinlist2, ".", yAxis
+ displayOnlyField = "PWM Idle Output", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "PWM Idle 3 Wire Mode", pwmidle_freq_pin3, { (IdleCtl == 2) && pwmidle_freq_pin3 }
+ displayOnlyField = "Fan Control Output", fanctl_settings_pin, { fanctl_settings_on }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && ac_idleup_io_out }
+ displayOnlyField = "AC Idle-up Input", ac_idleup_io_in, { ac_idleup_settings }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport_t == 0}
+ displayOnlyField = "MAP Frequency Input", mapport_f, {mapport_t == 1}
+ displayOnlyField = "MAP 2nd Port", map2port, {(mapport_t == 0) && (mapport != 7) && map2port}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {(MAFOption_t == 0)}
+ displayOnlyField = "MAF Frequency Input", MAFOption_f, {(MAFOption_t == 1)}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Flex Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+ displayOnlyField = "VVT1 Output", vvt_out1, {vvt_opt1_on}
+ displayOnlyField = "VVT2 Output", vvt_out2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Output", vvt_out3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Output", vvt_out4, {vvt_opt1_on > 3}
+ displayOnlyField = "VVT1 Output (complementary)", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT2 Output (complementary)", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT3 Output (complementary)", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT4 Output (complementary)", vvt_softout4, {(vvt_opt1_on > 3) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT1 Input", vvt_opt3_cam1, {0}
+ displayOnlyField = "VVT2 Input", vvt_opt3_cam2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Input", vvt_opt3_cam3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Input", vvt_opt3_cam4, {vvt_opt1_on > 3}
+ displayOnlyField = "Fuel Table Switching Input", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ displayOnlyField = "Spark Table Switching Input", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ displayOnlyField = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ displayOnlyField = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ displayOnlyField = "Dual Fuel Input", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ displayOnlyField = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ displayOnlyField = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ displayOnlyField = "Boost Control Output (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control Output (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Boost Control2 Output (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control2 Output (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Gen PWM A Output", pwm_opt2_a, {pwm_opt_on_a}
+ displayOnlyField = "Gen PWM B Output", pwm_opt2_b, {pwm_opt_on_b}
+ displayOnlyField = "Gen PWM C Output", pwm_opt2_c, {pwm_opt_on_c}
+ displayOnlyField = "Gen PWM D Output", pwm_opt2_d, {pwm_opt_on_d}
+ displayOnlyField = "Gen PWM E Output", pwm_opt2_e, {pwm_opt_on_e}
+ displayOnlyField = "Gen PWM F Output", pwm_opt2_f, {pwm_opt_on_f}
+ displayOnlyField = "Generic Closed-Loop A Output", generic_pid_pwm_outs_a, {generic_pid_flags_a_on}
+ displayOnlyField = "Generic Closed-Loop B Output", generic_pid_pwm_outs_b, {generic_pid_flags_b_on}
+
+ displayOnlyField = "WI Pump Output", water_pins_pump, {water_freq_on}
+ displayOnlyField = "WI Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ displayOnlyField = "VSS1 Analogue sensor", vss1_an, {vss_opt0_1 == 2}
+ displayOnlyField = "VSS1 Digi Input", vss_opt1, {vss_opt0_1 == 1}
+ displayOnlyField = "VSS1 CAN PWM Port", vss1_pwmseq, {vss_opt1 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "VSS2 Analogue Sensor", vss2_an, {vss_opt0_2 == 2}
+ displayOnlyField = "VSS2 Digi Input", vss_opt2, {vss_opt0_2 == 1}
+ displayOnlyField = "VSS2 CAN PWM Port", vss2_pwmseq, {vss_opt2 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "Shaft Sensor 1", ss_opt1, {ss_opt1}
+ displayOnlyField = "Shaft Sensor 2", ss_opt2, {ss_opt2}
+ displayOnlyField = "VSS Output", vssout_opt, {vssout_opt}
+ displayOnlyField = "Gear Pos. Input", gear_port_an, { (gear_method == 2) }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+ displayOnlyField = "Accelerometer X Input", accXport, {accXport}
+ displayOnlyField = "Accelerometer Y Input", accYport, {accYport}
+ displayOnlyField = "Accelerometer Z Input", accZport, {accZport}
+ displayOnlyField = "SDcard Datalog button", log_style2_but, {log_style_on2 == 2}
+ displayOnlyField = "SDcard LED indicator", log_style_led, {log_style_on2}
+ displayOnlyField = "SDcard Stream Input", log_style3_adc, {log_style_block == 1}
+ displayOnlyField = "SDcard trigger output", sdpulse_out, {log_style_on2 >= 2}
+ displayOnlyField = "Nitrous Stage 1 output - nitrous", n2o1n_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 1 output - fuel", n2o1f_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable input on:", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 2 output - nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "Nitrous Stage 2 output - fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "AFR safety Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Variable launch Input", launch_var_on, { launch_opt_on >0 }
+ displayOnlyField = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ displayOnlyField = "Anti-Lag Enable Input", als_in_pin, {als_in_pin}
+ displayOnlyField = "ALS On/off Output", als_out_pin, {als_in_pin}
+ displayOnlyField = "ALS PWM Output", als_opt_pwmout, {als_in_pin}
+ displayOnlyField = "ALS Output", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ displayOnlyField = "Traction Control Enable Input", tc_enin, {tc_opt_on}
+ displayOnlyField = "Traction Control Light output", tc_led_out, {tc_opt_on}
+ displayOnlyField = "Torque Convertor Lockup", tclu_outpin, {tclu_outpin}
+ displayOnlyField = "TCLU Enable Input", tclu_enablepin, {tclu_outpin}
+ displayOnlyField = "TCLU Brake switch", tclu_brakepin, {tclu_outpin}
+ displayOnlyField = "Staged Injection Relay Output 1", staged_out1, { staged_first_param }
+ displayOnlyField = "Staged Injection Relay Output 2", staged_out2, { staged_first_param }
+ displayOnlyField = "Alternator Control Output", alternator_controlout, {alternator_opt_mode}
+ displayOnlyField = "Alternator Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+ displayOnlyField = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ displayOnlyField = "Battery Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ displayOnlyField = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ displayOnlyField = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ displayOnlyField = "Primary Pressure Input", fp_press_in, {fp_press_in}
+ displayOnlyField = "Primary Fuel Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Secondary Fuel Pressure Input", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press}
+ displayOnlyField = "Secondary Fuel Temperature Input", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp}
+
+ dialog = iopinlist, "Feature List Showing I/O pins", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iopins"
+ panel = iopinlist1, West
+ panel = iopinlist2, East
+
+; now list of pins and what features they are assigned to.
+ dialog = pinusage1, ".", yAxis
+ displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) }
+ displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) }
+ displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) }
+ displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) }
+ displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) }
+ displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) }
+ displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) }
+ displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) }
+
+ displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) }
+ displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) }
+ displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) }
+ displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) }
+ displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) }
+ displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) }
+ displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) }
+ displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) }
+
+
+ dialog = pinusage2, ".", yAxis
+ displayOnlyField = "Injector I", { bitStringValue( portLabels , portusage_t[1] ) }
+ displayOnlyField = "Injector J", { bitStringValue( portLabels , portusage_t[3] ) }
+ displayOnlyField = "Digital Switched in 1", { bitStringValue( portLabels , portusage_e[2] ) }
+
+ displayOnlyField = "Fuel Pump Relay", { bitStringValue( portLabels , portusage_e[4] ) }
+
+ displayOnlyField = "Digital Switched in 3", { bitStringValue( portLabels , portusage_h[6] ) }
+ displayOnlyField = "Digital Switched 12V in", { bitStringValue( portLabels , portusage_h[7] ) }
+
+ displayOnlyField = "IAC1", { bitStringValue( portLabels , portusage_j[0] ) }
+ displayOnlyField = "IAC2", { bitStringValue( portLabels , portusage_j[1] ) }
+
+ displayOnlyField = "Tacho Out", { bitStringValue( portLabels , portusage_k[0] ) }
+ displayOnlyField = "Digital Switched In 2", { bitStringValue( portLabels , portusage_k[2] ) }
+
+ displayOnlyField = "Hardware PWM A", { bitStringValue( portLabels , portusage_pwmscl[1] ) }
+ displayOnlyField = "Hardware PWM B", { bitStringValue( portLabels , portusage_pwmscl[3] ) }
+ displayOnlyField = "MAP In", { bitStringValue( portLabels , portusage_ad0l[0] ) }
+ displayOnlyField = "O2", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ field = ""
+ field = ""
+
+ dialog = pinusage3, ".", yAxis
+ displayOnlyField = "PWM Out 2", { bitStringValue( portLabels , portusage_p[2] ) }
+ displayOnlyField = "High Current Out 3", { bitStringValue( portLabels , portusage_p[3] ) }
+ displayOnlyField = "High Current Out 1", { bitStringValue( portLabels , portusage_p[4] ) }
+ displayOnlyField = "High Current Out 2", { bitStringValue( portLabels , portusage_p[5] ) }
+ displayOnlyField = "PWM Out 3", { bitStringValue( portLabels , portusage_p[6] ) }
+ displayOnlyField = "PWM Idle Out 1", { bitStringValue( portLabels , portusage_p[7] ) }
+
+; displayOnlyField = "Primary tach", { bitStringValue( portLabels , portusage_t[0] ) }
+ displayOnlyField = "Cam Input", { bitStringValue( portLabels , portusage_t[2] ) }
+
+ displayOnlyField = "Digital Frequency In 1", { bitStringValue( portLabels , portusage_t[4] ) }
+ displayOnlyField = "Digital Frequency In 2", { bitStringValue( portLabels , portusage_t[5] ) }
+ displayOnlyField = "Digital Frequency In 3", { bitStringValue( portLabels , portusage_t[6] ) }
+; displayOnlyField = "PT7", { bitStringValue( portLabels , portusage_t[7] ) }
+
+ displayOnlyField = "Analog in 3", { bitStringValue( portLabels , portusage_ad0h[3] ) }
+ displayOnlyField = "Analog in 1", { bitStringValue( portLabels , portusage_ad0h[4] ) }
+ displayOnlyField = "Analog in 2", { bitStringValue( portLabels , portusage_ad0h[5] ) }
+
+; displayOnlyField = "ADC1", { bitStringValue( portLabels , portusage_ad0l[1] ) }
+; displayOnlyField = "ADC2", { bitStringValue( portLabels , portusage_ad0l[2] ) }
+; displayOnlyField = "ADC3", { bitStringValue( portLabels , portusage_ad0l[3] ) }
+; displayOnlyField = "ADC4", { bitStringValue( portLabels , portusage_ad0l[4] ) }
+; displayOnlyField = "ADC5", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ field = ""
+ field = ""
+
+
+ dialog = pinusage4, ".", yAxis
+ displayOnlyField = "CANIN 1", { bitStringValue( portLabels , portusage_canin[0] ) }
+ displayOnlyField = "CANIN 2", { bitStringValue( portLabels , portusage_canin[1] ) }
+ displayOnlyField = "CANIN 3", { bitStringValue( portLabels , portusage_canin[2] ) }
+ displayOnlyField = "CANIN 4", { bitStringValue( portLabels , portusage_canin[3] ) }
+ displayOnlyField = "CANIN 5", { bitStringValue( portLabels , portusage_canin[4] ) }
+ displayOnlyField = "CANIN 6", { bitStringValue( portLabels , portusage_canin[5] ) }
+ displayOnlyField = "CANIN 7", { bitStringValue( portLabels , portusage_canin[6] ) }
+ displayOnlyField = "CANIN 8", { bitStringValue( portLabels , portusage_canin[7] ) }
+
+ displayOnlyField = "CANPWM 1", { bitStringValue( portLabels , portusage_canpwm[0] ) }
+ displayOnlyField = "CANPWM 2", { bitStringValue( portLabels , portusage_canpwm[1] ) }
+ displayOnlyField = "CANPWM 3", { bitStringValue( portLabels , portusage_canpwm[2] ) }
+ displayOnlyField = "CANPWM 4", { bitStringValue( portLabels , portusage_canpwm[3] ) }
+ displayOnlyField = "CANPWM 5", { bitStringValue( portLabels , portusage_canpwm[4] ) }
+ displayOnlyField = "CANPWM 6", { bitStringValue( portLabels , portusage_canpwm[5] ) }
+ displayOnlyField = "CANPWM 7", { bitStringValue( portLabels , portusage_canpwm[6] ) }
+ displayOnlyField = "CANPWM 8", { bitStringValue( portLabels , portusage_canpwm[7] ) }
+
+ dialog = pinusage5, ".", yAxis
+ displayOnlyField = "CANOUT 1", { bitStringValue( portLabels , portusage_canout[0] ) }
+ displayOnlyField = "CANOUT 2", { bitStringValue( portLabels , portusage_canout[1] ) }
+ displayOnlyField = "CANOUT 3", { bitStringValue( portLabels , portusage_canout[2] ) }
+ displayOnlyField = "CANOUT 4", { bitStringValue( portLabels , portusage_canout[3] ) }
+ displayOnlyField = "CANOUT 5", { bitStringValue( portLabels , portusage_canout[4] ) }
+ displayOnlyField = "CANOUT 6", { bitStringValue( portLabels , portusage_canout[5] ) }
+ displayOnlyField = "CANOUT 7", { bitStringValue( portLabels , portusage_canout[6] ) }
+ displayOnlyField = "CANOUT 8", { bitStringValue( portLabels , portusage_canout[7] ) }
+ displayOnlyField = "CANOUT 9", { bitStringValue( portLabels , portusage_canout[8] ) }
+ displayOnlyField = "CANOUT 10", { bitStringValue( portLabels , portusage_canout[9] ) }
+ displayOnlyField = "CANOUT 11", { bitStringValue( portLabels , portusage_canout[10] ) }
+ displayOnlyField = "CANOUT 12", { bitStringValue( portLabels , portusage_canout[11] ) }
+ displayOnlyField = "CANOUT 13", { bitStringValue( portLabels , portusage_canout[12] ) }
+ displayOnlyField = "CANOUT 14", { bitStringValue( portLabels , portusage_canout[13] ) }
+ displayOnlyField = "CANOUT 15", { bitStringValue( portLabels , portusage_canout[14] ) }
+ displayOnlyField = "CANOUT 16", { bitStringValue( portLabels , portusage_canout[15] ) }
+
+ dialog = pinusage6, ".", yAxis
+ displayOnlyField = "Loop 1", { bitStringValue( portLabels , portusage_loop[0] ) }
+ displayOnlyField = "Loop 2", { bitStringValue( portLabels , portusage_loop[1] ) }
+ displayOnlyField = "Loop 3", { bitStringValue( portLabels , portusage_loop[2] ) }
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pinusage7, ".", yAxis
+ displayOnlyField = "CANADC 1", { bitStringValue( portLabels , portusage_canadc[0] ) }
+ displayOnlyField = "CANADC 2", { bitStringValue( portLabels , portusage_canadc[1] ) }
+ displayOnlyField = "CANADC 3", { bitStringValue( portLabels , portusage_canadc[2] ) }
+ displayOnlyField = "CANADC 4", { bitStringValue( portLabels , portusage_canadc[3] ) }
+ displayOnlyField = "CANADC 5", { bitStringValue( portLabels , portusage_canadc[4] ) }
+ displayOnlyField = "CANADC 6", { bitStringValue( portLabels , portusage_canadc[5] ) }
+ displayOnlyField = "CANADC 7", { bitStringValue( portLabels , portusage_canadc[6] ) }
+ displayOnlyField = "CANADC 8", { bitStringValue( portLabels , portusage_canadc[7] ) }
+
+ dialog = pinusage8, ".", yAxis
+ displayOnlyField = "CANADC 9", { bitStringValue( portLabels , portusage_canadc[8] ) }
+ displayOnlyField = "CANADC 10", { bitStringValue( portLabels , portusage_canadc[9] ) }
+ displayOnlyField = "CANADC 11", { bitStringValue( portLabels , portusage_canadc[10] ) }
+ displayOnlyField = "CANADC 12", { bitStringValue( portLabels , portusage_canadc[11] ) }
+ displayOnlyField = "CANADC 13", { bitStringValue( portLabels , portusage_canadc[12] ) }
+ displayOnlyField = "CANADC 14", { bitStringValue( portLabels , portusage_canadc[13] ) }
+ displayOnlyField = "CANADC 15", { bitStringValue( portLabels , portusage_canadc[14] ) }
+ displayOnlyField = "CANADC 16", { bitStringValue( portLabels , portusage_canadc[15] ) }
+
+ dialog = pinusage9, ".", yAxis
+ displayOnlyField = "CANADC 17", { bitStringValue( portLabels , portusage_canadc[16] ) }
+ displayOnlyField = "CANADC 18", { bitStringValue( portLabels , portusage_canadc[17] ) }
+ displayOnlyField = "CANADC 19", { bitStringValue( portLabels , portusage_canadc[18] ) }
+ displayOnlyField = "CANADC 20", { bitStringValue( portLabels , portusage_canadc[19] ) }
+ displayOnlyField = "CANADC 21", { bitStringValue( portLabels , portusage_canadc[20] ) }
+ displayOnlyField = "CANADC 22", { bitStringValue( portLabels , portusage_canadc[21] ) }
+ displayOnlyField = "CANADC 23", { bitStringValue( portLabels , portusage_canadc[22] ) }
+ displayOnlyField = "CANADC 24", { bitStringValue( portLabels , portusage_canadc[23] ) }
+
+ dialog = pinusage, "I/O Pins List Showing Usage - only works when online", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusage"
+ panel = pinusage1, West
+ panel = pinusage2, Center
+ panel = pinusage3, East
+
+ dialog = pinusagem, "", xAxis
+ panel = pinusage4, West
+ panel = pinusage5, Center
+ panel = pinusage6, East
+
+ dialog = pinusageb, "", xAxis
+ panel = pinusage7, West
+ panel = pinusage8, Center
+ panel = pinusage9, East
+
+ dialog = pinusagecan, "Expansion I/O Pins List/Usage - only works when online", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusagecan"
+ panel = pinusagem, North
+ panel = pinusageb, South
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "Afterstart Enrichment (ASE) - Percent Adder"
+ panel = asePct
+ panel = ase_note
+
+ dialog = nestedasePct2, "Afterstart Enrichment (ASE) - Percent Adder 2"
+ panel = asePct2
+ panel = ase_note
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = nestedwarmup_curve2, "Warmup Enrichment (WUE) - Percent Multiplier 2"
+ panel = warmup_curve2
+ panel = wc_note
+
+ dialog = tcsettings, "Traction Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#traction"
+ field = "Traction Control", tc_opt_on
+ field = "Method", tc_opt_method, {tc_opt_on}
+ field = "Enable Input", tc_enin, {tc_opt_on}
+ field = "Light output", tc_led_out, {tc_opt_on}
+ field = "Minimum TPS", tc_mintps, {tc_opt_on}
+ field = "Minimum MAP", tc_minmap, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Minimum VSS", tc_minvss, {tc_opt_on && (tc_opt_method != 2) && (tc_opt_method != 3) }
+ field = "VSS1 = driven, VSS2 = undriven wheels"
+; field = "Maximum VSS", tc_maxvss, {tc_opt_on }
+ field = "Slip % Setting", tc_opt_slipcurve, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Slip Threshold", tc_slipthresh, {tc_opt_on && (tc_opt_method == 1) && !tc_opt_slipcurve}
+ field = "Nitrous Control", tc_opt_n2o, {tc_opt_on }
+ field = "Add Fuel To:", tc_opt_bank, {tc_opt_on }
+ field = "When staging bank 1 = primary, bank 2 = secondary"
+
+ dialog = tc_top, "", xAxis
+ panel = tc_retard_curve, West
+ panel = tc_spkcut_curve, East, {spk_mode0 > 1}
+
+ dialog = tc_mid, "", xAxis
+ panel = tc_addfuel_curve, West
+ panel = tc_nitrous_curve, East, {N2Oopt_2}
+
+ dialog = tc_btm, "", xAxis
+
+ panel = tc_boost_curve, West, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ panel = tc_boost_duty_delta_curve, East, {boost_ctl_settings_on && (boost_ctl_settings_cl != 1)}
+
+ dialog = tc_curves, "Traction Control Reactions", yAxis
+ panel = tc_top, North
+ panel = tc_mid, Center
+ panel = tc_btm, South
+
+ dialog = tcluparams, "Torque Convertor Lockup"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tclu"
+ field = "Output Pin", tclu_outpin
+ field = "Enable Input", tclu_enablepin, {tclu_outpin}
+ field = "Brake Switch", tclu_brakepin, {tclu_outpin}
+ field = "Minimum TPS", tclu_tpsmin, {tclu_outpin}
+ field = "Maximum TPS", tclu_tpsmax, {tclu_outpin}
+ field = "Minimum MAP", tclu_mapmin, {tclu_outpin}
+ field = "Maximum MAP", tclu_mapmax, {tclu_outpin}
+ field = "Use VSS", tclu_opt_vss, {tclu_outpin}
+ field = "Minimum Speed", tclu_vssmin, {tclu_outpin && tclu_opt_vss}
+ field = "Use Gear Value", tclu_opt_gear, {tclu_outpin}
+ field = "Minimum Gear", tclu_gearmin, {tclu_outpin && tclu_opt_gear}
+ field = "Activation Delay", tclu_delay, {tclu_outpin}
+
+ dialog = vvtct, ""
+ field = "."
+ field = "Input"
+ field = "Polarity"
+ field = "No. Teeth"
+ field = "Output"
+ field = "Minimum"
+ field = "Maximum"
+ field = "Int./Exh."
+ field = "Tooth 1"
+ field = "Tooth 2"
+ field = "More Duty Means"
+ field = "Output (2)"
+
+ dialog = vvtc1, ""
+ field = "#CAM1"
+ field = "", vvt_opt3_cam1, {vvt_opt1_on}
+ field = "", vvt_opt2_cam1pol,{vvt_opt1_on && ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3) && (vvt_opt4_decode ==0 )}
+ field = "", vvt_tth1, {(vvt_opt1_on > 0) && (spk_mode0 == 4)}
+ field = "", vvt_out1, {vvt_opt1_on}
+ field = "", vvt_min_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_max_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_cam1tth1, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam1tth2, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_out1_dir, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc2, ""
+ field = "#CAM2"
+ field = "", vvt_opt3_cam2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam2pol,{(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_tth2, {(vvt_opt1_on > 1) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_min_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_max_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_cam2tth1, {0}
+ field = "", vvt_cam2tth2, {0}
+ field = "", vvt_out2_dir, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc3, ""
+ field = "#CAM3"
+ field = "", vvt_opt3_cam3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam3pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth3, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam3tth1, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam3tth2, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_out3_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc4, ""
+ field = "#CAM4"
+ field = "", vvt_opt3_cam4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam4pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth4, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam4tth1, {0}
+ field = "", vvt_cam4tth2, {0}
+ field = "", vvt_out4_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtcams, "Cam Settings", xAxis
+ panel = vvtct
+ panel = vvtc1
+ panel = vvtc2
+ panel = vvtc3
+ panel = vvtc4
+
+ dialog = vvtinext, ""
+ field = "."
+ field = "Use Hold Duty"
+ field = "Hold/Neutral Duty"
+ field = "Proportional Gain"
+ field = "Integral Gain"
+ field = "Differential Gain"
+ field = "Table is Advance/Retard"
+
+ dialog = vvtinexi, ""
+ field = "#Intake"
+ field = "", vvt_opt2_use_hold_intake, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_hold_duty, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt2_use_hold_intake}
+ field = "", vvt_ctl_Kp, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Ki, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Kd, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Advance"
+
+ dialog = vvtinexe, ""
+ field = "#Exhaust"
+ field = "", vvt_opt2_use_hold_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_hold_duty_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) && vvt_opt2_use_hold_exhaust }
+ field = "", vvt_ctl_Kp_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Ki_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Kd_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_opt1_dir_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+
+ dialog = vvtinex, "PID Parameters", xAxis
+ panel = vvtinext
+ panel = vvtinexi
+ panel = vvtinexe
+
+ dialog = vvt_test, "Test", xAxis
+ field = "Cam", vvt_opt1_tst, {vvt_opt1_on}
+ field = "Duty", vvt_test_duty, {vvt_opt1_on && vvt_opt1_tst}
+
+ dialog = vvtl, ""
+ field = "No. VVTs", vvt_opt1_on
+ field = "Cam Decoder", vvt_opt4_decode,{vvt_opt1_on && (spk_mode0 == 4)}
+ field = "Frequency", vvt_opt6_freq, {vvt_opt1_on && vvt_out1}
+ field = "On/off or Variable (PID)", vvt_opt2_pid2, {vvt_opt1_on}
+ field = "Adjust Inj. Timing Based On", vvt_opt5_add1, {vvt_opt1_on}
+ field = "Commanded vs. Actual", vvt_opt5_add2, {vvt_opt1_on && vvt_opt5_add1}
+ field = "Inj. Timing Adjustment", vvt_onoff_ang, {vvt_opt1_on && !vvt_opt2_pid2 && vvt_opt5_add1}
+ field = "Load Y Axis In Tables", vvt_opt7_yaxis, {vvt_opt1_on}
+ field = "Minimum CLT", vvt_minclt, {vvt_opt1_on}
+ field = "VVT Maximum Slew", vvt_slew, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvt_test
+
+ dialog = vvtr, ""
+ field = "Control Interval", vvt_opt1_int, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Control Interval Time", vvt_ctl_ms, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt1_int}
+ field = "Range Check Measured Angles", vvt_opt5_err, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Tooth filter", vvt_opt1_filter, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Minimum VVT Duty", vvt_minduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Maximum VVT Duty", vvt_maxduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvtinex
+
+ dialog = vvtparams2, "VVT Settings", xAxis
+ panel = vvtl
+ panel = vvtr
+
+ dialog = vvtparams, "VVT Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvt"
+ panel = vvtparams2
+ panel = vvtcams
+
+ dialog = spk_trimaTblTitle, "Cyl #1"
+ panel = spk_trimaTbl
+ dialog = spk_trimbTblTitle, "Cyl #2"
+ panel = spk_trimbTbl
+ dialog = spk_trimcTblTitle, "Cyl #3"
+ panel = spk_trimcTbl
+ dialog = spk_trimdTblTitle, "Cyl #4"
+ panel = spk_trimdTbl
+
+ dialog = spk_trimadt, "", xAxis
+ panel = spk_trimaTblTitle
+ panel = spk_trimbTblTitle
+ dialog = spk_trimadb, "", xAxis
+ panel = spk_trimcTblTitle
+ panel = spk_trimdTblTitle
+
+ dialog = spk_trimad,"Spark Cyl 1-4 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimadt
+ panel = spk_trimadb
+
+ dialog = spk_trimeTblTitle, "Cyl #5"
+ panel = spk_trimeTbl
+ dialog = spk_trimfTblTitle, "Cyl #6"
+ panel = spk_trimfTbl
+ dialog = spk_trimgTblTitle, "Cyl #7"
+ panel = spk_trimgTbl
+ dialog = spk_trimhTblTitle, "Cyl #8"
+ panel = spk_trimhTbl
+
+ dialog = spk_trimeht, "", xAxis
+ panel = spk_trimeTblTitle
+ panel = spk_trimfTblTitle
+ dialog = spk_trimehb, "", xAxis
+ panel = spk_trimgTblTitle
+ panel = spk_trimhTblTitle
+
+ dialog = spk_trimeh,"Spark Cyl 5-8 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimeht
+ panel = spk_trimehb
+
+ dialog = spk_trimiTblTitle, "Cyl #9"
+ panel = spk_trimiTbl
+ dialog = spk_trimjTblTitle, "Cyl #10"
+ panel = spk_trimjTbl
+ dialog = spk_trimkTblTitle, "Cyl #11"
+ panel = spk_trimkTbl
+ dialog = spk_trimlTblTitle, "Cyl #12"
+ panel = spk_trimlTbl
+
+ dialog = spk_trimilt, "", xAxis
+ panel = spk_trimiTblTitle
+ panel = spk_trimjTblTitle
+
+ dialog = spk_trimilb, "", xAxis
+ panel = spk_trimkTblTitle
+ panel = spk_trimlTblTitle
+
+ dialog = spk_trimil,"Spark Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimilt
+ panel = spk_trimilb
+
+
+
+
+ dialog = inj_trimaTblTitle, "Cyl #1"
+ panel = inj_trimaTbl, Center
+ dialog = inj_trimbTblTitle, "Cyl #2"
+ panel = inj_trimbTbl
+ dialog = inj_trimcTblTitle, "Cyl #3"
+ panel = inj_trimcTbl
+ dialog = inj_trimdTblTitle, "Cyl #4"
+ panel = inj_trimdTbl
+
+ dialog = inj_trimadt, "", xAxis
+ panel = inj_trimaTblTitle
+ panel = inj_trimbTblTitle
+ dialog = inj_trimadb, "", xAxis
+ panel = inj_trimcTblTitle
+ panel = inj_trimdTblTitle
+
+ dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimadt
+ panel = inj_trimadb
+
+ dialog = inj_trimeTblTitle, "Cyl #5"
+ panel = inj_trimeTbl, Center
+ dialog = inj_trimfTblTitle, "Cyl #6"
+ panel = inj_trimfTbl
+ dialog = inj_trimgTblTitle, "Cyl #7"
+ panel = inj_trimgTbl
+ dialog = inj_trimhTblTitle, "Cyl #8"
+ panel = inj_trimhTbl
+
+ dialog = inj_trimeht, "", xAxis
+ panel = inj_trimeTblTitle
+ panel = inj_trimfTblTitle
+ dialog = inj_trimehb, "", xAxis
+ panel = inj_trimgTblTitle
+ panel = inj_trimhTblTitle
+
+ dialog = inj_trimeh,"Injector Cyl 5-7 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimeht
+ panel = inj_trimehb
+
+ dialog = inj_trimiTblTitle, "Cyl #9"
+ panel = inj_trimiTbl
+ dialog = inj_trimjTblTitle, "Cyl #10"
+ panel = inj_trimjTbl
+ dialog = inj_trimkTblTitle, "Cyl #11"
+ panel = inj_trimkTbl
+ dialog = inj_trimlTblTitle, "Cyl #12"
+ panel = inj_trimlTbl
+
+ dialog = inj_trimilt, "", xAxis
+ panel = inj_trimiTblTitle
+ panel = inj_trimjTblTitle
+ dialog = inj_trimilb, "", xAxis
+ panel = inj_trimkTblTitle
+ panel = inj_trimlTblTitle
+
+ dialog = inj_trimil,"Injector Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimilt
+ panel = inj_trimilb
+
+
+
+
+ dialog = antilag, "Turbo Anti-Lag (ALS)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#als"
+ field = "#Caution! Anti-lag is very hard on your turbo"
+ field = "# and engine. Use at your risk."
+ field = "Anti-lag Enable Input", als_in_pin
+; field = "Minimum TPS", als_mintps, {als_in_pin}
+ field = "Maximum TPS", als_maxtps, {als_in_pin}
+ field = "Minimum RPM", als_minrpm, {als_in_pin}
+ field = "Maximum RPM", als_maxrpm, {als_in_pin}
+ field = "Maximum MAT", als_maxmat, {als_in_pin}
+ field = "Maximum ALS time", als_maxtime, {als_in_pin}
+ field = "Time Between Activations", als_pausetime,{als_in_pin}
+ field = "Minimum CLT", als_minclt, {als_in_pin}
+ field = "Maximum CLT", als_maxclt, {als_in_pin}
+ field = "Enable Cyclic Fuel Cut", als_opt_fc, {als_in_pin && hardware_fuel && sequential}
+ field = "Fuel cut likely unsafe with Staging"
+ field = "Enable Cyclic Spark Cut", als_opt_sc, {als_in_pin}
+ field = "-"
+ field = "Enable Roving Idle Fuel Cut", als_opt_ri, {als_in_pin}
+ field = "-"
+ field = "Use Idle Valve", als_opt_idle, {als_in_pin}
+ field = "Idle Valve Duty", als_iac_duty, { als_in_pin && als_opt_idle && (IdleCtl == 2) }
+ field = "Idle Valve Steps", als_iac_steps, { als_in_pin && als_opt_idle && (IdleCtl == 3)}
+ field = "-"
+ field = "On/off Output", als_out_pin, {als_in_pin}
+ field = "-"
+ field = "PWM Output", als_opt_pwmout, {als_in_pin}
+ field = "Output Port/Pin", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ field = "Output Duty", als_pwm_duty, {als_in_pin && als_opt_pwmout}
+ field = "Frequency", als_pwm_opt_freq, {als_in_pin && als_opt_pwmout}
+ field = ""
+
+ dialog = als_left1, "Added Fuel %age"
+ panel = als_addfuel_tbl
+
+ dialog = als_left2, "ALS Timing"
+ panel = als_timing_tbl
+
+ dialog = als_right1, "Spark Cut %"
+ panel = als_sparkcut_tbl, North, {als_opt_sc}
+
+ dialog = als_right2, "Fuel Cut %"
+ panel = als_fuelcut_tbl, South, {als_opt_fc && hardware_fuel && sequential}}
+
+ dialog = antilag_left, ""
+ panel = als_left1, North
+ panel = als_left2, South
+
+ dialog = antilag_right, "", border
+ panel = als_right1, North
+ panel = als_right2, South
+
+ dialog = antilagtables, "Turbo Anti-lag Tables", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alstables"
+ panel = antilag_left, West
+ panel = antilag_right, East
+
+ dialog = flash_unlock, "Un/Lock Calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+
+ field = "Always re-lock after use"
+
+ dialog = gen_pwm_left_a, ""
+ field = "Enable Generic PWM A", pwm_opt_on_a
+ field = "Output Port/Pin", pwm_opt2_a, {pwm_opt_on_a}
+ field = "Frequency / On-Off", pwm_opt_freq_a, {pwm_opt_on_a}
+ field = "On Above Duty", pwm_onabove_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ field = "Off Below Duty", pwm_offbelow_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_a_offset, pwm_opt_load_a_size, {pwm_opt_on_a}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_a, {pwm_opt_on_a}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_grapha, "", card
+ panel = pwm_duties_Tbl_a, Center, {pwm_opt_on_a && (pwm_opt_curve_a == 0)}
+ panel = pwm_curve_a, Center, {pwm_opt_on_a && pwm_opt_curve_a}
+
+ dialog = gen_pwm_a, "Generic PWM A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_a, West
+ panel = gen_pwm_curve_grapha, Center
+
+ dialog = gen_pwm_left_b, ""
+ field = "Enable Generic PWM B", pwm_opt_on_b
+ field = "Output Port/Pin", pwm_opt2_b, {pwm_opt_on_b}
+ field = "Frequency / On-Off", pwm_opt_freq_b, {pwm_opt_on_b}
+ field = "On Above Duty", pwm_onabove_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ field = "Off Below Duty", pwm_offbelow_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_b_offset, pwm_opt_load_b_size, {pwm_opt_on_b}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_b, {pwm_opt_on_b}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphb, "", card
+ panel = pwm_duties_Tbl_b, Center, {pwm_opt_on_b && (pwm_opt_curve_b == 0)}
+ panel = pwm_curve_b, Center, {pwm_opt_on_b && pwm_opt_curve_b}
+
+ dialog = gen_pwm_b, "Generic PWM B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_b, West
+ panel = gen_pwm_curve_graphb, Center
+
+ dialog = gen_pwm_left_c, ""
+ field = "Enable Generic PWM C", pwm_opt_on_c
+ field = "Output Port/Pin", pwm_opt2_c, {pwm_opt_on_c}
+ field = "Frequency / On-Off", pwm_opt_freq_c, {pwm_opt_on_c}
+ field = "On Above Duty", pwm_onabove_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ field = "Off Below Duty", pwm_offbelow_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_c_offset, pwm_opt_load_c_size, {pwm_opt_on_c}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_c, {pwm_opt_on_c}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphc, "", card
+ panel = pwm_duties_Tbl_c, Center, {pwm_opt_on_c && (pwm_opt_curve_c == 0)}
+ panel = pwm_curve_c, Center, {pwm_opt_on_c && pwm_opt_curve_c}
+
+ dialog = gen_pwm_c, "Generic PWM C", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_c, West
+ panel = gen_pwm_curve_graphc, Center
+
+ dialog = gen_pwm_left_d, ""
+ field = "Enable Generic PWM D", pwm_opt_on_d
+ field = "Output Port/Pin", pwm_opt2_d, {pwm_opt_on_d}
+ field = "Frequency / On-Off", pwm_opt_freq_d, {pwm_opt_on_d}
+ field = "On Above Duty", pwm_onabove_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ field = "Off Below Duty", pwm_offbelow_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_d_offset, pwm_opt_load_d_size, {pwm_opt_on_d}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_d, {pwm_opt_on_d}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphd, "", card
+ panel = pwm_duties_Tbl_d, Center, {pwm_opt_on_d && (pwm_opt_curve_d == 0)}
+ panel = pwm_curve_d, Center, {pwm_opt_on_d && pwm_opt_curve_d}
+
+ dialog = gen_pwm_d, "Generic PWM D", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_d, West
+ panel = gen_pwm_curve_graphd, Center
+
+ dialog = gen_pwm_left_e, ""
+ field = "Enable Generic PWM E", pwm_opt_on_e
+ field = "Output Port/Pin", pwm_opt2_e, {pwm_opt_on_e}
+ field = "Frequency / On-Off", pwm_opt_freq_e, {pwm_opt_on_e}
+ field = "On Above Duty", pwm_onabove_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ field = "Off Below Duty", pwm_offbelow_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_e_offset, pwm_opt_load_e_size, {pwm_opt_on_e}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_e, {pwm_opt_on_e}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphe, "", card
+ panel = pwm_duties_Tbl_e, Center, {pwm_opt_on_e && (pwm_opt_curve_e == 0)}
+ panel = pwm_curve_e, Center, {pwm_opt_on_e && pwm_opt_curve_e}
+
+ dialog = gen_pwm_e, "Generic PWM E", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_e, West
+ panel = gen_pwm_curve_graphe, Center
+
+ dialog = gen_pwm_left_f, ""
+ field = "Enable Generic PWM F", pwm_opt_on_f
+ field = "Output Port/Pin", pwm_opt2_f, {pwm_opt_on_f}
+ field = "Frequency / On-Off", pwm_opt_freq_f, {pwm_opt_on_f}
+ field = "On Above Duty", pwm_onabove_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ field = "Off Below Duty", pwm_offbelow_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_f_offset, pwm_opt_load_f_size, {pwm_opt_on_f}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_f, {pwm_opt_on_f}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphf, "", card
+ panel = pwm_duties_Tbl_f, Center, {pwm_opt_on_f && (pwm_opt_curve_f == 0)}
+ panel = pwm_curve_f, Center, {pwm_opt_on_f && pwm_opt_curve_f}
+
+ dialog = gen_pwm_f, "Generic PWM F", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_f, West
+ panel = gen_pwm_curve_graphf, Center
+
+ dialog = map_sample_dialog_south, "MAP Sample General Settings"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "Map Sample Window", map_sample_duration, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = ""
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (hardware_cam == 2) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = map_sample_dialog, "MAP Sample Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mapsamp"
+ panel = mapsample_curve, Center, { !mapsample_opt2 }
+ panel = map_sample_dialog_south, South
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Mode", shift_cut_auto, { shift_cut_on }
+ field = "Cut fuel", shift_cut_fuel, { shift_cut_on }
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time (Base)", shift_cut_time, { shift_cut_on }
+ field = "Gear Based Delay", shift_cut_gear, { shift_cut_on }
+ field = "Additional Delay 1-2", shift_cut_add12, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 2-3", shift_cut_add23, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 3-4", shift_cut_add34, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 4-5", shift_cut_add45, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 5-6", shift_cut_add56, { shift_cut_on && shift_cut_gear }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_on}
+ field = "Re-Shift Hold-Off Time", shift_cut_reshift
+ field = "Automatic mode shift points"
+ field = "Shift RPM 1-2", shift_cut_rpm12, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 2-3", shift_cut_rpm23, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 3-4", shift_cut_rpm34, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 4-5", shift_cut_rpm45, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 5-6", shift_cut_rpm56, { shift_cut_on && shift_cut_auto }
+
+ dialog = fan_control, "Fan Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fanctl"
+ field = "Fan Control On", fanctl_settings_on
+ field = "Fan Control Idles up?", fanctl_settings_idleup, { fanctl_settings_on }
+ field = "Output Pin", fanctl_settings_pin, { fanctl_settings_on }
+ field = "Idle-up Delay", fanctl_idleup_delay, { fanctl_settings_on && fanctl_settings_idleup }
+ field = "Idle-up Duty", fanctl_idleup_adder_duty, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 2) }
+ field = "Idle-up Steps", fanctl_idleup_adder_steps, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 3) }
+ field = "Idle-up Target Increase", fan_idleup_cl_targetadder, { fanctl_settings_on && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Fan On Temperature", fanctl_ontemp, { fanctl_settings_on }
+ field = "Fan Off Temperature", fanctl_offtemp, { fanctl_settings_on }
+ field = "Allow fan When Engine Off", fanctl_opt2_engineoff, { fanctl_settings_on }
+ field = "Fan On With AC On?", fan_ctl_settings_acfan, { fanctl_settings_on && ac_idleup_settings }
+ field = "Fan Shutoff"
+ field = "TPS Shutoff", fan_idleup_tps_offpoint, { fanctl_settings_on }
+ field = "TPS Hysteresis", fan_idleup_tps_hyst, { fanctl_settings_on }
+ field = "VSS Shutoff", fan_idleup_vss_offpoint, { fanctl_settings_on && (vss_opt0_1) }
+ field = "VSS Hyst", fan_idleup_vss_hyst, { fanctl_settings_on && (vss_opt0_1) }
+
+ dialog = ac_idleup, "Air Conditioning Idle-Up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#acidle"
+ field = "A/C Idle-Up", ac_idleup_settings
+ field = "Idle-Up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-Up Input", ac_idleup_io_in, { ac_idleup_settings }
+ field = "Input Polarity", ac_idleup_settings_inv, { ac_idleup_settings }
+ field = "Idle-Up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-Up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor delay since last on", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty", ac_idleup_adder_duty, { (IdleCtl == 2) && ac_idleup_settings }
+ field = "Idle-up Steps", ac_idleup_adder_steps, { (IdleCtl == 3) && ac_idleup_settings }
+ field = "Idle-up Target RPM Adder", ac_idleup_cl_targetadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Idle-up CL load Allowance", ac_idleup_cl_lockout_mapadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "A/C compressor Shutoff"
+ field = "TPS Shutoff", ac_idleup_tps_offpoint, { ac_idleup_settings }
+ field = "TPS Hysteresis", ac_idleup_tps_hyst, { ac_idleup_settings }
+ field = "VSS Shutoff", ac_idleup_vss_offpoint, { ac_idleup_settings && (vss_opt0_1) }
+ field = "VSS Hysteresis", ac_idleup_vss_hyst, { ac_idleup_settings && (vss_opt0_1) }
+ field = "Maximum RPM", ac_idleup_max_rpm, { ac_idleup_settings }
+
+ dialog = sensor_source, "", yAxis
+ field = "Sensor - Source"
+ field = "01", sensor01_source
+ field = "02", sensor02_source
+ field = "03", sensor03_source
+ field = "04", sensor04_source
+ field = "05", sensor05_source
+ field = "06", sensor06_source
+ field = "07", sensor07_source
+ field = "08", sensor08_source
+
+ dialog = sensor_sourceb, "", yAxis
+ field = "Sensor - Source"
+ field = "09", sensor09_source
+ field = "10", sensor10_source
+ field = "11", sensor11_source
+ field = "12", sensor12_source
+ field = "13", sensor13_source
+ field = "14", sensor14_source
+ field = "15", sensor15_source
+ field = "16", sensor16_source
+
+ dialog = sensor_alias, "", yAxis
+ field = "Field Name"
+ field = "", sensor01Alias
+ field = "", sensor02Alias
+ field = "", sensor03Alias
+ field = "", sensor04Alias
+ field = "", sensor05Alias
+ field = "", sensor06Alias
+ field = "", sensor07Alias
+ field = "", sensor08Alias
+
+ dialog = sensor_aliasb, "", yAxis
+ field = "Field Name"
+ field = "", sensor09Alias
+ field = "", sensor10Alias
+ field = "", sensor11Alias
+ field = "", sensor12Alias
+ field = "", sensor13Alias
+ field = "", sensor14Alias
+ field = "", sensor15Alias
+ field = "", sensor16Alias
+
+ dialog = sensor_trans, "", yAxis
+ field = "Transformation"
+ field = "", sensor01_trans, {sensor01_source}
+ field = "", sensor02_trans, {sensor02_source}
+ field = "", sensor03_trans, {sensor03_source}
+ field = "", sensor04_trans, {sensor04_source}
+
+ field = "", sensor05_trans, {sensor05_source}
+ field = "", sensor06_trans, {sensor06_source}
+ field = "", sensor07_trans, {sensor07_source}
+ field = "", sensor08_trans, {sensor08_source}
+
+ dialog = sensor_transb, "", yAxis
+ field = "Transformation"
+ field = "", sensor09_trans, {sensor09_source}
+ field = "", sensor10_trans, {sensor10_source}
+ field = "", sensor11_trans, {sensor11_source}
+ field = "", sensor12_trans, {sensor12_source}
+ field = "", sensor13_trans, {sensor13_source}
+ field = "", sensor14_trans, {sensor14_source}
+ field = "", sensor15_trans, {sensor15_source}
+ field = "", sensor16_trans, {sensor16_source}
+
+ dialog = sensor_val0, "", yAxis
+ field = "0V value"
+ field = "", sensor01_val0, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_val0, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_val0, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_val0, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_val0, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_val0, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_val0, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_val0, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_val0b, "", yAxis
+ field = "0V value"
+ field = "", sensor09_val0, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_val0, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_val0, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_val0, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_val0, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_val0, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_val0, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_val0, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_max, "", yAxis
+ field = "5V value"
+ field = "", sensor01_max, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_max, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_max, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_max, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_max, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_max, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_max, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_max, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_maxb, "", yAxis
+ field = "5V value"
+ field = "", sensor09_max, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_max, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_max, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_max, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_max, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_max, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_max, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_max, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_lag, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor01LF, {sensor01_source}
+ field = "", sensor02LF, {sensor02_source}
+
+ field = "", sensor03LF, {sensor03_source}
+ field = "", sensor04LF, {sensor04_source}
+ field = "", sensor05LF, {sensor05_source}
+ field = "", sensor06LF, {sensor06_source}
+ field = "", sensor07LF, {sensor07_source}
+ field = "", sensor08LF, {sensor08_source}
+
+ dialog = sensor_lagb, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor09LF, {sensor09_source}
+ field = "", sensor10LF, {sensor10_source}
+ field = "", sensor11LF, {sensor11_source}
+ field = "", sensor12LF, {sensor12_source}
+ field = "", sensor13LF, {sensor13_source}
+ field = "", sensor14LF, {sensor14_source}
+ field = "", sensor15LF, {sensor15_source}
+ field = "", sensor16LF, {sensor16_source}
+
+ dialog = sensors_top, "Sensors 1-8", xAxis
+ panel = sensor_source
+ panel = sensor_alias
+ panel = sensor_trans
+ panel = sensor_val0
+ panel = sensor_max
+ panel = sensor_lag
+
+ dialog = sensors_btm, "Sensors 9-16", xAxis
+ panel = sensor_sourceb
+ panel = sensor_aliasb
+ panel = sensor_transb
+ panel = sensor_val0b
+ panel = sensor_maxb
+ panel = sensor_lagb
+
+ dialog = sensors_data, "", yAxis
+ panel = sensors_top
+ panel = sensors_btm
+
+ dialog = sensors_temp, "", xAxis
+ field = "Allow Input Sharing", opt142_gs_share
+ field = "CLT/MAT Units", sensor_temp
+
+ dialog = sensors, "Generic Sensor Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gensens"
+ panel = sensors_data, North
+ panel = sensors_temp, South
+
+ dialog = ITB_settings, "ITB settings"
+ field = "Percent Baro Switchpoint", ITB_load_mappoint
+ field = "Idle TPS Threshold", ITB_load_idletpsthresh
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#itbload"
+ panel = ITB_settings, South
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, East
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafset"
+ field = "Sensor Type", MAFOption_t
+ field = "Voltage Input Port", MAFOption, {MAFOption_t == 0}
+ field = "Frequency Input Port", MAFOption_f, {MAFOption_t == 1}
+ field = "Low Frequency", maf_freq0, {MAFOption_t == 1}
+ field = "High Frequency", maf_freq1, {MAFOption_t == 1}
+ field = "MAT Correction Curve", feature7_mafmat, {MAFOption_t < 2}
+ field = "Use VE1 As Trim Table", feature7_maftrim, {(algorithm == 5) && (MAFOption_t < 2) }
+ field = "MAF Sensor Range", maf_range, {MAFOption_t < 2}
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-Style Calibration Curve (See Tools Menu)", feature7_mafcalib, {MAFOption_t < 2}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical values are 0.0V and 29.7V"
+
+ dialog = waterinj_topl, ""
+ field = "Enable Water/Meth Injection", water_freq_on
+ field = "Pump Output", water_pins_pump, {water_freq_on}
+ field = "Valve Style", water_freq_type, {water_freq_on}
+ field = "Frequency", water_freq, {water_freq_on && (water_freq_type ==2)}
+ field = "Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ dialog = waterinj_topr, ""
+ field = "Enable When.."
+ field = "TPS >", water_tps, {water_freq_on}
+ field = "RPM >", water_rpm, {water_freq_on}
+ field = "MAP >", water_map, {water_freq_on}
+ field = "MAT >", water_mat, {water_freq_on}
+ field = ""
+ field = "Low Fluid Level Input", water_pins_in_shut, {water_freq_on}
+
+ dialog = waterinj_top, "", border
+ panel = waterinj_topl, West
+ panel = waterinj_topr, East
+
+ dialog = waterinj, "Water Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#water"
+ panel = waterinj_top, North
+ panel = waterinjTbl, Center
+
+ dialog = vss1, "Vehicle Speed Sensor 1"
+ field = "VSS1 Input Type", vss_opt0_1
+ field = "Analogue Input", vss1_an, {vss_opt0_1 == 2}
+ field = "Full Scale Speed", vss1_an_max, {vss_opt0_1 == 2}
+ field = "Digital Input", vss_opt1, {vss_opt0_1 == 1}
+ field = "Wheel Diameter", wheeldia1, {vss_opt1 && (((vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss1_pos, {vss_opt0_1 == 1}
+ field = "Pulses", vss1_can_scale_pulse, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth1, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)}
+ field = "PWM Port", vss1_pwmseq, {(vss_opt1 ==15) && (vss_opt0_1 == 1)}
+ field = "Scaler", vss1_can_scale, {(vss_opt1 ==14) && (vss_opt0_1 == 1)}
+ field = "Smoothing lag factor", vss1LF, {vss_opt0_1}
+
+ dialog = vss2, "Vehicle speed sensor 2"
+ field = "VSS2 Input Type", vss_opt0_2
+ field = "Analogue Input", vss2_an, {vss_opt0_2 == 2}
+ field = "Full Scale Speed", vss2_an_max, {vss_opt0_2 == 2}
+ field = "Digital Input", vss_opt2, {vss_opt0_2 == 1}
+ field = "Wheel Diameter", wheeldia2, {vss_opt2 && (((vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss2_pos, {vss_opt0_2 == 1}
+ field = "Pulses", vss2_can_scale_pulse, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth2, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)}
+ field = "PWM Port", vss2_pwmseq, {(vss_opt2 ==15) && (vss_opt0_2 == 1)}
+ field = "Scaler", vss2_can_scale, {(vss_opt2 ==14) && (vss_opt0_2 == 1)}
+ field = "Smoothing Lag Factor", vss2LF, {vss_opt0_2}
+
+ dialog = vss3, "Vehicle Speed Sensor 3 (Matches VSS1)"
+ field = "VSS3 Input Type", vss_opt0_3, {vss_opt0_1}
+ field = "Analogue Input", vss3_an, {vss_opt0_3 && (vss_opt0_1 == 2)}
+ field = "Digital Input", vss_opt3, {vss_opt0_3 && (vss_opt0_1 == 1)}
+ field = "PWM Port", vss3_pwmseq, {(vss_opt3 ==15) && vss_opt0_3 && (vss_opt0_1 == 1)}
+
+ dialog = vss4, "Vehicle speed sensor 4 (matches VSS2)"
+ field = "VSS4 input type", vss_opt0_4, {vss_opt0_2}
+ field = "Analogue Input", vss4_an, {vss_opt0_4 && (vss_opt0_2 == 2)}
+ field = "Digital Input", vss_opt4, {vss_opt0_4 && (vss_opt0_2 == 1)}
+ field = "PWM Port", vss4_pwmseq, {(vss_opt4 ==15) && vss_opt0_4 && (vss_opt0_4 == 1)}
+
+ dialog = vssout, "VSS Output"
+ field = "VSS Output", vssout_opt
+ field = "VSSout Units", vssout_optunits, { vssout_opt }
+ field = "Scale", vssout_scale, { vssout_opt }
+
+ dialog = vssdotlag, "VSSdot Smoothing"
+ field = "Sample Interval", vssdot_int
+ field = "Lag factor", vssdotLF
+
+ dialog = vsssamp, "VSS Sampling"
+ field = "VSS Sample Interval", vss_samp_int
+
+ dialog = gears, "Gear detection"
+ field = "Final Drive Ratio", fdratio1
+
+ field = "Method", gear_method
+ field = "Number Of Gears", gear_no, {gear_method}
+ field = "1st Ratio", gear1ratio, { (gear_method == 1) }
+ field = "2nd Ratio", gear2ratio, { (gear_method == 1) && (gear_no > 1) } ; would be pretty pointless otherwise!
+ field = "3rd Ratio", gear3ratio, { (gear_method == 1) && (gear_no > 2) }
+ field = "4th Ratio", gear4ratio, { (gear_method == 1) && (gear_no > 3) }
+ field = "5th Ratio", gear5ratio, { (gear_method == 1) && (gear_no > 4) }
+ field = "6th Ratio", gear6ratio, { (gear_method == 1) && (gear_no > 5) }
+ field = ""
+ field = "Input Port", gear_port_an, { (gear_method == 2) }
+ field = "Neutral Voltage", gear0v, { (gear_method == 2) }
+ field = "1st Gear Voltage", gear1v, { (gear_method == 2) }
+ field = "2nd Gear Voltage", gear2v, { (gear_method == 2) && (gear_no > 1) }
+ field = "3rd Gear Voltage", gear3v, { (gear_method == 2) && (gear_no > 2) }
+ field = "4th Gear Voltage", gear4v, { (gear_method == 2) && (gear_no > 3) }
+ field = "5th Gear Voltage", gear5v, { (gear_method == 2) && (gear_no > 4) }
+ field = "6th Gear Voltage", gear6v, { (gear_method == 2) && (gear_no > 5) }
+
+ dialog = vssunits, "Units"
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+
+ dialog = ssnorth, "", border
+ panel = vss1, West
+ panel = vss2, East
+
+ dialog = vss34, "", border
+ panel = vss3, West
+ panel = vss4, East
+
+ dialog = gearsunits, "", border
+ panel = gears, North
+ panel = vssunits, South
+
+ dialog = vssoutdotr, "", border
+ panel = vssdotlag, East
+ panel = vsssamp, South
+
+ dialog = vssoutdot, "", border
+ panel = vssout, West
+ panel = vssoutdotr, East
+
+ dialog = sssouth, "", border
+ panel = vss34, North
+ panel = vssoutdot, South
+
+ dialog = speedsensorsmain, "", yAxis
+ panel = ssnorth
+ panel = sssouth
+
+ dialog = speedsensors, "Speed and Gear Sensors", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#speedgear"
+ panel = speedsensorsmain, West
+ panel = gearsunits, East
+
+ dialog = ss, "Shaft Speed Sensors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shaftspeed"
+ field = "Sensor 1", ss_opt1
+ field = "Speed sensor #teeth", reluctorteeth3, {ss_opt1 && ss_opt1<15}
+ field = "High Speed Input", ss_opt1_spd, {(ss_opt1 == 4) || (ss_opt1 == 10) || (ss_opt1 == 11) || (ss_opt1 == 12)}
+ field = "Smoothing Lag Factor", ss1LF ;, {ss_opt2 && ss_opt2<15}
+ field = ""
+ field = "Sensor 2", ss_opt2
+ field = "Speed Sensor #Teeth", reluctorteeth4, {ss_opt2 && ss_opt2<15}
+ field = "High Speed Input", ss_opt2_spd, {(ss_opt2 == 4) || (ss_opt2 == 10) || (ss_opt2 == 11) || (ss_opt2 == 12)}
+ field = "Smoothing Lag Factor", ss2LF ;, {ss_opt2 && ss_opt2<15}
+
+ dialog = accelerometer, "Accelerometer Parameters"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelerometer"
+ field = "X Input", accXport
+ field = "Y Input", accYport
+ field = "Z Input", accZport
+ field = "X -1g Calib.", accXcal1, { accXport }
+ field = "X +1g Calib.", accXcal2, { accXport }
+ field = "Y -1g Calib.", accYcal1, { accYport }
+ field = "Y +1g Calib.", accYcal2, { accYport }
+ field = "Z -1g Calib.", accZcal1, { accZport }
+ field = "Z +1g Calib.", accZcal2, { accZport }
+ field = "Lag factor", accxyzLF
+
+ dialog = sdcard_top, ""
+ field = "SD Card Logging:", log_style_on2
+ field = "Datalog Button", log_style2_but, {log_style_on2 == 2}
+ field = "Trigger", log_style4_opt, {log_style_on2 == 3}
+ field = "RPM >", log_trig_rpm, {(log_style_on2 == 3) && (log_style4_opt == 0)}
+ field = "TPS >", log_trig_tps, {(log_style_on2 == 3) && (log_style4_opt == 1)}
+ field = "MAP >", log_trig_map, {(log_style_on2 == 3) && (log_style4_opt == 2)}
+ field = "LED Indicator", log_style_led, {log_style_on2}
+ field = "Log Data Block Size", log_style_block, {log_style_on2}
+ field = "Interleave GPS Data", log_style_gps, {log_style_on2}
+ field = "Sampling", log_style2_samp, {(log_style_block != 1) && log_style_on2 }
+ field = "Sample Interval", log_int, {(log_style_block != 1) && log_style_on2 }
+ displayOnlyField = "Frames/Second", log_rate, {(log_style_block != 1) && log_style_on2 }
+ field = "Log File Max Duration", log_length, {log_style_on2}
+ field = "Stream Input", log_style3_adc, {log_style_block == 1}
+ field = "SPI Comms Speed", log_style_ledspd, {log_style_on2}
+ field = "Trigger pulse output", sdpulse_out, {log_style_on2 >= 2}
+
+ dialog = sdcard_btm, ""
+ logFieldSelector = dataLogFieldSelector, "Log Field Selection", logFieldOffset, logFieldLength, 55
+
+ dialog = sdcard_datalog, "SD Card Datalogging", yAxis
+ panel = sdcard_top
+ panel = dataLogFieldSelector
+
+ dialog = N2OSystem_topl, ""
+ field = "Nitrous Control", N2Oopt_2
+ field = "Enable N2O When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Enrich Which Bank", N2Oopt_01, { N2Oopt_2 }
+
+ dialog = N2OSystem_topr, ""
+ field = "On/Off vs Progressive Mode", N2Oopt2_prog, { N2Oopt_2 }
+ field = "Time, RPM, VSS-Based", N2Oopt2_prog_time, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Solenoid Frequency", N2Oopt2_prog_freq, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Fuel Solenoid Frequency", N2Oopt2_prog_freqf, { N2Oopt_2 && N2Oopt2_prog && (n2o1f_pins > 0) }
+ field = "AFR Safety Uses AFR2 Targets", N2Oopt_4, { N2Oopt_2 }
+ field = ""
+ field = "READ THE MANUAL BEFORE USING NITROUS"
+
+ dialog = N2OSystem1, "Nitrous System Stage 1"
+ field = "Stage 1 Output - Nitrous", n2o1n_pins, { N2Oopt_2 }
+ field = "Stage 1 Output - Fuel", n2o1f_pins, { N2Oopt_2 }
+ field = "Enable Input On:", N2Oopt_pins, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Min RPM", N2OPWLo, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 && !N2Oopt2_prog }
+ field = "Retard Ignition By", N2OAngle, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = "Allow Nitrous During Launch", N2Oopt_5, { N2Oopt_2 && launch_opt_on }
+ field = "Max MAP During Launch", N2Olaunchmaxmap,{ N2Oopt_2 && launch_opt_on && N2Oopt_5}
+
+ dialog = N2OSystem2, "Nitrous System Stage 2"
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+ field = "Stage 2 Output - Nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Stage 2 Output - Fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Enable Stage 2 Above", N2O2Rpm, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Max RPM", N2O2RpmMax, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Delay After Stage1", N2O2delay, { N2Oopt_2 && N2Oopt_3 && (!N2Oopt2_prog || (N2Oopt2_prog_time==0)) }
+ field = "Retard Ignition By", N2O2Angle, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+
+ dialog = N2OSystem_top, "", border
+ panel = N2OSystem_topl, West
+ panel = N2OSystem_topr, East
+
+ dialog = N2OSystems, "", border
+ panel = N2OSystem1, West
+ panel = N2OSystem2, East
+
+ dialog = nitrous, "Nitrous System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = N2OSystem_top, North
+ panel = N2OSystems, South
+
+ dialog = n2o1_curves_time, ""
+ panel = n2o1_duty_time
+ panel = n2o1_pw_time
+ panel = n2o1_retard_time
+
+ dialog = n2o2_curves_time, ""
+ panel = n2o2_duty_time
+ panel = n2o2_pw_time
+ panel = n2o2_retard_time
+
+ dialog = nitrous_curves_time, "Nitrous - Time-Based Progressive", border
+ panel = n2o1_curves_time, West
+ panel = n2o2_curves_time, East
+
+ dialog = n2o1_curves_rpm, ""
+ panel = n2o1_duty_rpm
+ panel = n2o1_pw_rpm
+ panel = n2o1_retard_rpm
+
+ dialog = n2o2_curves_rpm, ""
+ panel = n2o2_duty_rpm
+ panel = n2o2_pw_rpm
+ panel = n2o2_retard_rpm
+
+ dialog = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", border
+ panel = n2o1_curves_rpm, West
+ panel = n2o2_curves_rpm, East
+
+ dialog = n2o1_curves_vss, ""
+ panel = n2o1_duty_vss
+ panel = n2o1_pw_vss
+ panel = n2o1_retard_vss
+
+ dialog = n2o2_curves_vss, ""
+ panel = n2o2_duty_vss
+ panel = n2o2_pw_vss
+ panel = n2o2_retard_vss
+
+ dialog = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", border
+ panel = n2o1_curves_vss, West
+ panel = n2o2_curves_vss, East
+
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum Boost", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ field = "Alt. Maximum Boost", OverBoostKpa2, { (tsw_pin_ob && (OverBoostOption > 0)) || dualfuel_sw2_ob }
+
+ dialog = boostfeat, ""
+ field = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ field = "Boost Table Switching Gear", boost_gear_switch, { boost_feats_tsw == 15 }
+ field = "Boost Timed From Launch", boost_feats_timed, {boost_ctl_settings_on && launch_opt_on}
+ field = "Specific Launch Duty/Target", boost_feats_launch, {boost_ctl_settings_on && launch_opt_on}
+ field = "Launch Boost Duty", boost_launch_duty, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl == 0}
+ field = "Launch Boost Target", boost_launch_target, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl}
+ field = "Boost vs Speed / Gear", boost_vss, {boost_ctl_settings_on}
+ field = "Above TPS", boost_vss_tps, {boost_ctl_settings_on && boost_vss}
+ field = "Per Gear Targets:"
+
+ dialog = boostgeartargsl, "", yAxis
+ field = "1", boost_geartarg1, {(boost_vss == 3) && gear_method && (gear_no > 0) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "2", boost_geartarg2, {(boost_vss == 3) && gear_method && (gear_no > 1) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "3", boost_geartarg3, {(boost_vss == 3) && gear_method && (gear_no > 2) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargsr, "", yAxis
+ field = "4", boost_geartarg4, {(boost_vss == 3) && gear_method && (gear_no > 3) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "5", boost_geartarg5, {(boost_vss == 3) && gear_method && (gear_no > 4) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "6", boost_geartarg6, {(boost_vss == 3) && gear_method && (gear_no > 5) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargs, "", border
+ panel = boostgeartargsl, West
+ panel = boostgeartargsr, East
+
+ dialog = boostctlSettings, "Boost Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost"
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Solenoid Freq. Range", boost_ctl_pwm, {boost_ctl_settings_on}
+ field = "Solenoid Frequency (Mid)", boost_ctl_pwm_scale, { boost_ctl_settings_on && (boost_ctl_pwm == 1)}
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ field = "Solenoid Frequency (Slow)", boost_ctl_settings_freq, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Minimum Duty", boost_ctl_closeduty, {boost_ctl_settings_on }
+ field = "Maximum Duty", boost_ctl_openduty, {boost_ctl_settings_on }
+ field = "Boost Control Lower CLT Threshold",boost_ctl_clt_threshold, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on && boost_ctl_settings_on}
+ field = "Tuning Mode", boost_ctl_flags, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl && ((boost_ctl_flags == 2) || (boost_ctl_flags == 3)) }
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+
+ dialog = boosteast, ""
+ panel = overboost, North
+ panel = boostfeat, Center
+ panel = boostgeartargs, South
+
+ dialog = boost, "Boost Control Setings", border
+ panel = boostctlSettings, West
+ panel = boosteast, East
+
+ dialog = boostctlSettings2, "Boost Control Settings 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost2"
+ field = "Boost Control Enabled", boost_ctl_settings_on2, {boost_ctl_settings_on}
+ field = "Target duty and boost tables 2 are used."
+ field = "Boost vs VSS or time or tableswitch not supported."
+ field = "Frequencies same as channel 1"
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ field = ""
+ field = "Minimum Duty", boost_ctl_closeduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Maximum Duty", boost_ctl_openduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Boost Control Lower Limit", boost_ctl_lowerlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 }
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl2, {boost_ctl_settings_on && boost_ctl_settings_on2}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity2, horizontal, {boost_ctl_settings_on2 && boost_ctl_settings_cl2 && ((boost_ctl_flags2 == 2) || (boost_ctl_flags2 == 3)) }
+ field = "Tuning Mode", boost_ctl_flags2, {boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Proportional Gain", boost_ctl_Kp2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Integral Gain", boost_ctl_Ki2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Differential Gain", boost_ctl_Kd2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "MAP Sensor To Target", boost_ctl_sensor2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && 0}
+ field = "Must be defined in Generic Sensors"
+
+ dialog = maxafrset, ""
+ field = "Enable AFR Safety", maxafr_opt1_on
+ field = "Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "Load Axis", maxafr_opt1_load, { maxafr_opt1_on }
+ field = "Check above Load", maxafr_en_load, { maxafr_opt1_on }
+ field = "Check above RPM", maxafr_en_rpm, { maxafr_opt1_on }
+ field = "Wait for", maxafr_en_time, { maxafr_opt1_on }
+ field = "Kill spark For", maxafr_spkcut_time, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ field = "Then kill fuel until..." ;, "", { maxafr_opt1_on || egt_conf_action}
+ field = "TPS Below", maxafr_ret_tps, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "MAP Below", maxafr_ret_map, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "RPM Below", maxafr_ret_rpm, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ dialog = maxafrTbls, "AFR Difference Table", border
+ panel = maxafr1Tbl, West
+
+ dialog = maxafr, "AFR Safety System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afrsafety"
+ panel = maxafrset, West
+ panel = maxafrTbls, East
+
+ dialog = egtwestn, "Configuration"
+ field = "No. EGT inputs", egt_num
+ field = ""
+ field = "Calibration - see documentation"
+ field = "Temp At 0V", egtcal_temp0, {egt_num}
+ field = "Temp At 5V", egtcal_tempmax, {egt_num}
+
+ dialog = egtwests, "Actions"
+ field = "EGT Actions", egt_conf_action
+ field = "Warning LED same as AFR safety"
+ field = "Warn Temperature", egt_warn, {egt_conf_action}
+ field = "Added Fuel", egt_addfuel, {egt_conf_action}
+ field = "Add To", egt_conf_bank, {egt_conf_action}
+ field = "Per cylinder", egt_conf_percyl, {egt_conf_action && (sequential == 2) }
+ field = "Shutdown Engine", egt_conf_shutdown, {egt_conf_action}
+ field = "Time > Warn Temp", egt_time, {egt_conf_action && egt_conf_shutdown}
+ field = "Max Temperature", egt_max, {egt_conf_action && egt_conf_shutdown}
+ field = "See AFR safety for shutdown options"
+
+ dialog = egtwest, "", yAxis
+ panel = egtwestn, North
+ panel = egtwests, South
+
+ dialog = egteast, "Data capture"
+ field = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ field = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ field = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ field = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ field = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ field = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ field = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ field = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ field = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ field = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ field = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ field = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ field = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ field = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ field = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ field = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+
+ dialog = egt, "EGT / Thermocouple Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egt"
+ panel = egtwest, West
+ panel = egteast, East
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable sequenced batch fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_enable_on
+ field = "Enable PWM Polling", enable_pollPWM, {can_enable_on}
+ field = "Remote CAN Id", can_poll_id, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Number For PWM Data", poll_tablePWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Offset For PWM Data", poll_offsetPWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Clock", canpwm_clk, { enable_pollPWM && can_enable_on}
+ field = "Remote Prescale", canpwm_pre, { enable_pollPWM && can_enable_on}
+ field = "Remote Divider", canpwm_div, { enable_pollPWM && can_enable_on}
+ field = ""
+ field = "Enable ADC Polling", enable_pollADC, {can_enable_on}
+
+ dialog = caneast, ""
+ field = "Digital ports"
+ field = "Remote CAN Id", can_poll_id_ports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Table", poll_tableports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Enable Input Port", enable_pollports_digin
+ field = "Offset", can_poll_digin_offset, { enable_pollports_digin}
+ field = "Enable Output Port", enable_pollports_digout
+ field = "Offset", can_poll_digout_offset, { enable_pollports_digout}
+ field = ""
+ field = "Enable PWM Outputs", enable_pwmout
+
+ field = "Remote CAN Id", can_pwmout_id, { enable_pwmout }
+ field = "Table", can_pwmout_tab, { enable_pwmout }
+ field = "Offset", can_pwmout_offset, { enable_pwmout }
+ field = "Force Duty To 0-255", enable_pwmout255
+
+ ;CAN adcs
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC group on/off"
+ field = "CAN ADC 1- 4", canadc_opt1, { enable_pollADC }
+ field = "CAN ADC 5- 8", canadc_opt2, { enable_pollADC }
+ field = "CAN ADC 9-12", canadc_opt3, { enable_pollADC }
+ field = "CAN ADC 13-16", canadc_opt4, { enable_pollADC }
+ field = "CAN ADC 17-20", canadc_opt5, { enable_pollADC }
+ field = "CAN ADC 21-24", canadc_opt6, { enable_pollADC }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", canadc_id1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_id2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_id3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_id4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_id5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_id6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", canadc_tab1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_tab2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_tab3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_tab4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_tab5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_tab6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", canadc_off1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_off2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_off3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_off4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_off5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_off6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadcs, "CAN ADC selection", xAxis
+
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest, West
+ panel = caneast, East, {can_enable_on}
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canparams"
+ panel = can_top, North
+ panel = canadcs, South, {can_enable_on}
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+ field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = canvss, "CAN VSS and gear selection"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canvss"
+ field = "This is for polling the actual vehicle speed"
+ field = "mph/kph from a remote device."
+ field = "For a pulse input use the CAN PWM instead"
+ field = "Mode", can_poll2_vss
+ field = "Remote CAN Id", vss1_can_id, {can_poll2_vss}
+ field = "Remote CAN Table", vss1_can_table, {can_poll2_vss}
+ field = ""
+ field = "VSS1 Offset", vss1_can_offset, {(vss_opt0_1 == 1) && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss1_can_size, {vss_opt1 == 0x0e}
+ field = ""
+ field = "VSS2 Offset", vss2_can_offset, {(vss_opt0_2 == 1) && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss2_can_size, {vss_opt2 == 0x0e}
+ field = ""
+ field = "VSS3 Offset", vss3_can_offset, {(vss_opt0_1 == 1) && vss_opt0_3 && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "VSS4 Offset", vss4_can_offset, {(vss_opt0_2 == 1) && vss_opt0_4 && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = ""
+ field = "Gear# Offset", gear_can_offset, {((gear_method & 0x03) == 0x03)}
+
+ dialog = canrtc, "Real Time Clock"
+ field = "Enable Real Time Clock", opt142_rtc
+ field = "Trim +/-", rtc_trim, {opt142_rtc}
+ field = "Remote CAN Id", can_poll_id_rtc, {(opt142_rtc == 2) && can_enable_on}
+ field = "Table", poll_table_rtc, {(opt142_rtc == 2) && can_enable_on }
+ field = "Offset", poll_offset_rtc, {(opt142_rtc == 2) && can_enable_on}
+
+ dialog = canego1, "EGO Data Via CAN"
+ field = "Fetch EGO Data", can_poll2_ego2
+ field = "Remote CAN Id", can_ego_id, {can_poll2_ego2}
+ field = "Table", can_ego_table, {can_poll2_ego2}
+ field = "Offset", can_ego_offset, {can_poll2_ego2}
+ field = "Smoothing", can_poll2_egolag, {can_poll2_ego2}
+
+ dialog = cangps, "GPS Data Via CAN"
+ field = "Fetch GPS Data", can_poll2_gps
+ field = "Remote CAN Id", can_gps_id, {can_poll2_gps}
+ field = "Table", can_gps_table, {can_poll2_gps}
+ field = "Offset", can_gps_offset, {can_poll2_gps}
+
+ dialog = canego, "CAN EGO, GPS", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canegogps"
+ panel = canego1
+ panel = cangps
+
+ dialog = realtimeclock, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rtc"
+ panel = canrtc
+ panel = std_ms3Rtc
+
+ dialog = tablesw1, "Table Switching"
+ field = "Fuel Table Switching", f5_0_tsf, { !(dualfuel_sw_on && dualfuel_sw_fuel) }
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "Input pin", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "RPM greater than", tsf_rpm, { f5_0_tsf && (f5_0_tsf_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "MAP greater than", tsf_kpa, { f5_0_tsf && (f5_0_tsf_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "TPS greater than", tsf_tps, { f5_0_tsf && (f5_0_tsf_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = ""
+ field = "Spark Table Switching", f5_0_tss, { !(dualfuel_sw_on && dualfuel_sw_spk) }
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "Input Pin", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && (f5_0_tss_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && (f5_0_tss_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && (f5_0_tss_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = ""
+ field = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ field = "Alternate ReqFuel (Lower Number)", ReqFuel_alt, { tsw_pin_rf || (dualfuel_sw_on && dualfuel_sw_rf)}
+ field = ""
+ field = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ field = ""
+ field = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = "Alternate Stoich", stoich_alt, { tsw_pin_stoich || (dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = ""
+ field = "Boost control table switching is on the boost control menu"
+
+ dialog = dualfuel, "Dual Fuel switching"
+ field = "Dual Fuel Enable", dualfuel_sw_on
+ field = "Mode", dualfuel_opt_mode, { dualfuel_sw_on }
+ field = "Outputs Mode", dualfuel_opt_out, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { dualfuel_sw_on && (dualfuel_opt_mode < 2) && (dualfuel_opt_out || dualfuel_opt_mode) }
+;was { ((dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && ((nCylinders <= 4)) || ((nCylinders > 4) && (sequential == 1))) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { (dualfuel_opt_mode < 2) && ((dualfuel_opt_out || dualfuel_opt_mode) && staged_extended_opts_use_v3) || ((nCylinders > 4) && (dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && !(sequential & 0x1)) }
+ field = "Input Pin", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Fuel Tables", dualfuel_sw_fuel, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Spark Tables", dualfuel_sw_spk, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AFR Tables", dualfuel_sw_afr, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. ReqFuel", dualfuel_sw_rf, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Stoich", dualfuel_sw_stoich, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Warmup", dualfuel_sw_wue, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AfterStart", dualfuel_sw_ase, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Priming", dualfuel_sw2_prime, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Cranking Pulse", dualfuel_sw2_crank, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Injector Params", dualfuel_sw2_injp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Small Pulsewidths", dualfuel_sw2_smpw, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Overboost", dualfuel_sw2_ob, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Boost Table", dualfuel_sw2_boosw, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Accel Enrich", dualfuel_sw2_ae, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = ""
+ field = "Enable Temperature Adjustment", dualfuel_opt_temp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Temperature On", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp && (dualfuel_opt_mode == 0)}
+ field = "Enable Pressure Adjustment", dualfuel_opt_press, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Pressure In kPa On", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press && (dualfuel_opt_mode == 0)}
+ field = "Sensor Type", dualfuel_press_type, { dualfuel_sw_on && dualfuel_opt_press && dualfuel_press_sens && (dualfuel_opt_mode == 0)}
+
+ dialog = tablesw, "Table Switch/Dual Fuel", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tablesw"
+ panel = tablesw1, West
+ panel = dualfuel, East
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-on-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testinjspk"
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtesta0, "Inj A", yAxis
+ commandButton = "Off", cmdtesta0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta0on, { status3 & 8 }
+ dialog = outputtesta1, "Inj B", yAxis
+ commandButton = "Off", cmdtesta1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta1on, { status3 & 8 }
+ dialog = outputtesta2, "Inj C", yAxis
+ commandButton = "Off", cmdtesta2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta2on, { status3 & 8 }
+ dialog = outputtesta3, "Inj D", yAxis
+ commandButton = "Off", cmdtesta3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta3on, { status3 & 8 }
+ dialog = outputtesta4, "Inj E", yAxis
+ commandButton = "Off", cmdtesta4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta4on, { status3 & 8 }
+ dialog = outputtesta5, "Inj F", yAxis
+ commandButton = "Off", cmdtesta5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta5on, { status3 & 8 }
+ dialog = outputtesta6, "Inj G", yAxis
+ commandButton = "Off", cmdtesta6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta6on, { status3 & 8 }
+ dialog = outputtesta7, "Inj H", yAxis
+ commandButton = "Off", cmdtesta7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta7on, { status3 & 8 }
+
+ dialog = outputtest_io1inj, "Inj Outputs", xAxis
+ panel = outputtesta0
+ panel = outputtesta1
+ panel = outputtesta2
+ panel = outputtesta3
+ panel = outputtesta4
+ panel = outputtesta5
+ panel = outputtesta6
+ panel = outputtesta7
+
+ dialog = outputtestb0, "Spk A", yAxis
+ commandButton = "Off", cmdtestb0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb0on, { status3 & 8 }
+ dialog = outputtestb1, "Spk B", yAxis
+ commandButton = "Off", cmdtestb1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb1on, { status3 & 8 }
+ dialog = outputtestb2, "Spk C", yAxis
+ commandButton = "Off", cmdtestb2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb2on, { status3 & 8 }
+ dialog = outputtestb3, "Spk D", yAxis
+ commandButton = "Off", cmdtestb3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb3on, { status3 & 8 }
+ dialog = outputtestb4, "Spk E", yAxis
+ commandButton = "Off", cmdtestb4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb4on, { status3 & 8 }
+ dialog = outputtestb5, "Spk F", yAxis
+ commandButton = "Off", cmdtestb5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb5on, { status3 & 8 }
+ dialog = outputtestb6, "Spk G", yAxis
+ commandButton = "Off", cmdtestb6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb6on, { status3 & 8 }
+ dialog = outputtestb7, "Spk H", yAxis
+ commandButton = "Off", cmdtestb7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb7on, { status3 & 8 }
+
+ dialog = outputtest_io1spk, "Spk Outputs", xAxis
+ panel = outputtestb0
+ panel = outputtestb1
+ panel = outputtestb2
+ panel = outputtestb3
+ panel = outputtestb4
+ panel = outputtestb5
+ panel = outputtestb6
+ panel = outputtestb7
+
+ dialog = outputtestcano0, "OUT1", yAxis
+ commandButton = "Off", cmdtestcano0off, { (status3 & 8) && (canout1_8 & 1) }
+; commandButton = "Pulsed", cmdtestcano0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano0on, { (status3 & 8) && ((canout1_8 & 1) == 0) }
+ dialog = outputtestcano1, "OUT2", yAxis
+ commandButton = "Off", cmdtestcano1off, { (status3 & 8) && (canout1_8 & 2) }
+; commandButton = "Pulsed", cmdtestcano1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano1on, { (status3 & 8) && ((canout1_8 & 2) == 0) }
+ dialog = outputtestcano2, "OUT3", yAxis
+ commandButton = "Off", cmdtestcano2off, { (status3 & 8) && (canout1_8 & 4) }
+; commandButton = "Pulsed", cmdtestcano2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano2on, { (status3 & 8) && ((canout1_8 & 4) == 0) }
+ dialog = outputtestcano3, "OUT4", yAxis
+ commandButton = "Off", cmdtestcano3off, { (status3 & 8) && (canout1_8 & 8) }
+; commandButton = "Pulsed", cmdtestcano3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano3on, { (status3 & 8) && ((canout1_8 & 8) == 0) }
+ dialog = outputtestcano4, "OUT5", yAxis
+ commandButton = "Off", cmdtestcano4off, { (status3 & 8) && (canout1_8 & 16) }
+; commandButton = "Pulsed", cmdtestcano4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano4on, { (status3 & 8) && ((canout1_8 & 16) == 0) }
+ dialog = outputtestcano5, "OUT6", yAxis
+ commandButton = "Off", cmdtestcano5off, { (status3 & 8) && (canout1_8 & 32) }
+; commandButton = "Pulsed", cmdtestcano5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano5on, { (status3 & 8) && ((canout1_8 & 32) == 0) }
+ dialog = outputtestcano6, "OUT7", yAxis
+ commandButton = "Off", cmdtestcano6off, { (status3 & 8) && (canout1_8 & 64) }
+; commandButton = "Pulsed", cmdtestcano6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano6on, { (status3 & 8) && ((canout1_8 & 64) == 0) }
+ dialog = outputtestcano7, "OUT8", yAxis
+ commandButton = "Off", cmdtestcano7off, { (status3 & 8) && (canout1_8 & 128) }
+; commandButton = "Pulsed", cmdtestcano7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano7on, { (status3 & 8) && ((canout1_8 & 128) == 0) }
+
+ dialog = outputtest_iocano, "CANOUT1-8", xAxis
+ panel = outputtestcano0
+ panel = outputtestcano1
+ panel = outputtestcano2
+ panel = outputtestcano3
+ panel = outputtestcano4
+ panel = outputtestcano5
+ panel = outputtestcano6
+ panel = outputtestcano7
+
+ dialog = outputtestcano8, "OUT9", yAxis
+ commandButton = "Off", cmdtestcano8off, { (status3 & 8) && (canout9_16 & 1) }
+; commandButton = "Pulsed", cmdtestcano8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano8on, { (status3 & 8) && ((canout9_16 & 1) == 0) }
+ dialog = outputtestcano9, "OUT10", yAxis
+ commandButton = "Off", cmdtestcano9off, { (status3 & 8) && (canout9_16 & 2) }
+; commandButton = "Pulsed", cmdtestcano9pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano9on, { (status3 & 8) && ((canout9_16 & 2) == 0) }
+ dialog = outputtestcano10, "OUT11", yAxis
+ commandButton = "Off", cmdtestcano10off, { (status3 & 8) && (canout9_16 & 4) }
+; commandButton = "Pulsed", cmdtestcano10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano10on, { (status3 & 8) && ((canout9_16 & 4) == 0) }
+ dialog = outputtestcano11, "OUT12", yAxis
+ commandButton = "Off", cmdtestcano11off, { (status3 & 8) && (canout9_16 & 8) }
+; commandButton = "Pulsed", cmdtestcano11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano11on, { (status3 & 8) && ((canout9_16 & 8) == 0) }
+ dialog = outputtestcano12, "OUT13", yAxis
+ commandButton = "Off", cmdtestcano12off, { (status3 & 8) && (canout9_16 & 16) }
+; commandButton = "Pulsed", cmdtestcano12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano12on, { (status3 & 8) && ((canout9_16 & 16) == 0) }
+ dialog = outputtestcano13, "OUT14", yAxis
+ commandButton = "Off", cmdtestcano13off, { (status3 & 8) && (canout9_16 & 32) }
+; commandButton = "Pulsed", cmdtestcano13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano13on, { (status3 & 8) && ((canout9_16 & 32) == 0) }
+ dialog = outputtestcano14, "OUT15", yAxis
+ commandButton = "Off", cmdtestcano14off, { (status3 & 8) && (canout9_16 & 64) }
+; commandButton = "Pulsed", cmdtestcano14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano14on, { (status3 & 8) && ((canout9_16 & 64) == 0) }
+ dialog = outputtestcano15, "OUT16", yAxis
+ commandButton = "Off", cmdtestcano15off, { (status3 & 8) && (canout9_16 & 128) }
+; commandButton = "Pulsed", cmdtestcano15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano15on, { (status3 & 8) && ((canout9_16 & 128) == 0) }
+
+ dialog = outputtest_iocano2, "CANOUT9-16", xAxis
+ panel = outputtestcano8
+ panel = outputtestcano9
+ panel = outputtestcano10
+ panel = outputtestcano11
+ panel = outputtestcano12
+ panel = outputtestcano13
+ panel = outputtestcano14
+ panel = outputtestcano15
+
+ dialog = outputtestcani0, "IN1", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 1 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 1) == 0 }
+ dialog = outputtestcani1, "IN2", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 2 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 2) == 0 }
+ dialog = outputtestcani2, "IN3", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 4 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 4) == 0 }
+ dialog = outputtestcani3, "IN4", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 8 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 8) == 0 }
+ dialog = outputtestcani4, "IN5", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 16 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 16) == 0 }
+ dialog = outputtestcani5, "IN6", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 32 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 32) == 0 }
+ dialog = outputtestcani6, "IN7", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 64 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 64) == 0 }
+ dialog = outputtestcani7, "IN8", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 128 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 128) == 0 }
+
+ dialog = outputtest_iocani, "CANIN1-8 - read-only", xAxis
+ panel = outputtestcani0
+ panel = outputtestcani1
+ panel = outputtestcani2
+ panel = outputtestcani3
+ panel = outputtestcani4
+ panel = outputtestcani5
+ panel = outputtestcani6
+ panel = outputtestcani7
+
+
+ dialog = outputtest16, "PWM Out 2", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest10, "High Curr 3", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "High Curr 1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "High Curr 2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "PWM Out 3", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "PWM/Idle 1", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "Tach Out", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "The Inj/Spk outputs must be used with additional caution to avoid flooding your engine or melting coils."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io2_text, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+ field = ""
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest16
+ panel = outputtest10
+ panel = outputtest11
+ panel = outputtest12
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+
+ dialog = outputteste0, "IAC1", yAxis
+ commandButton = "Off", cmdteste0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste0pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste0on, { status3 & 8 }
+
+ dialog = outputteste4, "IAC2", yAxis
+ commandButton = "Off", cmdteste4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste4pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste4on, { status3 & 8 }
+
+ dialog = outputteste8, "InjI", yAxis
+ commandButton = "Off", cmdteste8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste8pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste8on, { status3 & 8 }
+
+ dialog = outputtestec, "InjJ", yAxis
+ commandButton = "Off", cmdtestecoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestecpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestecon, { status3 & 8 }
+
+
+
+
+
+ dialog = outputtest_io2, "Outputs", xAxis
+ panel = outputteste0
+ panel = outputteste4
+ panel = outputteste8
+ panel = outputtestec
+
+ dialog = outputtest_io, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io2
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io2, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1inj
+ panel = outputtest_io1spk
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io3, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_iocano
+ panel = outputtest_iocano2
+ panel = outputtest_io2_text
+ panel = outputtest_iocani
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-255)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Enable Test - In/Out Cycle", cmdtestiaccycle, { IdleCtl == 3 }
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = injseqtest, "Injector Sequential Testing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injseqtest"
+ commandButton = "Stop Testing", cmdtestinjnorm
+ commandButton = "Batch Fire", cmdtestinjbat
+ commandButton = "Semi Sequential", cmdtestinjsem
+ commandButton = "Full Sequential", cmdtestinjseq
+
+ dialog = special, "Special Options"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#special"
+ field = "Pulsewidth Scaling", feature3_pw4x
+ field = "Digital Switched 12V In Pulldown", feature3_n2oin
+
+; field = "U08 Debug 134, SPI baud", u08_debug134
+; field = "U16 Debug 640", u16_debug640
+; field = "SDcard Run/Test", u08_debug38_0
+ field = "Log trigger times to sensors9-16", u08_debug38_1
+ field = "Fuel flow/consumption calculation interval", fuelcalctime
+ field = "Maximum SpkAdj Value", spkadj_max
+ field = "Minimum SpkAdj Value", spkadj_min
+
+ dialog = lttrim, "Long Term Trim Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#lttrim"
+ field = "Enable Experi. Long Term Trim", ltt_opt_on
+ field = "Sample Interval", ltt_samp_time, {ltt_opt_on}
+ field = "Correction Softness", ltt_agg, {ltt_opt_on}
+ field = "Write Method", ltt_opt_mode, {ltt_opt_on}
+ field = "Burn Button", ltt_but_in, {ltt_opt_on && (ltt_opt_mode == 1)}
+ field = "Burn Interval", ltt_int, {ltt_opt_on && (ltt_opt_mode == 0)}
+ field = "LED Output", ltt_led_out,{ltt_opt_on}
+ field = "Total Change Before Burning", ltt_thresh, {ltt_opt_on}
+ field = "Display Current %Change In Sensor15", ltt_opt_feedback, {ltt_opt_on}
+ commandButton = "Read Table 1 To RAM", cmdlttr1
+ commandButton = "Read Table 2 To RAM", cmdlttr2
+ commandButton = "Burn Table To Flash", cmdlttw
+ commandButton = "Zero Tables", cmdlttz
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { (twoStroke == 3) && (nCylinders == 2) && (spk_mode3 == 2) }
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell Time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#noise"
+ field = "#GLOBAL TIMER NOISE FILTER DELAY"
+ field = "Noise Filter Period", dlyct
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launchwest, ""
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input On:", launch_opt_pins, { launch_opt_on }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_on }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_on}
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Disable Launch When VSS1 Above", launch_maxvss, { (launch_opt_on ) && (vss_opt0_1) }
+ field = "Limiter Settings",launchlimopt_adv , { launch_opt_on }
+ field = "Spark Limiter Type",launchlimopt_cut , { launch_opt_on && launchlimopt_adv}
+ field = "Spark Cut Zone",launchcutzone , { launch_opt_on && launchlimopt_adv}
+ field = "Cut Zone Timing",launchcuttiming , { launch_opt_on && launchlimopt_adv}
+ field = "FLAT SHIFT"
+ field = "Disable Flat-Shift When VSS1 Below", flats_minvss, { (launch_opt_on > 1) && (vss_opt0_1) }
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To : ", flats_deg, { launch_opt_on >1 }
+ field = "Cut Fuel Above", launch_fcut_rpm, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "TIMED RETARD"
+ field = "Timed Retard After Launch", launch_opt_retard, { launch_opt_on }
+
+ dialog = launchnortheast, "Variable Launch"
+ field = "Variable Launch Input", launch_var_on, { launch_opt_on >0 }
+ field = " -Minimum Setting", launch_var_low, {launch_var_on && launch_opt_on >0 }
+ field = " -Maximum Setting", launch_var_up, {launch_var_on && launch_opt_on >0 }
+
+ dialog = launchsoutheast, "3-Step / Burnout Limiter"
+ field = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ field = " -Soft Limit Retard To", launch_sft_deg3, {launch_3step_in && launch_opt_on >0}
+ field = " -Hard Limit", launch_hrd_lim3, {launch_3step_in && launch_opt_on >0}
+
+ dialog = llstg, "Line-Lock Staging"
+ field = "Button Input", llstg_in, {launch_opt_on >0 }
+ field = "Relay Output", llstg_out, {launch_opt_on && llstg_in }
+
+ dialog = launchtbtstop, "Transbrake, Throttle Stop"
+ field = "Transbrake Button Input", timedout1_in
+ field = "Transbrake Output", timedout1_out, {timedout1_in}
+ field = "Delay", timedout1_offdelay, {timedout1_in && timedout1_out}
+ field = "Turbo Staging Button", tcs_in, {timedout1_in}
+ field = "Release Time", tcs_offtime, {tcs_in && timedout1_in}
+ field = "On Time", tcs_ontime, {tcs_in && timedout1_in}
+ field = "Main # Moves", tcs_moves, {tcs_in && timedout1_in}
+ field = "Throttle Stop Output", tstop_out, { launch_opt_on }
+ field = "On Delay After Launch", tstop_delay, {tstop_out && launch_opt_on}
+ field = "Keep On For", tstop_hold, {tstop_out && launch_opt_on}
+
+ dialog = launcheast, "", yAxis
+ panel = launchnortheast
+ panel = launchtbtstop
+ panel = launchsoutheast
+ panel = llstg
+
+ dialog = launch, "Launch Control/ 2-Step / 3-Step / T-brake", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#launch"
+ panel = launchwest, West
+ panel = launcheast, East
+
+ dialog = vsslaunch1, ""
+ field = "Wheel-Speed Based Launch", launch_opt_vss
+ field = "ACTIVATION"
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_vss}
+ field = "Timeout (0 = None)", launchvsstime, { launch_opt_vss}
+ field = "Re-arm Below Speed", launchvss_minvss, { launch_opt_vss}
+ field = "Enable Gear Checking", launch_opt_vssgear, { launch_opt_vss && gear_method }
+ field = "Maximum Gear", launchvss_maxgear, { launch_opt_vss && launch_opt_vssgear && gear_method}
+ field = "LIMITER"
+ field = "Limiter Method", launchlimopt, { launch_opt_vss}
+ field = "Hard limit is taken from the curve"
+ field = "Soft Limit Zone", launch_sft_zone, { launch_opt_vss }
+ field = "Retard To", launch_sft_deg, {launch_opt_vss }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_vss }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_vss}
+ field = "Limiter settings are shared with the launch control page."
+
+ dialog = vsslaunch, "Speed-Based Launch Control", border
+ panel = vsslaunch1, West
+ panel = vsslaunch_curve, East
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = "Output On:", tacho_opt3f, { tacho_opt80 }
+ field = "Fixed or variable", tacho_optvar, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 && (tacho_optvar == 0) }
+ field = "Scaling", tacho_scale, { tacho_opt80 && (tacho_optvar == 1) }
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut fuel when:"
+ field = "RPM Greater Than:", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than: ", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than: ", fc_tps, { OvrRunC }
+ field = "And CLT Greater Than:", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = "Progressive Fuel Cut", OvrRunC_progcut, { OvrRunC }
+ field = "Ignition Timing Transition (Cut)", OvrRunC_progign, {OvrRunC}
+ field = "Ignition Timing During Over-Run", fc_timing, { OvrRunC && (OvrRunC_progign || OvrRunC_retign)}
+ field = "Cut Transition Time", fc_transition_time, { OvrRunC && (OvrRunC_progcut || OvrRunC_progign)}
+ field = "Progressive Fuel Return", OvrRunC_progret, { OvrRunC }
+ field = "Ignition Timing Transition Return", OvrRunC_retign, { OvrRunC }
+ field = "Return Transition Time", fc_trans_time_ret, { OvrRunC && (OvrRunC_progret || OvrRunC_retign) }
+ field = "Lowest RPM To Re-Engage Fuel:", fc_rpm_lower, { OvrRunC }
+ field = "RPMdot For Upper RPM Re-Engagement", fuelcut_fuelon_upper_rpmdot, { OvrRunC }
+ field = "RPMdot For Lower RPM Re-Engagement", fuelcut_fuelon_lower_rpmdot, { OvrRunC }
+ field = "Duration Of Fuel Adder", fc_ae_time, { OvrRunC }
+ field = "Size Of Fuel Adder", fc_ae_pct, { OvrRunC && fc_ae_time }
+ field = "Delay EGO After Fuel Return:", fc_ego_delay, { OvrRunC }
+
+ dialog = staging, "Staged Injection"
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = "Transition Fully To Secondaries", staged_extended_opts_pw1off, { staged_first_param }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { staged_first_param && (staged_out1 == 0) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { ((staged_extended_opts_use_v3 && staged_first_param) || ((nCylinders > 4) && (staged_first_param) && (hardware_fuel) && !(sequential & 0x1))) && (staged_out1 == 0) }
+ field = ""
+ field = "Gradual Transition", staged_transition_on, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Transition Events", staged_transition_events, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Reduction Delay", staged_primary_delay, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = "Secondary Enrichment", staged_secondary_enrichment, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param }
+ field = ""
+ field = "Relay Output", staged_out1, { staged_first_param }
+ field = "Relay Output Polarity", staged_out1_inv, { staged_first_param && staged_out1}
+ field = "Pre-Relay Output", staged_out2, { staged_first_param }
+ field = "Pre-Relay Output Polarity", staged_out2_inv, { staged_first_param && staged_out2}
+ field = "Pre-Relay Timer", staged_out2_time, { staged_first_param && staged_out2}
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Batch Fire During Crank", feature7_batchcrank, {sequential}
+ field = "Cranking Taper Curve", feature7_cranktaper
+ field = "Cranking Taper Curve Units", feature7_crtpunits, {feature7_cranktaper}
+ field = "Cranking Fuel Pulse Rate ", altcrank
+ field = "Blended Cranking Curves", alternate_blend
+ field = ""
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+ field = "ASE Count Units", feature3_aseunit
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#barocor"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Type", mapport_t
+ field = "Voltage Input Port", mapport, {mapport_t == 0}
+ field = "Frequency Input Port", mapport_f, {mapport_t == 1}
+ field = "Low Frequency", map_freq0, {mapport_t == 1}
+ field = "High Frequency", map_freq1, {mapport_t == 1}
+ field = "2nd MAP Port", map2port, { (mapport_t == 0) }
+ field = "(See also Tools->Calibrate MAP/Baro)"
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MegaView Temp. Units", tempUnits
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = "Auto-zero TPS", feature3_tps
+
+ dialog = secondaryLoad, "Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (VE1/3)", loadMult
+ field = "99% of Speed-Density installs should use Multiply"
+ field = "Multiply MAP (VE2/4)", loadMult2, {algorithm2 && (loadCombine == 2)}
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich ;, { loadStoich } needed for lambda calc even if not incl AFR
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "Secondary Ignition", loadCombineign, {IgnAlgorithm2}
+ field = "AFR table Load", afrload
+ field = "EAE curve Load", eaeload
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = revlimiter, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#revlim"
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/Fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+ field = "#Temp Sense"
+ field = "Sensor PW"
+ field = "Fuel Temp"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+ field = "Low"
+ field = "", ff_tpw0, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp0, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+ field = "High"
+ field = "", ff_tpw1, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp1, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = ff_table1, "", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback For Sensor Failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+ field = "#Flex Blending (enabled on Dual Fuel menu)"
+ field = "Dual Fuel Mode", dualfuel_opt_mode, { 0 }
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#flex"
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ panel = ff_table1
+ field = "Temperature Input", fueltemp1
+ panel = ff_fallback
+
+ dialog = sequentialOptions, "Sequential Fuel Injection"
+ field = "Main Fuel Outputs", hardware_fuel
+ field = "Sequential On", sequential
+ field = "Angle Specifies:", sequential_angle_spec, { sequential != 0 }
+ field = "Injector Trim", sequential_trim_on_off
+
+ dialog = firingorder1, "Firing Order"
+ field = "A.", firea
+ field = "B.", fireb, { nCylinders > 1}
+ field = "C.", firec, { nCylinders > 2}
+ field = "D.", fired, { nCylinders > 3}
+ field = "E.", firee, { nCylinders > 4}
+ field = "F.", firef, { nCylinders > 5}
+ field = "G.", fireg, { nCylinders > 6}
+ field = "H.", fireh, { nCylinders > 7}
+
+ dialog = firingorder2, "Firing Order"
+ field = "I.", firei, { nCylinders > 8}
+ field = "J.", firej, { nCylinders > 9}
+ field = "K.", firek, { nCylinders > 10}
+ field = "L.", firel, { nCylinders > 11}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = firingorder, "", xAxis
+ panel = firingorder1, West
+ panel = firingorder2, East
+
+ dialog = seqfo, "", border
+ panel = sequentialOptions, North
+ panel = firingorder, South
+
+ dialog = base3, "", yAxis
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection, North
+ panel = base3, South
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#engseq"
+ panel = base2, West
+ panel = seqfo, East
+
+;main injector parameters
+ dialog = ot_ot, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", injOpen1
+ field = "B", injOpen2, {opentime_opt1_master}
+ field = "C", injOpen3, {opentime_opt1_master}
+ field = "D", injOpen4, {opentime_opt1_master}
+ field = "E", injOpen5, {opentime_opt1_master}
+ field = "F", injOpen6, {opentime_opt1_master}
+ field = "G", injOpen7, {opentime_opt1_master}
+ field = "H", injOpen8, {opentime_opt1_master}
+ field = "I", injOpena, {opentime_opt1_master}
+ field = "J", injOpenb, {opentime_opt1_master}
+ field = "K", injOpen11, {opentime_opt1_master}
+ field = "L", injOpen12, {opentime_opt1_master}
+
+ dialog = ot_curve, "", yAxis
+ field = "", opentime_opt1_master
+
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime_opt1
+ field = "", opentime_opt2, {opentime_opt1_master}
+ field = "", opentime_opt3, {opentime_opt1_master}
+ field = "", opentime_opt4, {opentime_opt1_master}
+ field = "", opentime_opt5, {opentime_opt1_master}
+ field = "", opentime_opt6, {opentime_opt1_master}
+ field = "", opentime_opt7, {opentime_opt1_master}
+ field = "", opentime_opt8, {opentime_opt1_master}
+ field = "", opentime_opta, {opentime_opt1_master}
+ field = "", opentime_optb, {opentime_opt1_master}
+ field = "", opentime_opt11, {opentime_opt1_master}
+ field = "", opentime_opt12, {opentime_opt1_master}
+
+ dialog = injchar_ms3x, "Injectors", xAxis
+ panel = ot_ot
+ panel = ot_curve
+
+; 9-16
+
+
+ dialog = injcurveswest, "", yAxis
+ panel = opencurve0, North
+ panel = opencurve2, South
+
+ dialog = injcurveseast, "", yAxis
+ panel = opencurve1, North
+ panel = opencurve3, South
+
+ dialog = injcurves, "", xAxis
+ panel = injcurveswest
+ panel = injcurveseast
+
+
+ dialog = injCharswest, "", yAxis
+ panel = injchar_ms3x, North
+
+ dialog = injsettings, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = injCharswest, West
+ panel = injcurves, Center
+
+; table-switched alternate parameters
+
+
+
+ dialog = ot_ot2, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", inj2Open1
+ field = "B", inj2Open2, {opentime2_opt1_master}
+ field = "C", inj2Open3, {opentime2_opt1_master}
+ field = "D", inj2Open4, {opentime2_opt1_master}
+ field = "E", inj2Open5, {opentime2_opt1_master}
+ field = "F", inj2Open6, {opentime2_opt1_master}
+ field = "G", inj2Open7, {opentime2_opt1_master}
+ field = "H", inj2Open8, {opentime2_opt1_master}
+ field = "I", inj2Opena, {opentime2_opt1_master}
+ field = "J", inj2Openb, {opentime2_opt1_master}
+ field = "K", inj2Open11, {opentime2_opt1_master}
+ field = "L", inj2Open12, {opentime2_opt1_master}
+
+ dialog = ot_curve2, "", yAxis
+ field = "", opentime2_opt1_master
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime2_opt1
+ field = "", opentime2_opt2, {opentime2_opt1_master}
+ field = "", opentime2_opt3, {opentime2_opt1_master}
+ field = "", opentime2_opt4, {opentime2_opt1_master}
+ field = "", opentime2_opt5, {opentime2_opt1_master}
+ field = "", opentime2_opt6, {opentime2_opt1_master}
+ field = "", opentime2_opt7, {opentime2_opt1_master}
+ field = "", opentime2_opt8, {opentime2_opt1_master}
+ field = "", opentime2_opta, {opentime2_opt1_master}
+ field = "", opentime2_optb, {opentime2_opt1_master}
+ field = "", opentime2_opt11, {opentime2_opt1_master}
+ field = "", opentime2_opt12, {opentime2_opt1_master}
+
+ dialog = injchar_ms3x_2, "Injectors", xAxis
+ panel = ot_ot2
+ panel = ot_curve2
+
+
+
+ dialog = injCharswest2, "", yAxis
+ panel = injchar_ms3x_2, North
+
+ dialog = injsettings2, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = injCharswest2, West
+
+ dialog = smallpwwest2, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw2_opt1_master
+ field = "(This is for the alternate injectors from dual-fuel)"
+
+ field = "Injector A", smallpw2_opt1, { smallpw2_opt1_master }
+ field = "Injector B", smallpw2_opt2, { smallpw2_opt1_master }
+ field = "Injector C", smallpw2_opt3, { smallpw2_opt1_master }
+ field = "Injector D", smallpw2_opt4, { smallpw2_opt1_master }
+ field = "Injector E", smallpw2_opt5, { smallpw2_opt1_master }
+ field = "Injector F", smallpw2_opt6, { smallpw2_opt1_master }
+ field = "Injector G", smallpw2_opt7, { smallpw2_opt1_master }
+ field = "Injector H", smallpw2_opt8, { smallpw2_opt1_master }
+ field = "Injector I", smallpw2_opta, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw2_optb, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw2_opt11, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw2_opt12, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+
+ dialog = smallpw2, "Injector Small Pulsewidths 2", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw2"
+ panel = smallpwwest2, West
+
+ dialog = smallpwwest, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw_opt1_master
+ field = "!CAUTION!"
+ field = "Unless you have specific injector data these"
+ field = "'curves' must be a straight line from 0-2"
+ field = "Ensure the start and end points are equal"
+ field = "(e.g. 0.000, 0.000 and 2.000, 2.000)"
+ field = "Select the pulsewidth curve for each injector"
+
+
+ field = "Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) }
+ field = "Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) }
+ field = "Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) }
+ field = "Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) }
+ field = "Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) }
+ field = "Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) }
+ field = "Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) }
+ field = "Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) }
+ field = "Injector I", smallpw_opta, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw_optb, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw_opt11, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw_opt12, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+
+ dialog = smallcurveswest, "", yAxis
+ panel = smallcurve0
+ panel = smallcurve2
+
+ dialog = smallcurveseast, "", yAxis
+ panel = smallcurve1
+ panel = smallcurve3
+
+ dialog = smallcurves, "", xAxis
+ panel = smallcurveswest
+ panel = smallcurveseast
+
+ dialog = smallpw, "Injector Small Pulsewidths", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw"
+ panel = smallpwwest, West
+ panel = smallcurves, Center
+
+
+
+ ; dialog = egoControl, "EGO Control"
+ dialog = egoControlright, ""
+ field = "Algorithm", egoAlgorithm, { egoType }
+ field = "Use EGO Delay Table", egoAlgorithm_delay_table, {egoType && (egoAlgorithm < 3)}
+ field = "Ignition Events Per Step", egoCount, { egoType && (egoAlgorithm < 3) && !egoAlgorithm_delay_table}
+ field = "EGO Sensor Response Time", ego_sensor_delay, { egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) }
+ field = "Use Authority Table", egoAlgorithm_auth, { egoType }
+ field = "Controller Auth +/-", egoLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Only Correct Above:", ego_lower_bound, { egoType && (egoAlgorithm < 3) }
+ field = "And Correct Below:", ego_upper_bound, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above RPM", egoRPM, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Below TPS", TPSOXLimit, { egoType && (egoAlgorithm < 3) }
+ field = "Active Below Load", MAPOXLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Above Load", MAPOXMin, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "EGO Delay After Start", ego_startdelay, { egoType && (egoAlgorithm < 3) }
+ field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
+ field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
+ field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
+
+ dialog = egoports, "",yAxis
+ field = "EGO 1 Port", egoport1
+ field = "EGO 2 Port", egoport2, {egonum > 1}
+ field = "EGO 3 Port", egoport3, {egonum > 2}
+ field = "EGO 4 Port", egoport4, {egonum > 3}
+ field = "EGO 5 Port", egoport5, {egonum > 4}
+ field = "EGO 6 Port", egoport6, {egonum > 5}
+ field = "EGO 7 Port", egoport7, {egonum > 6}
+ field = "EGO 8 Port", egoport8, {egonum > 7}
+ field = "EGO 9 Port", egoport9, {egonum > 8}
+ field = "EGO 10 Port", egoport10, {egonum > 9}
+ field = "EGO 11 Port", egoport11, {egonum > 10}
+ field = "EGO 12 Port", egoport12, {egonum > 11}
+
+; not implemented
+; dialog = egoports_tgt, "", yAxis
+; field = "AFR target"
+; field = "", egomap1t
+; field = "", egomap2t, {egonum > 1}
+; field = "", egomap3t, {egonum > 2}
+; field = "", egomap4t, {egonum > 3}
+; field = "", egomap5t, {egonum > 4}
+; field = "", egomap6t, {egonum > 5}
+; field = "", egomap7t, {egonum > 6}
+; field = "", egomap8t, {egonum > 7}
+
+ dialog = egoports2, "EGO ports", xAxis
+ panel = egoports
+ ; panel = egoports_tgt
+
+ dialog = egoControlleft, "", yAxis
+ field = "EGO Sensor Type", egoType
+ field = "Number Of Sensors", egonum, { egoType }
+ field = "#Remember to Calibrate and set Project Properties"
+ panel = egoports2
+
+ dialog = egoControlmain, "", xAxis
+ panel = egoControlright, West
+ panel = egoControlleft, East
+
+
+ dialog = egomap_inj, "", yAxis
+ field = "Injector"
+ field = "Inj A"
+ field = "Inj B"
+ field = "Inj C"
+ field = "Inj D"
+ field = "Inj E"
+ field = "Inj F"
+ field = "Inj G"
+ field = "Inj H"
+ field = "Inj I"
+ field = "Inj J"
+ field = "Inj K"
+ field = "Inj L"
+
+ dialog = egomap_ego, "", yAxis
+ field = "- Uses Sensor"
+ field = "", egomap1
+ field = "", egomap2
+ field = "", egomap3
+ field = "", egomap4
+ field = "", egomap5
+ field = "", egomap6
+ field = "", egomap7
+ field = "", egomap8
+ field = "", egomap9
+ field = "", egomap10
+ field = "", egomap11
+ field = "", egomap12
+
+ dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj
+ panel = egomap_ego
+
+ dialog = egoControl, "AFR / EGO Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egocont"
+ panel = egoControlmain, West
+ panel = egomapping, East
+
+
+
+
+
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy, EDIS, Wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 < 31) && (spk_conf2_oddodd != 3) }
+ field = "HEI/GMDIS, TFI, C3I Options", spk_conf2_gmtfi, {(spk_mode0 == 2) || (spk_mode0 == 4)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number Of Coils", spk_mode3
+ field = "Spark Hardware In Use", hardware_spk
+ field = "Cam Input (See tooltip)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ field = "Flip Polarity On Hi-Res Tach / Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell type", dwellmode
+ field = "Use Dwell vs Rpm Curve", spk_conf2_dwell, {dwellmode ==2}
+ field = "Use Dwell Table", spk_conf2_dwelltbl, {dwellmode ==0}
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) && (spk_conf2_dwelltbl==0)}
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) && (spk_conf2_dwell==0)}
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Spark Trim", spk_mode3_trim
+ field = "Kick-start crank delay", spk_mode3_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_mode3_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, { spk_mode0 == 4 }
+ field = "Trigger Wheel Teeth", triggerTeeth, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Main Wheel Speed", spk_config_camcrank, { (spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && spk_mode0 == 4}
+ field = "Level For Phase 1", spk_config_campol, {(spk_mode0 == 25) || ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "Check At Tooth#", poll_level_tooth, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && spk_mode0 == 4}
+
+ dialog = padignition
+ field = ""
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ignopts"
+ panel = westIgnitionOptions, West
+ panel = eastIgnitionOptions, East
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper Idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidle_freq_koeo, { IdleCtl == 2 }
+ field = "Output Port", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ field = "3 Wire Mode", pwmidle_freq_pin3, { IdleCtl == 2 }
+
+ field = "Frequency", pwmidle_freq_scale, { IdleCtl == 2 }
+ field = "This frequency may be shared with boost control"
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidle"
+ field = "Idle Valve Minimum Duty", pwmidle_closed_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Idle Valve Maximum Duty", pwmidle_open_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Dashpot Adder", pwmidle_dp_adder, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Use Last Value or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Minimum Steps", pwmidle_closed_steps, { (IdleCtl == 3) }
+ field = "Idle Valve Maximum Steps", pwmidle_open_steps, { (IdleCtl == 3) }
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ slider = "Closed-Loop Sensitivity", pwmidle_max_rpm_new, horizontal
+ field = "Tuning Mode", pwmidle_cl_opts_display_pid
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot", pwmidle_rpmdot_disablepid, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Use VSS To Activate PID", IdleCtl_vss
+ field = "Minimum VSS1", idleminvss, {IdleCtl_vss}
+ field = "Idle Activation TPS Threshold", pwmidle_tps_threshold
+ field = "RPMdot Threshold", pwmidle_rpmdot_threshold, { IdleCtl_vss != 1 }
+ field = "Max Decel Load", pwmidle_decelload_threshold, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_empty, ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pwmidle_west_panel, "", border
+ panel = pwmidle_closedloop, North
+ panel = pwmidle_PID_gains, Center
+
+ dialog = pwmidle_mid_panel, "", border
+ panel = pwmidle_PID_behavior, North
+ panel = pwmidle_PID_activation, Center
+ panel = pwmidle_empty, South
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", border
+ panel = pwmidle_mid_panel, Center
+ panel = pwmidle_west_panel, West
+
+; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aeset"
+ field = "Use Time-Based or Accel-Pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE, X-tau)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+ field = "X-Tau MAPdot Thresholds for transition to X, Tau Decel Tables"
+ field = "Start Transition", MapThreshXTD, {EAEOption > 2}
+ field = "Finish Transition", MapThreshXTD2, {EAEOption > 2}
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", tpsasync_events, { feature7_aeevents }
+ field = "Accel Taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime, { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+;accel-pump
+
+ dialog = pump_ae_south_west, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier
+
+ dialog = pump_ae_south_east, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south, "", xAxis
+ panel = pump_ae_south_west
+ panel = pump_ae_south_east
+
+ dialog = pump_ae_south, "", yAxis
+ liveGraph = pump_ae_Graph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south
+
+ dialog = pump_ae_north, "", xAxis
+ panel = pump_accel_mapdot_curve, West, {accel_blend_percent < 100}
+ panel = pump_accel_tpsdot_curve, East, {accel_blend_percent > 0}
+
+ dialog = pump_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent, horizontal
+
+ dialog = AEpump_settings, "Accel-Pump Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north
+ panel = pump_ae_mid
+ panel = pump_ae_south
+
+;time based AE (2)
+ dialog = time_ae_south_west2, ""
+ field = "Accel MAPdot threshold", mapThresh2
+ field = "End Pulsewidth", aeEndPW2
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", taeTime_events2, { feature7_aeevents }
+ field = "Accel Taper", aeTaperTime_events2, { feature7_aeevents }
+ field = "Accel Time", taeTime2, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime2, { !feature7_aeevents }
+
+ dialog = time_ae_south_east2, ""
+ field = "Accel TPSdot Threshold", tpsThresh2
+ field = "Decel Fuel Amount", tdePct2
+ field = "Cold Accel Adder", taeColdA2
+ field = "Cold Accel Multiplier", taeColdM2
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = time_ae_south_south2, "", xAxis
+ panel = time_ae_south_west2
+ panel = time_ae_south_east2
+
+ dialog = time_ae_south2, "", yAxis
+ liveGraph = timeaeGraph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south2
+
+ dialog = time_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion2, horizontal
+
+ dialog = time_ae_north2, "", xAxis
+ panel = time_accel_mapdot_curve2, West, {tpsProportion2 < 100}
+ panel = time_accel_tpsdot_curve2, East, {tpsProportion2 > 0}
+
+ dialog = AEtime_settings2, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north2
+ panel = time_ae_mid2
+ panel = time_ae_south2
+
+;accel-pump (2)
+
+ dialog = pump_ae_south_west2, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold2, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold2, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier2
+
+ dialog = pump_ae_south_east2, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south2, "", xAxis
+ panel = pump_ae_south_west2
+ panel = pump_ae_south_east2
+
+ dialog = pump_ae_south2, "", yAxis
+ liveGraph = pump_ae_Graph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south2
+
+ dialog = pump_ae_north2, "", xAxis
+ panel = pump_accel_mapdot_curve2, West, {accel_blend_percent2 < 100}
+ panel = pump_accel_tpsdot_curve2, East, {accel_blend_percent2 > 0}
+
+ dialog = pump_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent2, horizontal
+
+ dialog = AEpump_settings2, "Accel-Pump Accel Enrichment 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north2
+ panel = pump_ae_mid2
+ panel = pump_ae_south2
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calmapbaro"
+ field = "#MAP Sensor"
+#if INI_VERSION_2
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", map0
+ field = "Value At 5.0 Volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+#if INI_VERSION_2
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings3, "Knock Sensor Settings"
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ field = "Knock Indicated By:", knkDirection, { knk_option && !knk_option_an }
+ field = "Pullup/Down On Input", knkpull, { knk_option && !knk_option_an }
+ field = "Input Pin", knkport_an, { knk_option && (knk_option_an == 1) }
+ field = "Window Sample Type", knk_option_wind, { knk_option && (knk_option_an == 1) }
+ field = "Window Output", knk_pin_out, { knk_option && (knk_option_an < 2) }
+ field = "Monitor Per Cylinder", knock_conf_percyl, { knk_option > 0 }
+ field = "Control Per Cylinder", knock_conf_percylact, { knk_option > 0 }
+ field = "DEBUG data", knock_conf_debug, { knk_option > 0 }
+ field = "#Detection"
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "Ignore During Launch/Flatshift", knock_conf_launch, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Coarse Step Size", knk_step1, { knk_option > 0 }
+ field = "Retard Fine Step Size", knk_step2, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step_adv, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = ks4a, "", yAxis
+ field = "Cyl#"
+ field = "1"
+ field = "2"
+ field = "3"
+ field = "4"
+ field = "5"
+ field = "6"
+ field = "7"
+ field = "8"
+ field = "9"
+ field = "10"
+ field = "11"
+ field = "12"
+ dialog = ks4b, "", yAxis
+
+ field = "Gain"
+ field = "", knock_gain01
+ field = "", knock_gain02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_gain03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_gain04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_gain05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_gain06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_gain07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_gain08, {knock_conf_percyl && (nCylinders >7)}
+ field = "", knock_gain09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_gain10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_gain11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_gain12, {knock_conf_percyl && (nCylinders >11)}
+
+ dialog = ks4c, "", yAxis
+ field = "Sensor"
+ field = "", knock_sens01
+ field = "", knock_sens02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_sens03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_sens04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_sens05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_sens06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_sens07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_sens08, {knock_conf_percyl && (nCylinders >7)}
+ field = "", knock_sens09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_sens10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_sens11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_sens12, {knock_conf_percyl && (nCylinders >11)}
+ dialog = ks4bot, "", xAxis
+ panel = ks4a
+ panel = ks4b
+ panel = ks4c
+
+ dialog = ks4top, ""
+ field = "Bandpass Frequency (kHz)", knock_bpass
+ field = "Integrator Time constant (us)", knock_int
+ field = "Number of Sensors", knock_conf_num
+ field = "Monitor Per Cylinder", knock_conf_percyl
+ field = "Knock gain:"
+
+ dialog = knockSettings4, "Knock Sensor Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockparam"
+ panel = ks4top, North
+ panel = ks4bot, South
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knock"
+ panel = knockSettings3, West
+ panel = knockthresh_curve, East
+
+ dialog = knockSettings2, "Knock Window Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockwindow"
+ panel = knockstart_curve, North
+ panel = knockduration_curve, South
+
+ dialog = idleAdvancemenu, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Idle RPM Timing Correction", idle_special_ops_timing_assist
+ field = "Go to idle advance/Idle RPM timing correction when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleadv, { idleadvance_on || idle_special_ops_timing_assist }
+ field = "TPS Is Below:", idleadvance_tps, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And RPM Is Below:", idleadvance_rpm, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And Load Is Above:", idleadvance_load, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And CLT Is Above:", idleadvance_clt, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And After Delay:", idleadvance_delay, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+
+ dialog = idleAdvance, "Idle Advance Settings", border
+ panel = idleAdvancemenu, West
+ panel = idleAdvance_curve, East
+
+ dialog = idleVemenu, "Idle VE settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleve"
+ field = "Idle VE On", idleve_on
+ field = "Go to idle VE when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleve, { idleve_on }
+ field = "TPS Is Below:", idleve_tps, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And RPM Is Below:", idleve_rpm, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And load Is Above:", idleve_load, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And CLT Is Above:", idleve_clt, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And VSS Zero?", idleve_vsson, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And After Delay:", idleve_delay, { idleve_on && !idleveadv_to_pid_idleve }
+
+ dialog = idleVeTables_n, "Idle VE Table"
+ panel = idleve1Tbl, North, { idleve_on }
+
+ dialog = idleVeTables_s, "Idle VE Table - Dual Fuel"
+ panel = idleve2Tbl, South, { idleve_on && dualfuel_sw_on }
+
+ dialog = idleVeTables, "", yAxis
+ panel = idleVeTables_n
+ panel = idleVeTables_s
+
+ dialog = idleVe, "Idle VE", border
+ panel = idleVemenu, West
+ panel = idleVeTables, Center
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#baud"
+ field = "#The main baud rate should normally be 115200"
+ field = "Megasquirt Baud Rate", baud
+ field = "9600, 19200, 38400, 57600, 115200 only"
+ field = "SDcard Readback Baud Rate", baudhigh
+ field = "up to 230400 only"
+ field = "Set these, Burn"
+ field = "Then adjust tuning software comms baud rate to match"
+ field = "Then powercycle Megasquirt"
+ field = "Use High Speed Runtime", scatterRuntimeEnabled
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = generic_pid_left_a, ""
+ field = "Enable", generic_pid_flags_a_on
+ field = "Closed-loop (PID) type", generic_pid_flags_a_type, { generic_pid_flags_a_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_a, generic_pid_load_size_a, { generic_pid_flags_a_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_a, generic_pid_PV_size_a, { generic_pid_flags_a_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_a, { generic_pid_flags_a_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_a, { generic_pid_flags_a_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_a, { generic_pid_flags_a_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_a, { generic_pid_flags_a_on }
+ field = "Max Control Output", generic_pid_output_upperlim_a, { generic_pid_flags_a_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_a, { generic_pid_flags_a_on }
+ field = "Output Polarity", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID direction", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID use stepper", generic_pid_flags_a_output_type, { generic_pid_flags_a_on }
+; field = "Generic PID use table or curve", generic_pid_flags_a_lookup_type, { generic_pid_flags_a_on }
+ field = "Control Interval", generic_pid_control_interval_a, { generic_pid_flags_a_on }
+ field = "P Term", generic_pid_P_a, { generic_pid_flags_a_on }
+ field = "I Term", generic_pid_I_a, { generic_pid_flags_a_on }
+ field = "D Term", generic_pid_D_a, { generic_pid_flags_a_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_grapha, "", card
+ panel = generic_pid_Tbl_a, Center, { generic_pid_flags_a_on }
+
+ dialog = generic_pid_a, "Generic Closed-Loop A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_a, West
+ panel = generic_pid_curve_grapha, Center
+
+ dialog = generic_pid_left_b, ""
+ field = "Enable", generic_pid_flags_b_on
+ field = "Closed-Loop (PID) Type", generic_pid_flags_b_type, { generic_pid_flags_b_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_b, generic_pid_load_size_b, { generic_pid_flags_b_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_b, generic_pid_PV_size_b, { generic_pid_flags_b_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_b, { generic_pid_flags_b_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_b, { generic_pid_flags_b_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_b, { generic_pid_flags_b_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_b, { generic_pid_flags_b_on }
+ field = "Max Control Output", generic_pid_output_upperlim_b, { generic_pid_flags_b_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_b, { generic_pid_flags_b_on }
+ field = "Output Polarity", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID direction", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID use stepper", generic_pid_flags_b_output_type, { generic_pid_flags_b_on }
+; field = "Generic PID use table or curve", generic_pid_flags_b_lookup_type, { generic_pid_flags_b_on }
+ field = "Control Interval", generic_pid_control_interval_b, { generic_pid_flags_b_on }
+ field = "P Term", generic_pid_P_b, { generic_pid_flags_b_on }
+ field = "I Term", generic_pid_I_b, { generic_pid_flags_b_on }
+ field = "D Term", generic_pid_D_b, { generic_pid_flags_b_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_graphb, "", card
+ panel = generic_pid_Tbl_b, Center, { generic_pid_flags_b_on }
+
+ dialog = generic_pid_b, "Generic Closed-Loop B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_b, West
+ panel = generic_pid_curve_graphb, Center
+
+ ;-------------------------------------------------------------------------------
+ ; General help text
+
+ help = helpGeneral, "Megasquirt 3 General Help"
+ webHelp = "http://www.msextra.com/"
+ text = "For current documentation, click the Web Help button,"
+ text = "or visit http://www.msextra.com/."
+ text = "
"
+ text = "
Megasquirt firmware is copyright and is only licensed for use on approved hardware."
+ text = "
See the LICENSE text supplied with your firmware."
+ text = "
"
+ text = "
To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+ ;-------------------------------------------------------------------------------
+#if INI_VERSION_2
+ [PortEditor]
+ ; spare ports
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = ms3_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = psEnabled, "INVALID", "INVALID", "INVALID", "Stepper Out 2", "Stepper Out 1", "INVALID", "PWM Out 2", "High Current Out 3", "High Current Out 1", "High Current Out 2", "PWM Out 3", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "Digital Frequency In 2", "Tach Out", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANout01", "CANout02", "CANout03", "CANout04", "CANout05", "CANout06", "CANout07", "CANout08", "CANout09", "CANout10", "CANout11", "CANout12", "CANout13", "CANout14", "CANout15", "CANout16", "Loop 1", "Loop 2", "Loop 3"
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+#endif
+ ;-------------------------------------------------------------------------------
+
+ [CurveEditor]
+ curve = vsslaunch_curve, "RPM Limit vs. Speed"
+ columnLabel = "Speed", "RPM limit", "Retard"
+ xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+ yAxis = 0, {rpmhigh}, 9
+; xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+; yAxis = 0, 30, 9
+ xBins = vsslaunch_vss
+ yBins = vsslaunch_rpm
+ yBins = vsslaunch_retard
+
+ curve = cranktaper_curvee, "Cranking Taper Curve (Events)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Events", "%fuel"
+ xAxis = 0, 1000, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_timeevents
+ yBins = cranktaper_pct
+
+ curve = cranktaper_curvet, "Cranking Taper Curve (Time)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Time", "%fuel"
+ xAxis = 0, 25.5, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_time
+ yBins = cranktaper_pct
+
+ curve = oil_curve, "Min/Max Oil Pressure vs. RPM"
+ columnLabel = "RPM", "Min", "Max"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 300, 6
+ xBins = oil_rpm, rpm
+ yBins = oil_press_min
+ yBins = oil_press_max
+ lineLabel = "Min. pressure"
+ lineLabel = "Max. pressure"
+
+ curve = hpte_curve, "Enrichment vs. Time"
+ columnLabel = "Time", "AFR decrease"
+ xAxis = 0, 25.5, 6
+ yAxis = 0, 3, 6
+ xBins = hpte_times
+ yBins = hpte_afrs
+
+ curve = fp_temp_curve, "Temperature Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp1"
+ columnLabel = "Temperature", "adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = fp_temps, fuel_temp1
+ yBins = fp_temp_adj
+
+ curve = fp_press_curve, "Pressure Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress1"
+ columnLabel = "Differential Pressure", "adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = fp_presss, fuel_press1
+ yBins = fp_press_adj
+
+ curve = alternator_linearise, "Duty linearisation"
+ columnLabel = "Calc", "Output"
+ xAxis = 0, 100, 7
+ yAxis = 0, 100, 7
+ xBins = alt_dutyin
+ yBins = alt_dutyout
+
+ curve = alternator_tempcurve, "Target Charge Voltage"
+ columnLabel = "Temperature", "Voltage"
+ xAxis = 0, 100, 6
+ yAxis = 12, 16, 6
+ xBins = alternator_temp
+ yBins = alternator_targvolts
+
+ curve = alternator_outduty, "Alternator Control Duty"
+ columnLabel = "Voltage", "Duty %"
+ xAxis = 12, 16, 6
+ yAxis = 0, 100, 6
+ xBins = alternator_dvolts, alt_targv
+ yBins = alternator_dutyv
+
+ curve = alternator_outfreq, "Alternator Control Frequency"
+ columnLabel = "Voltage", "Freq Hz"
+ xAxis = 12, 16, 6
+ yAxis = 0, 250, 6
+ xBins = alternator_fvolts, alt_targv
+ yBins = alternator_freqv
+
+ curve = pwm_curve_a, "PWM curve A"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_a, pwma_load
+ yBins = pwm_yaxis_a
+ size = 300, 240
+
+ curve = pwm_curve_b, "PWM curve B"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_b, pwmb_load
+ yBins = pwm_yaxis_b
+ size = 300, 240
+
+ curve = pwm_curve_c, "PWM curve C"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_c, pwmc_load
+ yBins = pwm_yaxis_c
+ size = 300, 240
+
+ curve = pwm_curve_d, "PWM curve D"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_d, pwmd_load
+ yBins = pwm_yaxis_d
+ size = 300, 240
+
+ curve = pwm_curve_e, "PWM curve E"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_e, pwme_load
+ yBins = pwm_yaxis_e
+ size = 300, 240
+
+ curve = pwm_curve_f, "PWM curve F"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_f, pwmf_load
+ yBins = pwm_yaxis_f
+ size = 300, 240
+
+ curve = tc_slip_curve, "Slip Threshold vs Knob Input"
+ columnLabel = "Knob Input", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = tcslipx
+ yBins = tcslipy
+
+ curve = blend1_curve, "VE1 -> VE2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx1
+ yBins = blendy1
+
+ curve = blend2_curve, "Spk1 -> Spk2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx2
+ yBins = blendy2
+
+ curve = blend3_curve, "VE1+2 -> VE3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx3
+ yBins = blendy3
+
+ curve = blend4_curve, "Spk1+2 -> Spk3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx4
+ yBins = blendy4
+
+ curve = blend5_curve, "AFR1 -> AFR2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx5
+ yBins = blendy5
+
+ curve = blend6_curve, "Boost1 -> Boost2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx6
+ yBins = blendy6
+
+ curve = blend7_curve, "Crank % 1 -> Crank % 2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx7
+ yBins = blendy7
+
+ curve = blend8_curve, "Flex Blending"
+ columnLabel = "Flex%", "Blend%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx8
+ yBins = blendy8
+
+ curve = tpswot_curve, "TPS for WOT"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ curve = launch_retard_time, "Timed Retard After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#timedretard"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = launch_time
+ yBins = launch_retard
+
+ curve = cl_idle_timing_curve, "Idle RPM Timing Correction Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadvrpm"
+ columnLabel = "RPM delta", "Timing Delta"
+ xAxis = -400, 400, 8
+ yAxis = -20, 20, 8
+ xBins = cl_idle_timing_target_deltas
+ yBins = cl_idle_timing_advance_deltas
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -10, 10, 6
+ xBins = idle_voltage_comp_voltage
+ yBins = idle_voltage_comp_delta
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+;time-based2
+ curve = time_accel_mapdot_curve2, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates2, MAPdot
+ yBins = maeBins2
+
+;time-based2
+ curve = time_accel_tpsdot_curve2, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates2, TPSdot
+ yBins = taeBins2
+
+;accel-pump
+ curve = pump_accel_mapdot_curve, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots, MAPdot
+ yBins = accel_mapdot_amts
+
+;accel-pump
+ curve = pump_accel_tpsdot_curve, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots, TPSdot
+ yBins = accel_tpsdot_amts
+
+;accel-pump2
+ curve = pump_accel_mapdot_curve2, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots2, MAPdot
+ yBins = accel_mapdot_amts2
+
+;accel-pump2
+ curve = pump_accel_tpsdot_curve2, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots2, TPSdot
+ yBins = accel_tpsdot_amts2
+
+ curve = knockstart_curve, "Knock Window Start"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -40, 10, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_starts
+
+ curve = knockduration_curve, "Knock Window Duration"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 40, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_durations
+
+ curve = knockthresh_curve, "Knock Input Threshold"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = knockupscale_curve, "Knock Coolant Scaling"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockcoolant"
+ columnLabel = "clt", "%"
+ xAxis = {cltlowlim}, {clthighlim}, 6
+ yAxis = 100, 500, 6
+ xBins = knock_clts, coolant
+ yBins = knock_upscale
+ gauge = cltGauge
+
+ curve = tc_perfect_curve, "Traction Control - Perfect Run VSS"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectvss"
+ columnLabel = "Time", "VSS"
+ xAxis = 0, 20, 9
+ yAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_vss
+
+ curve = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectrpm"
+ columnLabel = "Time", "RPM"
+ xAxis = 0, 20, 9
+ yAxis = 0, {rpmhigh}, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_rpm
+
+ curve = tc_retard_curve, "Spark Retard"
+ columnLabel = "Slip x time", "Retard"
+ xAxis = 0, 100, 5
+ yAxis = 0, 30, 5
+ xBins = tc_react_x
+ yBins = tc_retard
+
+ curve = tc_spkcut_curve, "Spark Cut"
+ columnLabel = "Slip x time", "Spark"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_spkcut
+
+ curve = tc_nitrous_curve, "Nitrous%"
+ columnLabel = "Slip x time", "Nitrous"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_nitrous
+
+ curve = tc_boost_curve, "Boost Cut"
+ columnLabel = "Slip x Time", "Boost"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost
+
+ curve = tc_boost_duty_delta_curve, "Boost Duty +/-"
+ columnLabel = "Slip x Time", "Boost Duty +/-"
+ xAxis = 0, 100, 5
+ yAxis = -100, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost_duty_delta
+
+ curve = tc_addfuel_curve, "Add Fuel"
+ columnLabel = "Slip x time", "Added Fuel"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_addfuel
+
+ curve = dualfuel_temp_curve, "Temperature Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp2"
+ columnLabel = "Temperature", "Adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_temp, fuel_temp2
+ yBins = dualfuel_temp_adj
+
+ curve = dualfuel_press_curve, "Pressure Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress2"
+ columnLabel = "Differential Pressure", "Adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_press, fuel_press2
+ yBins = dualfuel_press_adj
+
+ curve = primingPW2, "Priming Pulse 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep2"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p21, coolant, readonly
+ yBins = primePWTable2
+ gauge = cltGauge
+
+ curve = crankingPW2, "Cranking Pulse % 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp2"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant
+ yBins = crankPctTable2
+ gauge = cltGauge
+
+ curve = asePct2, "Afterstart Enrichment (ASE) Percentage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep2"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = asePctTable2
+ gauge = cltGauge
+
+ curve = aseTaper2, "Afterstart Enrichment (ASE) Taper 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset2"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = aseCntTable2
+ gauge = cltGauge
+
+ curve = warmup_curve2, "Warmup Enrichment (WUE) Curve 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue2"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = wueBins2
+ gauge = cltGauge
+
+ curve = MAFtable1f, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Freq", "Flow"
+ xAxis = {maf_freq0}, {maf_freq1}, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = maff, maf_freq
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellrpm_curve, "Dwell vs RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellvsrpm"
+ columnLabel = "RPM", "Dwell"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 6, 6
+ xBins = dwellrpm_rpm
+ yBins = dwellrpm_dwell
+
+
+ curve = boostvss_duty_curve, "Boost Duty vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "Duty"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 100, 6
+ xBins = boostvss_speed
+ yBins = boostvss_duty
+
+ curve = boostvss_target_curve, "Boost Target vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "kPa"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 400, 6
+ xBins = boostvss_speed
+ yBins = boostvss_target
+
+ ; nitrous 1 vs time
+ curve = n2o1_duty_time, "Nitrous1 - Duty vs Time"
+ columnLabel = "s", "Duty"
+
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_time
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_time, "Nitrous1 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_time
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_time, "Nitrous1 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_time
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs time
+ curve = n2o2_duty_time, "Nitrous2 - Duty vs Time"
+ columnLabel = "s", "Duty"
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_time
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_time, "Nitrous2 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_time
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_time, "Nitrous2 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_time
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs rpm
+ curve = n2o1_duty_rpm, "Nitrous1 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_rpm, "Nitrous1 - Added fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_rpm, "Nitrous1 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_rpm
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs rpm
+ curve = n2o2_duty_rpm, "Nitrous2 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_rpm, "Nitrous2 - Added Fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_rpm, "Nitrous2 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_rpm
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs VSS
+ curve = n2o1_duty_vss, "Nitrous1 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_vss
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_vss, "Nitrous1 - Added fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_vss
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_vss, "Nitrous1 - Retard vs VSS"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_vss
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs vss
+ curve = n2o2_duty_vss, "Nitrous2 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_vss
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_vss, "Nitrous2 - Added Fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_vss
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_vss, "Nitrous2 - Retard vs VSS"
+ columnLabel = "VSS", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_vss
+ yBins = n2o2_retard
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matcltcor"
+ columnLabel = "flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+ ;small pulsewidths
+ curve = smallcurve0, "Small Pulsewidth Curve 1"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw0
+
+ curve = smallcurve1, "Small Pulsewidth Curve 2"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw1
+
+ curve = smallcurve2, "Small Pulsewidth Curve 3"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw2
+
+ curve = smallcurve3, "Small Pulsewidth Curve 4"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw3
+
+ curve = opencurve0, "Dead Time Voltage % Curve 1"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct0
+
+ curve = opencurve1, "Injector Dead Time Curve 2"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct1
+
+ curve = opencurve2, "Injector Dead Time Curve 3"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct2
+
+ curve = opencurve3, "Injector Dead Time Curve 4"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct3
+
+ curve = boost_timed_curve, "Boost %age After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostdelay"
+ columnLabel = "Time", ""
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = boost_timed_time
+ yBins = boost_timed_pct
+
+ curve = mapsample_curve, "MAP Sample Timing"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 8
+ yAxis = 0, 180, 8
+ xBins = map_sample_rpms
+ yBins = map_sample_timing
+ gauge = tachometer
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant, readonly
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant, readonly
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant, readonly
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant, readonly
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment (ASE) Percentage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+ xAxis = -40, {mathigh}, 9
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = matGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air density"
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+; this is just as an example.. not yet finished
+ curve = EAEmanycurves, "Combined EAE Curve Graph - example to test TunerStudio features"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ xBins = EAESOCRPMbins2, rpm ; commented out to show last yAxis tied to previous xAxis
+ yBins = EAESON2
+ gauge = EAEGauge1 ; As always gauge is optional
+
+ lineLabel = "Sucked-from-walls const"
+ lineLabel = "Adhere-to-walls coef"
+ lineLabel = "Adhere-to-walls coef 2"
+ lineLabel = "Sucked-from-walls Correction"
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc2"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins2, fuelload
+ yBins = EAEBAWC2
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins2, fuelload
+ yBins = EAEBSOC2
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ gauge = EAEGauge1
+
+ curve = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins2, rpm
+ yBins = EAESON2
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins2, coolant
+ yBins = EAESOW2
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins2, coolant
+ yBins = EAEAWW2
+ gauge = EAEGauge1
+
+ curve = XAccTable, "X Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddlea"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 120, 4
+ xBins = XTrpms, rpm
+ yBins = XAcc
+ gauge = EAEGauge1
+
+ curve = XDecTable, "X Decel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddled"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 120, 9
+ xBins = XTrpms, rpm
+ yBins = XDec
+ gauge = EAEGauge1
+
+ curve = TauAccTable, "Tau Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimea"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauAcc
+ gauge = EAEGauge1
+
+ curve = TauDecTable, "Tau Decel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimed"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauDec
+ gauge = EAEGauge1
+
+ curve = XCltTable, "X (Puddling) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtxtemp"
+ columnLabel = "Temperature", "Correction"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = XClt_temps
+ yBins = XClt
+ gauge = cltGauge
+
+ curve = TCltTable, "Tau (Time) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtttemp"
+ columnLabel = "Temperature", "time"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = TauClt_temps
+ yBins = TauClt
+ gauge = cltGauge
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_curve, "Idle Advance Timing"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 4
+ yAxis = -10, 90, 4
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, {clthighlim}, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, 15000, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load at TPS Switchpoint"
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ [TableEditor]
+ ; table_id, map3d_id, "title", page
+ table = dwell_tbl, dwell_tblMap, "Dwell Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwelltable"
+ xBins = dwell_table_rpms, rpm
+ yBins = dwell_table_loads, ignload
+ zBins = dwell_table_values
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = ego_delay_Tbl, ego_delay_Map, "EGO Delay Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egodelay"
+ xBins = ego_delay_rpms, rpm
+ yBins = ego_delay_loads, afrload1
+ zBins = ego_delay_table
+ upDownLabel = "SHORTER", "LONGER"
+ gridOrient = 250, 0, 340
+
+ table = ego_auth_Tbl, ego_auth_Map, "EGO Authority Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egoauth"
+ xBins = ego_auth_rpms, rpm
+ yBins = ego_auth_loads, afrload1
+ zBins = ego_auth_table
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ltt_Table1Tbl, ltt_Table1Map, "Long Term Trim Table 1", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ltttable"
+ xBins = ltt_rpms, rpm
+ yBins = ltt_loads, fuelload
+ zBins = ltt_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = fp_dutyTbl, fp_dutyMap, "Fuel Pump Duty Table", 1
+ ; constant, variable
+ xBins = fpd_rpm rpm
+ yBins = fpd_load, fuelload
+ zBins = fpd_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = alphaMAPTbl, alphaMAPMap, "Fallback MAP Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fallbackmap"
+ xBins = amap_rpm, rpm
+ yBins = amap_tps, tps
+ zBins = alphaMAPtable
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;vvt timing
+ table = vvt_timing1_tbl, vvt_timing1_map, "VVT Intake (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtint"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing1
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = vvt_timing2_tbl, vvt_timing2_map, "VVT Exhaust (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtexh"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing2
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_rifuelcut_tbl, als_rifuelcut_map, "Turbo Anti-lag Roving Idle", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alsidle"
+ xBins = als_rirpms, rpm
+ yBins = als_ritpss, tps
+ zBins = als_rifuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_fuelcut_tbl, als_fuelcut_map, "ALS Fuel Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_fuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_sparkcut_tbl, als_sparkcut_map, "ALS Spark Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_sparkcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_timing_tbl, als_timing_map, "ALS Timing", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_addfuel_tbl, als_addfuel_map, "ALS Added Fuel %age", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_addfuel
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_a, pwm_duties_map_a, "Generic PWM Output A", 11
+ xBins = pwm_rpms_a, rpm
+ yBins = pwm_loadvals_a, pwma_load
+ zBins = pwm_duties_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_b, pwm_duties_map_b, "Generic PWM Output B", 2
+ xBins = pwm_rpms_b, rpm
+ yBins = pwm_loadvals_b, pwmb_load
+ zBins = pwm_duties_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_c, pwm_duties_map_c, "Generic PWM Output C", 2
+ xBins = pwm_rpms_c, rpm
+ yBins = pwm_loadvals_c, pwmc_load
+ zBins = pwm_duties_c
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_d, pwm_duties_map_d, "Generic PWM Output D", 2
+ xBins = pwm_rpms_d, rpm
+ yBins = pwm_loadvals_d, pwmd_load
+ zBins = pwm_duties_d
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_vvt, pwm_duties_map_vvt, "Generic PWM Output E / VVT", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtonoff"
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, vvt_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_e, pwm_duties_map_e, "Generic PWM Output E", 2
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, pwme_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_f, pwm_duties_map_f, "Generic PWM Output F", 2
+ xBins = pwm_rpms_f, rpm
+ yBins = pwm_loadvals_f, pwmf_load
+ zBins = pwm_duties_f
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_a, generic_pid_map_a, "Generic Closed-Loop A", 17
+ xBins = generic_pid_rpms_a, rpm
+ yBins = generic_pid_loadvals_a, generic_pid_load_a
+ zBins = generic_pid_targets_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_b, generic_pid_map_b, "Generic Closed-Loop B", 17
+ xBins = generic_pid_rpms_b, rpm
+ yBins = generic_pid_loadvals_b, generic_pid_load_b
+ zBins = generic_pid_targets_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = waterinjTbl, waterinjMap, "Water Injection Duty Table ", 1
+ xBins = waterinj_rpm, rpm
+ yBins = waterinj_map, map
+ zBins = waterinj_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = maxafr1Tbl, maxafr1Map, "Max AFR 1 in Lambda", 1
+#else
+ table = maxafr1Tbl, maxafr1Map, "Max AFR Difference", 1
+#endif
+ xBins = maxafr1_rpm, rpm
+ yBins = maxafr1_load, maxafrload
+ zBins = maxafr1_diff
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable4Tbl, veTable4Map, "Fuel VE Table 4", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve4"
+ ; constant, variable
+ xBins = frpm_table4, rpm
+ yBins = fmap_table4, fuelload2
+ zBins = veTable4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = idleve1Tbl, idleve1Map, "Idle VE table", 10
+ xBins = idleve_rpms1, rpm
+ yBins = idleve_loads1, fuelload
+ zBins = idleve_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = idleve2Tbl, idleve2Map, "Idle VE Table - Dual Fuel", 10
+ xBins = idleve_rpms2, rpm
+ yBins = idleve_loads2, fuelload
+ zBins = idleve_table2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = stagedTable, stagedMap, "Staged Injection Table", 6
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, fuelload
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl4, ignitionMap4, "Ignition Table 4 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign4"
+ xBins = srpm_table4, rpm
+ yBins = smap_table4, ignload2
+ zBins = advanceTable4
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Targets 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys2, boostctlDtyMap2, "Boost Control Duty 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty2"
+ xBins = boost_ctl_pwmtarg_rpm_bins2, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins2, throttle
+ zBins = boost_ctl_pwm_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Bias Duty 1", 15
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ_1
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs2, boostctlCLPWMtargsMap2, "Boost Control Bias Duty 2", 15
+ xBins = boost_ctl_cl_pwm_rpms2, rpm
+ yBins = boost_ctl_cl_pwm_targboosts2, boost_targ_2
+ zBins = boost_ctl_cl_pwm_targs2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs2, boostctlTargMap2, "Boost Control Targets 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg2"
+ xBins = boost_ctl_loadtarg_rpm_bins2, rpm
+ yBins = boost_ctl_loadtarg_tps_bins2, throttle
+ zBins = boost_ctl_load_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ ;injector trims
+ table = inj_trimaTbl, inj_trimaMap, "Cyl 1 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimbTbl, inj_trimbMap, "Cyl 2 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimcTbl, inj_trimcMap, "Cyl 3 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimdTbl, inj_trimdMap, "Cyl 4 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimeTbl, inj_trimeMap, "Cyl 5 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimfTbl, inj_trimfMap, "Cyl 6 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimgTbl, inj_trimgMap, "Cyl 7 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimhTbl, inj_trimhMap, "Cyl 8 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+ table = inj_trim1Tbl, inj_trim1Map, "Injector Trim 1", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trim2Tbl, inj_trim2Map, "Injector Trim 2", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim2"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimiTbl, inj_trimiMap, "Cyl 9 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimjTbl, inj_trimjMap, "Cyl 10 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimkTbl, inj_trimkMap, "Cyl 11 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimlTbl, inj_trimlMap, "Cyl 12 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimmTbl, inj_trimmMap, "Cyl 13 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimnTbl, inj_trimnMap, "Cyl 14 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimoTbl, inj_trimoMap, "Cyl 15 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimpTbl, inj_trimpMap, "Cyl 16 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;inj timing
+ table = inj_timing_tbl, inj_timing_map, "Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt1"
+ xBins = inj_timing_rpm, rpm
+ yBins = inj_timing_load, fuelload
+ zBins = inj_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = inj_timing_sec_tbl, inj_timing_sec_map, "Secondary Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt2"
+ xBins = inj_timing_sec_rpm, rpm
+ yBins = inj_timing_sec_load, fuelload
+ zBins = inj_timing_sec
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ ;spark trims
+ table = spk_trimaTbl, spk_trimaMap, "Spark Trim 1", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimbTbl, spk_trimbMap, "Spark Trim 2", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimcTbl, spk_trimcMap, "Spark Trim 3", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimdTbl, spk_trimdMap, "Spark Trim 4", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimeTbl, spk_trimeMap, "Spark Trim 5", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimfTbl, spk_trimfMap, "Spark Trim 6", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimgTbl, spk_trimgMap, "Spark Trim 7", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimhTbl, spk_trimhMap, "Spark Trim 8", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimiTbl, spk_trimiMap, "Spark Trim 9", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimjTbl, spk_trimjMap, "Spark Trim 10", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimkTbl, spk_trimkMap, "Spark Trim 11", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimlTbl, spk_trimlMap, "Spark Trim 12", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimmTbl, spk_trimmMap, "Spark Trim 13", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimnTbl, spk_trimnMap, "Spark Trim 14", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimoTbl, spk_trimoMap, "Spark Trim 15", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimpTbl, spk_trimpMap, "Spark Trim 16", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = narrowband_tgts_tbl, narrowband_tgts_map, "Narrowband EGO targets", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#narrowtargs"
+ xBins = narrowband_tgts_rpms, rpm
+ yBins = narrowband_tgts_loads, afrload1
+ zBins = narrowband_tgts
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ ;-------------------------------------------------------------------------------
+
+ [GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+ gaugeCategory = "Outputs 1"
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq1Gauge = pwseq1, "Pulse Width Seq 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq2Gauge = pwseq2, "Pulse Width Seq 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq3Gauge = pwseq3, "Pulse Width Seq 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq4Gauge = pwseq4, "Pulse Width Seq 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq5Gauge = pwseq5, "Pulse Width Seq 5", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq6Gauge = pwseq6, "Pulse Width Seq 6", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq7Gauge = pwseq7, "Pulse Width Seq 7", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq8Gauge = pwseq8, "Pulse Width Seq 8", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width Seq 9", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width Seq 10", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq11Gauge = pwseq11, "Pulse Width Seq 11", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq12Gauge = pwseq12, "Pulse Width Seq 12", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Outputs 2"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ ; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ boostdutyGauge2 = boostduty2, "Boost Duty 2", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injtimingpriGauge = inj_timing_pri, "Injector timing (pri)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ injtimingsecGauge = inj_timing_sec, "Injector timing (sec)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+
+ gaugeCategory = "Outputs 3"
+ nitrous1_duty = nitrous1_duty, "Nitrous 1 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ nitrous2_duty = nitrous2_duty, "Nitrous 2 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ water_duty = water_duty, "Water Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_a = duty_pwm_a, "Generic PWM A Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_b = duty_pwm_b, "Generic PWM B Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_c = duty_pwm_c, "Generic PWM C Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_d = duty_pwm_d, "Generic PWM D Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_e = duty_pwm_e, "Generic PWM E Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_f = duty_pwm_f, "Generic PWM F Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ vvt_duty1 = vvt_duty1, "VVT 1 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty2 = vvt_duty2, "VVT 2 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty3 = vvt_duty3, "VVT 3 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty4 = vvt_duty4, "VVT 4 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ fp_duty = fp_duty, "Fuel pump duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ alt_duty = alt_duty, "Alternator Control Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ alt_freq = alt_freq, "Alternator Control Frequency", "Hz", 0, 255, 255, 255, 255, 255, 0, 0
+ alt_targv = alt_targv, "Alternator Target Volts", "V", 0, 16, 16, 16, 16, 16, 1, 1
+ generic_pid_duty_a = generic_pid_duty_a, "Generic Closed-Loop A Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ generic_pid_duty_b = generic_pid_duty_b, "Generic Closed-Loop B Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+
+ gaugeCategory = "Calculations 1"
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ gammaEnrichGauge = gammaEnrich, "Total cor", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ gammaairGauge = airCorrection, "Air density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ warmupgauge = warmupEnrich, "Warmup Enrichment", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ fuelcorr = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0
+ fueltemp_cor = fueltemp_cor, "Fuel Temperature Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ fuelpress_cor = fuelpress_cor, "Fuel Pressure Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ ltt_cor = ltt_cor, "Long Term Trim Correction", "%", -12.7, 12.7, -12.7, -12.7, 12.7, 12.7, 1, 1
+ veGauge1 = veCurr1, "VE1 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ nitrous_addfuel = n2o_addfuel, "Nitrous added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ tps_accel = tps_accel, "tps_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ map_accel = map_accel, "map_accel", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ total_accel = total_accel, "total_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ als_addfuel = als_addfuel, "ALS added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard, "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ coldAdvGauge = coldAdvDeg, "Cold advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ tc_retardGauge = tc_retard, "Traction Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ cel_retardGauge = cel_retard, "CEL Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ fc_retardGauge = fc_retard, "Fuel cut Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv4Gauge = adv4, "Spark Table 4", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ als_timingGauge = als_timing, "ALS Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launch_timingGauge = launch_timing, "Launch Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ step3_timingGauge = step3_timing, "3-step Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launchvss_retardGauge = launchvss_retard, "Launch VSS Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ timingerrGauge = timing_err, "Timing pred err", "%", -127, 127, 255,255,255,255,0,0
+; user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ nitrous_retard = n2o_retard, "Nitrous retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ launch_timer = launch_timer, "Launch timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+ launch_retard = launch_retard, "Launch timed retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ nitrous_timer = nitrous_timer, "Nitrous Timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+
+ gaugeCategory = "Calculations 3"
+ lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ vss1dot = vss1dot, "VSS1 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ vss2dot = vss2dot, "VSS2 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ vvttargGauge1 = vvt_target1, "VVT 1 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge2 = vvt_target2, "VVT 2 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge3 = vvt_target3, "VVT 3 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge4 = vvt_target4, "VVT 4 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ fuelflowGauge = fuelflow, "Fuel flow (avg)", "cc/min", 0, 65535, -1, -1, 99999, 99999, 0, 0
+ economy_l_100km = economy_l_100km, "Fuel economy", "l/100km", 0, 300, -1, -1, 900, 900, 1, 1
+ economy_mpg_us = economy_mpg_us, "Fuel economy", "mpg_us", 0, 60, -1, -1, 99, 99, 0, 0
+ economy_mpg_uk = economy_mpg_uk, "Fuel economy", "mpg_uk", 0, 60, -1, -1, 99, 99, 0, 0
+ boost_target_1 = boost_targ_1, "Boost Target 1", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ boost_target_2 = boost_targ_2, "Boost Target 2", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ tc_slipxtime = tc_slipxtime, "T/C Slip * Time", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+
+ gaugeCategory = "EGT inputs"
+#if CELSIUS
+ egtGauge1 = egt1, "EGT 01", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge2 = egt2, "EGT 02", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge3 = egt3, "EGT 03", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge4 = egt4, "EGT 04", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge5 = egt5, "EGT 05", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge6 = egt6, "EGT 06", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge7 = egt7, "EGT 07", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge8 = egt8, "EGT 08", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge9 = egt9, "EGT 09", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge10 = egt10, "EGT 10", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge11 = egt11, "EGT 11", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge12 = egt12, "EGT 12", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge13 = egt13, "EGT 13", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge14 = egt14, "EGT 14", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge15 = egt15, "EGT 15", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge16 = egt16, "EGT 16", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+#else
+ egtGauge1 = egt1, "EGT 01", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge2 = egt2, "EGT 02", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge3 = egt3, "EGT 03", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge4 = egt4, "EGT 04", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge5 = egt5, "EGT 05", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge6 = egt6, "EGT 06", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge7 = egt7, "EGT 07", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge8 = egt8, "EGT 08", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge9 = egt9, "EGT 09", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge10 = egt10, "EGT 10", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge11 = egt11, "EGT 11", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge12 = egt12, "EGT 12", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge13 = egt13, "EGT 13", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge14 = egt14, "EGT 14", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge15 = egt15, "EGT 15", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge16 = egt16, "EGT 16", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+#endif
+
+ gaugeCategory = "Sensor inputs1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ maf_freqGauge = maf_freq, "MAF Frequency", "Hz", 0, 30000, 0, 30000, 30000, 30000, 0, 0
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ gaugeCategory = "Sensor inputs2"
+ stream_levelGauge = stream_level, "Stream Level", "", 0, 128, 128, 128, 128, 128, 0, 0
+ vehiclespeed1 = vss1, "Vehicle Speed 1", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed2 = vss2, "Vehicle Speed 2", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed3 = vss3, "Vehicle Speed 3", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed4 = vss4, "Vehicle Speed 4", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+
+ shaftspeed1 = ss1, "Shaft Speed 1", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ shaftspeed2 = ss2, "Shaft Speed 2", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ gear = gear, "Gear", "", -1, 6, 6, 6, 6, 6, 0 ,0
+ accelx = accelx, "Accel X", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accely = accely, "Accel Y", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accelz = accelz, "Accel Z", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+#if CELSIUS
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+#else
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+#endif
+ fuelpressGauge1kpa = fuel_press1, "Fuel Pressure1", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1psi = fuel_press1_psi, "Fuel Pressure1", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1bar = fuel_press1_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2kpa = fuel_press2, "Fuel Pressure2", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2psi = fuel_press2_psi, "Fuel Pressure2", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2bar = fuel_press2_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ TPSADCGauge = tpsADC, "TPS ADC", "ADC", 0, 1023, -1, 1, 1024, 1024, 0, 0
+ load_duty = load_duty, "Alternator Load Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ batt_curr = batt_curr, "Battery Current", "A", -100, 100, 200, 200, 200, 200, 1, 1
+
+gaugeCategory = "Sensor inputs3"
+ vvtGauge1 = vvt_ang1, "VVT 1 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge2 = vvt_ang2, "VVT 2 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge3 = vvt_ang3, "VVT 3 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge4 = vvt_ang4, "VVT 4 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ knock01Gauge = knock_cyl01, "Knock cyl# 1", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock02Gauge = knock_cyl02, "Knock cyl# 2", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock03Gauge = knock_cyl03, "Knock cyl# 3", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock04Gauge = knock_cyl04, "Knock cyl# 4", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock05Gauge = knock_cyl05, "Knock cyl# 5", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock06Gauge = knock_cyl06, "Knock cyl# 6", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock07Gauge = knock_cyl07, "Knock cyl# 7", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock08Gauge = knock_cyl08, "Knock cyl# 8", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock09Gauge = knock_cyl09, "Knock cyl# 9", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock10Gauge = knock_cyl10, "Knock cyl#10", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock11Gauge = knock_cyl11, "Knock cyl#11", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock12Gauge = knock_cyl12, "Knock cyl#12", "", 0, 100, 0, 0, 100, 100, 1, 0
+
+gaugeCategory = "Sensor inputs4"
+ gps_latdeggauge = gps_latdeg, "GPS Latitude deg", "deg", -90, +90, -90, -90, 90, 90, 0, 0
+ gps_latmingauge = gps_latmin, "GPS Latitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_latsecgauge = gps_latsec, "GPS Latitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_londeggauge = gps_londeg, "GPS Longitude deg", "deg", 0, +180, 0, 0, 180, 180, 0, 0
+ gps_lonmingauge = gps_lonmin, "GPS Longitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_lonsecgauge = gps_lonsec, "GPS Longitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_lonEWgauge = gps_lonEW, "GPS Longitude E/W", "E/W", 0, 255, 0, 0, 255, 255, 0, 0
+ gps_altgauge = gps_alt, "GPS Altitude", "m", -100, +13000, -100, -100, 13000, 13000, 1, 1
+ gps_speedgauge = gps_speed, "GPS Speed", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ gps_coursegauge = gps_course, "GPS Course", "deg", 0, 360, 0, 0, 360, 360, 1, 1
+
+ gps_latitudegauge = gps_latitude, "GPS Latitude", "deg", -90, +90, -90, -90, 90, 90, 5, 5
+ gps_longitudegauge = gps_longitude, "GPS Longitude", "deg", -180, +180, -180, -180, 180, 180, 5, 5
+
+gaugeCategory = "AFR/EGO inputs"
+#if NARROW_BAND_EGO
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+#elif LAMBDA
+
+ lambda1Gauge = lambda1, "Lambda 1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda 2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda3Gauge = lambda3, "Lambda 3", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda4Gauge = lambda4, "Lambda 4", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda5Gauge = lambda5, "Lambda 5", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda6Gauge = lambda6, "Lambda 6", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda7Gauge = lambda7, "Lambda 7", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda8Gauge = lambda8, "Lambda 8", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#else
+
+ afr1Gauge = afr1, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr3Gauge = afr3, "Air:Fuel Ratio 3", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr4Gauge = afr4, "Air:Fuel Ratio 4", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr5Gauge = afr5, "Air:Fuel Ratio 5", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr6Gauge = afr6, "Air:Fuel Ratio 6", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr7Gauge = afr7, "Air:Fuel Ratio 7", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr8Gauge = afr8, "Air:Fuel Ratio 8", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#endif
+
+gaugeCategory = "AFR/EGO calculations"
+#if NARROW_BAND_EGO
+ afr1targetGauge = afrtgt1, "EgoV 1 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr2targetGauge = afrtgt2, "EgoV 2 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr1errGauge = afr1err, "EgoV 1 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+ afr2errGauge = afr2err, "EgoV 2 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+#elif LAMBDA
+ afr1targetGauge = afrtgt1, "Lambda 1 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "Lambda 2 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "Lambda 1 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "Lambda 2 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+#else
+ afr1targetGauge = afrtgt1, "AFR 1 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "AFR 2 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "AFR 1 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "AFR 2 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+#endif
+ egoCorrGauge1 = egocor1, "EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egocor2, "EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge3 = egocor3, "EGO Correction 3", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge4 = egocor4, "EGO Correction 4", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge5 = egocor5, "EGO Correction 5", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge6 = egocor6, "EGO Correction 6", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge7 = egocor7, "EGO Correction 7", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge8 = egocor8, "EGO Correction 8", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "AFR/EGO inputs 9-16"
+#if NARROW_BAND_EGO
+;
+#elif LAMBDA
+ lambda9Gauge = lambda9, "Lambda 9", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda10Gauge = lambda10, "Lambda 10", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda11Gauge = lambda11, "Lambda 11", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda12Gauge = lambda12, "Lambda 12", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+#else
+ afr9Gauge = afr9, "Air:Fuel Ratio 9", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr10Gauge = afr10, "Air:Fuel Ratio 10", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr11Gauge = afr11, "Air:Fuel Ratio 11", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr12Gauge = afr12, "Air:Fuel Ratio 12", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+#endif
+ egoV9Gauge = egov9, "Exhaust Gas Oxygen 9", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV10Gauge = egov10, "Exhaust Gas Oxygen 10", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV11Gauge = egov11, "Exhaust Gas Oxygen 11", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV12Gauge = egov12, "Exhaust Gas Oxygen 12", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+
+gaugeCategory = "AFR/EGO calculations 9-16"
+ egoCorrGauge9 = egocor9, "EGO Correction 9", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge10 = egocor10, "EGO Correction 10", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge11 = egocor11, "EGO Correction 11", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge12 = egocor12, "EGO Correction 12", "%", 50, 150, 90, 99, 101, 110, 1, 1
+
+gaugeCategory = "Generic sensor inputs"
+ sensor01Gauge = sensor01, { stringValue(sensor01Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor02Gauge = sensor02, { stringValue(sensor02Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor03Gauge = sensor03, { stringValue(sensor03Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor04Gauge = sensor04, { stringValue(sensor04Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor05Gauge = sensor05, { stringValue(sensor05Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor06Gauge = sensor06, { stringValue(sensor06Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor07Gauge = sensor07, { stringValue(sensor07Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor08Gauge = sensor08, { stringValue(sensor08Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor09Gauge = sensor09, { stringValue(sensor09Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor10Gauge = sensor10, { stringValue(sensor10Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor11Gauge = sensor11, { stringValue(sensor11Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor12Gauge = sensor12, { stringValue(sensor12Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor13Gauge = sensor13, { stringValue(sensor13Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor14Gauge = sensor14, { stringValue(sensor14Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor15Gauge = sensor15, { stringValue(sensor15Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor16Gauge = sensor16, "ECU temp.", "", -40, 200, -3277, -3277, 3277, 3277, 0, 0
+
+gaugeCategory = "CAN board inputs/outputs"
+ canin1_8Gauge = canin1_8, "CAN inputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout1_8Gauge = canout1_8, "CAN outputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout9_16Gauge = canout9_16, "CAN outputs 9-16", "", 0, 255, 255, 255, 255, 255,0, 0
+ canpwmin0Gauge = canpwmin0, "CAN PWMin 0", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin1Gauge = canpwmin1, "CAN PWMin 1", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin2Gauge = canpwmin2, "CAN PWMin 2", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin3Gauge = canpwmin3, "CAN PWMin 3", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+
+gaugeCategory = "X-Code dev"
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ status5sGauge = status5s, "Status 5 (signed)", "",-32767, 65535, 65535, 65535, 65535, 65535,0, 0
+ status6Gauge = status6, "Status 6", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status7Gauge = status7, "Status 7", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status8Gauge = status8, "Status 8", "", 0, 255, 255, 255, 255, 255, 0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop time", "us", 0, 10000, -1, -1, 1000, 6000, 0, 0
+ sd_filenum = sd_filenum, "SDcard file number", "", 0, 9999, 9999, 9999, 9999, 9999, 0 ,0
+ sd_error = sd_error, "SDcard error", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_status = sd_status, "SDcard status", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_phase = sd_phase, "SDcard phase", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ cel_statusGauge = cel_status, "CEL Status", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_status2Gauge = cel_status2, "CEL Status2", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_errorcodeGauge = cel_errorcode, "CEL Error code", "", 0, 32, 32, 32, 32, 32, 0, 0
+ loopGauge = loop, "Loop bits 1-3", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+; gauge2 = EAEGauge1
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoV1Gauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+ gauge8 = lostsyncGauge
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Data Lost", "Lost Data", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 32}, "VE1/2", "VE3/4", white, black, green, black
+ indicator = { status1 & 64}, "SPK1/2", "SPK3/4", white, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+ indicator = { status2 & 1}, "N2O 1 off", "N2O 1 on", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2 off", "N2O 2 on", white, black, green, black
+ indicator = { status2 & 4}, "No Launch", "Launch in", white, black, green, black
+ indicator = { status2 & 16}, "No Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black
+
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "3 step off", "3 step on", white, black, green, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 16}, "No 3 step", "3 step in", white, black, green, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "Launch Off", "Launch on", white, black, red, black
+
+ indicator = { status6 & 1}, "EGT warn", "EGT warn", white, black, red, black
+ indicator = { status6 & 2}, "EGT shutdown", "EGT shutdown", white, black, red, black
+ indicator = { status6 & 4}, "AFR warn", "AFR warn", white, black, red, black
+ indicator = { status6 & 8}, "AFR shutdown", "AFR shutdown", white, black, red, black
+ indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black
+ indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black
+ indicator = { status6 & 64}, "Fan", "Fan", white, black, green, black
+ indicator = { status6 & 128}, "MAPsample error!", "MAPsample error!", white, black, red, black
+
+ indicator = { status7 & 1}, "VVT1 err", "VVT1 err", white, black, red, black
+ indicator = { status7 & 2}, "VVT2 err", "VVT2 err", white, black, red, black
+ indicator = { status7 & 4}, "VVT3 err", "VVT3 err", white, black, red, black
+ indicator = { status7 & 8}, "VVT4 err", "VVT4 err", white, black, red, black
+ indicator = { status7 & 16}, "No Knock", "Knock", white, black, red, black
+ indicator = { status7 & 32}, "AC", "AC", white, black, green, black
+ indicator = { status7 & 64}, "Check Engine", "Check Engine", white, black, red, black
+ indicator = { status7 & 128}, "Limp mode", "Limp mode", white, black, red, black
+
+ indicator = { status8 & 4}, "W.I. low", "W.I. low!", white, black, red, black
+ indicator = { status8 & 8}, "PW4X", "PW4X", white, black, red, black
+ indicator = { status8 & 16}, "VSS launch L/O", "VSS launch L/O", white, black, red, black
+ indicator = { status8 & 32}, "VSS launch on", "VSS launch on", white, black, red, black
+
+ indicator = { sd_status & 1}, "No SD", "SD in", white, black, green, black
+ indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black
+ indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black
+ indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black
+
+ indicator = { (gammaEnrich < 70) }, "-", "Tune error", white, black, red, black
+
+#if PORT_STATUS
+ indicator = { porta0 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { porta1 }, "PORTA1", "PORTA1", white, black, green, black
+ indicator = { porta2 }, "PORTA2", "PORTA2", white, black, green, black
+ indicator = { porta3 }, "PORTA3", "PORTA3", white, black, green, black
+ indicator = { porta4 }, "PORTA4", "PORTA4", white, black, green, black
+ indicator = { porta5 }, "PORTA5", "PORTA5", white, black, green, black
+ indicator = { porta6 }, "PORTA6", "PORTA6", white, black, green, black
+ indicator = { porta7 }, "PORTA7", "PORTA7", white, black, green, black
+
+ indicator = { portb0 }, "PORTB0", "PORTB0", white, black, green, black
+ indicator = { portb1 }, "PORTB1", "PORTB1", white, black, green, black
+ indicator = { portb2 }, "PORTB2", "PORTB2", white, black, green, black
+ indicator = { portb3 }, "PORTB3", "PORTB3", white, black, green, black
+ indicator = { portb4 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portb5 }, "PORTB5", "PORTB5", white, black, green, black
+ indicator = { portb6 }, "PORTB6", "PORTB6", white, black, green, black
+ indicator = { portb7 }, "PORTB7", "PORTB7", white, black, green, black
+
+ indicator = { porte0 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { porte1 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { porte2 }, "PORTE2", "PORTE2", white, black, green, black
+ indicator = { porte4 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { porth6 }, "PORTH6", "PORTH6", white, black, green, black
+ indicator = { porth7 }, "PORTH7", "PORTH7", white, black, green, black
+
+ indicator = { portk0 }, "PORTK0", "PORTK0", white, black, green, black
+ indicator = { portk1 }, "PORTK1", "PORTK1", white, black, green, black
+ indicator = { portk2 }, "PORTK2", "PORTK2", white, black, green, black
+ indicator = { portk3 }, "PORTK3", "PORTK3", white, black, green, black
+ indicator = { portk7 }, "PORTK7", "PORTK7", white, black, green, black
+
+ indicator = { portj0 }, "PORTJ0", "PORTJ0", white, black, green, black
+ indicator = { portj1 }, "PORTJ1", "PORTJ1", white, black, green, black
+ indicator = { portm2 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portm3 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portm4 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portm5 }, "PORTM5", "PORTM5", white, black, green, black
+ indicator = { portj7 }, "PORTJ7", "PORTJ7", white, black, green, black
+
+ indicator = { portp2 }, "PORTP2", "PORTP2", white, black, green, black
+ indicator = { portp3 }, "PORTP3", "PORTP3", white, black, green, black
+ indicator = { portp4 }, "PORTP4", "PORTP4", white, black, green, black
+ indicator = { portp5 }, "PORTP5", "PORTP5", white, black, green, black
+ indicator = { portp6 }, "PORTP6", "PORTP6", white, black, green, black
+ indicator = { portp7 }, "PORTP7", "PORTP7", white, black, green, black
+
+ indicator = { portt0 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt1 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt2 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt3 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt4 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt5 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt6 }, "PORTT6", "PORTT6", white, black, green, black
+
+ indicator = { canin1_8 & 1 }, "CANIN1", "CANIN1", white, black, green, black
+ indicator = { canin1_8 & 2 }, "CANIN2", "CANIN2", white, black, green, black
+ indicator = { canin1_8 & 4 }, "CANIN3", "CANIN3", white, black, green, black
+ indicator = { canin1_8 & 8 }, "CANIN4", "CANIN4", white, black, green, black
+ indicator = { canin1_8 & 16 }, "CANIN5", "CANIN5", white, black, green, black
+ indicator = { canin1_8 & 32 }, "CANIN6", "CANIN6", white, black, green, black
+ indicator = { canin1_8 & 64 }, "CANIN7", "CANIN7", white, black, green, black
+ indicator = { canin1_8 & 128}, "CANIN8", "CANIN8", white, black, green, black
+#endif
+
+ indicator = { cel_status_map }, "MAP fault", "MAP fault", white, black, red, black ; 1
+ indicator = { cel_status_mat }, "MAT fault", "MAT fault", white, black, red, black ; 2
+ indicator = { cel_status_clt }, "CLT fault", "CLT fault", white, black, red, black ; 4
+ indicator = { cel_status_tps }, "TPS fault", "TPS fault", white, black, red, black ; 8
+ indicator = { cel_status_batt }, "BATT fault", "BATT fault", white, black, red, black ; 16
+ indicator = { cel_status_afr0 }, "AFR0 fault", "AFR0 fault", white, black, red, black ; 32
+ indicator = { cel_status_sync }, "SYNC fault", "SYNC fault", white, black, red, black ; 64
+ indicator = { cel_status_egt }, "EGT fault", "EGT fault", white, black, red, black ; 128
+ indicator = { cel_status_flex }, "Flex fault", "Flex fault", white, black, red, black ;256
+ indicator = { cel_status_maf }, "MAF fault", "MAF fault", white, black, red, black ; 512
+ indicator = { cel_status_knock }, "Knock fault", "Knock fault", white, black, red, black ; 1024
+ indicator = { cel_status_cam }, "Cam fault", "Cam fault", white, black, red, black ; 2048
+ indicator = { cel_status_oil}, "Oil fault", "Oil fault", white, black, red, black ; 4096
+ indicator = { cel_status_fp}, "Fuel press.", "Fuel press.", white, black, red, black ; 4096
+ indicator = { cel_status_egtshut}, "CEL EGT shutdown", "CEL EGT shutdown", white, black, red, black ; 16384
+ indicator = { cel_status_afrshut}, "CEL AFR shutdown", "CEL AFR shutdown", white, black, red, black ; 32768
+
+ indicator = { cel_status2_winj}, "CEL W.Inj low", "CEL W.Inj low", white, black, red, black ; 1
+ indicator = { cel_status2_shutd}, "Safety shutdown", "Safety shutdown", white, black, red, black ; 2
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+ coolantBar = {cltlowlim}, {clthighlim}
+ matBar = -40, {mathigh}
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, {rpmhigh}
+ throttleBar = 0, 100
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoV1Gauge, egoV1Gauge, egoV1Gauge, egoV1Gauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge1, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = egoCorrGauge2, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+ ochBlockSize = 509 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+ ochGetCommand = "r\$tsCanId\x07%2o%2c" ; leave this alone
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ scatteredOffsetArray = qfrtfielddata
+ scatteredOchGetCommand = "g"
+ scatteredGetEnabled = { scatterRuntimeEnabled && (tsLocalCanId == tsCanId) }
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+#if PW_4X
+ pulseWidth1 = scalar, U16, 2, "ms", 0.004, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.004, 0.0
+#else
+ pulseWidth1 = scalar, U16, 2, "ms", 0.001, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.001, 0.0
+#endif
+ pulseWidth = { pulseWidth1 }, "ms" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+#if NARROW_BAND_EGO
+ afrtgt1 = scalar, U08, 12, "Volts", 0.00489, 0.0
+ afrtgt2 = scalar, U08, 13, "Volts", 0.00489, 0.0
+#elif LAMBDA
+ afrtgt1raw = scalar, U08, 12, "Lambda", 0.1, 0.0
+ afrtgt2raw = scalar, U08, 13, "Lambda", 0.1, 0.0
+#else
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+#endif
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1_old = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2_old = scalar, S16, 30, "AFR", 0.100, 0.0
+ knock = scalar, S16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.1000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.1000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "%", 0.392, 0.0
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.1000, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.1000, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Correcton based on percent alcohol in fuel.
+ sd_status = scalar, U08, 70, "", 1.0, 0.0
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ status6 = scalar, U08, 82, "", 1.0, 0.0
+ status7 = scalar, U08, 83, "", 1.0, 0.0
+ status5 = scalar, U16, 84, "", 1, 0 ; istatus5
+ status5s = scalar, S16, 84, "", 1, 0 ; istatus5
+ cel_status = scalar, U16, 86, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status_map = bits, U08, 87, [0:0] ; low byte
+ cel_status_mat = bits, U08, 87, [1:1]
+ cel_status_clt = bits, U08, 87, [2:2]
+ cel_status_tps = bits, U08, 87, [3:3]
+ cel_status_batt = bits, U08, 87, [4:4]
+ cel_status_afr0 = bits, U08, 87, [5:5]
+ cel_status_sync = bits, U08, 87, [6:6]
+ cel_status_egt = bits, U08, 87, [7:7]
+ cel_status_flex = bits, U08, 86, [0:0] ; high byte
+ cel_status_maf = bits, U08, 86, [1:1] ; high byte
+ cel_status_knock = bits, U08, 86, [2:2] ; high byte
+ cel_status_cam = bits, U08, 86, [3:3] ; high byte
+ cel_status_oil = bits, U08, 86, [4:4] ; high byte
+ cel_status_fp = bits, U08, 86, [5:5] ; high byte
+ cel_status_egtshut= bits, U08, 86, [6:6] ; high byte
+ cel_status_afrshut= bits, U08, 86, [7:7] ; high byte
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, "%", 0.100, 0.0
+ ignload2 = scalar, S16, 92, "%", 0.100, 0.0
+ synccnt = scalar, U08, 94, "", 1, 0
+ syncreason = scalar, U08, 95, "", 1.0, 0.0
+ wallfuel1 = scalar, U32, 96, "uS", 0.010, 0.0
+ wallfuel2 = scalar, U32, 100, "uS", 1.000, 0.0
+ sensor01 = scalar, S16, 104, "", 0.1000, 0.0
+ sensor02 = scalar, S16, 106, "", 0.1000, 0.0
+ sensor03 = scalar, S16, 108, "", 0.1000, 0.0
+ sensor04 = scalar, S16, 110, "", 0.1000, 0.0
+ sensor05 = scalar, S16, 112, "", 0.1000, 0.0
+ sensor06 = scalar, S16, 114, "", 0.1000, 0.0
+ sensor07 = scalar, S16, 116, "", 0.1000, 0.0
+ sensor08 = scalar, S16, 118, "", 0.1000, 0.0
+ sensor09 = scalar, S16, 120, "", 0.1000, 0.0
+ sensor10 = scalar, S16, 122, "", 0.1000, 0.0
+ sensor11 = scalar, S16, 124, "", 0.1000, 0.0
+ sensor12 = scalar, S16, 126, "", 0.1000, 0.0
+ sensor13 = scalar, S16, 128, "", 0.1000, 0.0
+ sensor14 = scalar, S16, 130, "", 0.1000, 0.0
+ sensor15 = scalar, S16, 132, "", 0.1000, 0.0
+ sensor16 = scalar, S16, 134, "", 0.1000, 0.0
+ canin1_8 = scalar, U08, 136, "", 1.000, 0.0
+ canout1_8 = scalar, U08, 137, "", 1.000, 0.0
+ canout9_16 = scalar, U08, 138, "", 1.000, 0.0
+ boostduty = scalar, U08, 139 , "%", 1.0, 0.0
+#if PW_4X
+ n2o_addfuel = scalar, S16, 140, "ms", 0.004, 0
+#else
+ n2o_addfuel = scalar, S16, 140, "ms", 0.001, 0
+#endif
+ n2o_retard = scalar, S16, 142, "deg", 0.1, 0
+#if PW_4X
+ pwseq1 = scalar, U16, 144, "ms", 0.004, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.004, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.004, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.004, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.004, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.004, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.004, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.004, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.004, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.004, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.004, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.004, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.004, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.004, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.004, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.004, 0.0
+#else
+ pwseq1 = scalar, U16, 144, "ms", 0.001, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.001, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.001, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.001, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.001, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.001, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.001, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.001, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.001, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.001, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.001, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.001, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.001, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.001, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.001, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.001, 0.0
+#endif
+ nitrous1_duty = scalar, U08, 176, "%", 1, 0
+ nitrous2_duty = scalar, U08, 177, "%", 1, 0
+#if CELSIUS
+ egt1 = scalar, S16, 178, "°C", 0.05555, -320
+ egt2 = scalar, S16, 180, "°C", 0.05555, -320
+ egt3 = scalar, S16, 182, "°C", 0.05555, -320
+ egt4 = scalar, S16, 184, "°C", 0.05555, -320
+ egt5 = scalar, S16, 186, "°C", 0.05555, -320
+ egt6 = scalar, S16, 188, "°C", 0.05555, -320
+ egt7 = scalar, S16, 190, "°C", 0.05555, -320
+ egt8 = scalar, S16, 192, "°C", 0.05555, -320
+ egt9 = scalar, S16, 194, "°C", 0.05555, -320
+ egt10 = scalar, S16, 196, "°C", 0.05555, -320
+ egt11 = scalar, S16, 198, "°C", 0.05555, -320
+ egt12 = scalar, S16, 200, "°C", 0.05555, -320
+ egt13 = scalar, S16, 202, "°C", 0.05555, -320
+ egt14 = scalar, S16, 204, "°C", 0.05555, -320
+ egt15 = scalar, S16, 206, "°C", 0.05555, -320
+ egt16 = scalar, S16, 208, "°C", 0.05555, -320
+#else
+ egt1 = scalar, S16, 178, "°F", 0.1, 0
+ egt2 = scalar, S16, 180, "°F", 0.1, 0
+ egt3 = scalar, S16, 182, "°F", 0.1, 0
+ egt4 = scalar, S16, 184, "°F", 0.1, 0
+ egt5 = scalar, S16, 186, "°F", 0.1, 0
+ egt6 = scalar, S16, 188, "°F", 0.1, 0
+ egt7 = scalar, S16, 190, "°F", 0.1, 0
+ egt8 = scalar, S16, 192, "°F", 0.1, 0
+ egt9 = scalar, S16, 194, "°F", 0.1, 0
+ egt10 = scalar, S16, 196, "°F", 0.1, 0
+ egt11 = scalar, S16, 198, "°F", 0.1, 0
+ egt12 = scalar, S16, 200, "°F", 0.1, 0
+ egt13 = scalar, S16, 202, "°F", 0.1, 0
+ egt14 = scalar, S16, 204, "°F", 0.1, 0
+ egt15 = scalar, S16, 206, "°F", 0.1, 0
+ egt16 = scalar, S16, 208, "°F", 0.1, 0
+#endif
+ maf = scalar, U16, 210, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ canpwmin0 = scalar, U16, 212, "", 1.000, 0.0
+ canpwmin1 = scalar, U16, 214, "", 1.000, 0.0
+ canpwmin2 = scalar, U16, 216, "", 1.000, 0.0
+ canpwmin3 = scalar, U16, 218, "", 1.000, 0.0
+ fuelflow = scalar, U16, 220, "cc/min", 1, 0.0
+ fuelcons = scalar, U16, 222, "l/km", 1, 0.0
+ EAEFuelCorr2 = scalar, U16, 224 , "%", 1.0, 0.0
+ tpsADC = scalar, U16, 226, "ADC", 1, 0 ; REAL for calibrator
+ eaeload1 = scalar, S16, 228, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.0
+ afrload1 = scalar, S16, 230, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1000, 0.0
+ gear = scalar, U08, 232, "", 1, 0
+ timing_err = scalar, S08, 233, "%", 1, 0 ; accuracy of timing prediction
+ RPMdot = scalar, S16, 234, "rpm/sec", 10, 0
+ vss1dot = scalar, S16, 236, "ms-2", 0.1, 0
+ vss2dot = scalar, S16, 238, "ms-2", 0.1, 0
+ accelx = scalar, S16, 240, "ms-2", 0.001, 0
+ accely = scalar, S16, 242, "ms-2", 0.001, 0
+ accelz = scalar, S16, 244, "ms-2", 0.001, 0
+ duty_pwm_a = scalar, U08, 246, "%", 1, 0
+ duty_pwm_b = scalar, U08, 247, "%", 1, 0
+ duty_pwm_c = scalar, U08, 248, "%", 1, 0
+ duty_pwm_d = scalar, U08, 249, "%", 1, 0
+ duty_pwm_e = scalar, U08, 250, "%", 1, 0
+ duty_pwm_f = scalar, U08, 251, "%", 1, 0
+ afr1 = scalar, U08, 252, "AFR", 0.1, 0.0
+ afr2 = scalar, U08, 253, "AFR", 0.1, 0.0
+ afr3 = scalar, U08, 254, "AFR", 0.1, 0.0
+ afr4 = scalar, U08, 255, "AFR", 0.1, 0.0
+ afr5 = scalar, U08, 256, "AFR", 0.1, 0.0
+ afr6 = scalar, U08, 257, "AFR", 0.1, 0.0
+ afr7 = scalar, U08, 258, "AFR", 0.1, 0.0
+ afr8 = scalar, U08, 259, "AFR", 0.1, 0.0
+ afr9 = scalar, U08, 260, "AFR", 0.1, 0.0
+ afr10 = scalar, U08, 261, "AFR", 0.1, 0.0
+ afr11 = scalar, U08, 262, "AFR", 0.1, 0.0
+ afr12 = scalar, U08, 263, "AFR", 0.1, 0.0
+ afr13 = scalar, U08, 264, "AFR", 0.1, 0.0
+ afr14 = scalar, U08, 265, "AFR", 0.1, 0.0
+ afr15 = scalar, U08, 266, "AFR", 0.1, 0.0
+ afr16 = scalar, U08, 267, "AFR", 0.1, 0.0
+ egov1 = scalar, U16, 268, "V", 0.00489, 0.0
+ egov2 = scalar, U16, 270, "V", 0.00489, 0.0
+ egov3 = scalar, U16, 272, "V", 0.00489, 0.0
+ egov4 = scalar, U16, 274, "V", 0.00489, 0.0
+ egov5 = scalar, U16, 276, "V", 0.00489, 0.0
+ egov6 = scalar, U16, 278, "V", 0.00489, 0.0
+ egov7 = scalar, U16, 280, "V", 0.00489, 0.0
+ egov8 = scalar, U16, 282, "V", 0.00489, 0.0
+ egov9 = scalar, U16, 284, "V", 0.00489, 0.0
+ egov10 = scalar, U16, 286, "V", 0.00489, 0.0
+ egov11 = scalar, U16, 288, "V", 0.00489, 0.0
+ egov12 = scalar, U16, 290, "V", 0.00489, 0.0
+ egov13 = scalar, U16, 292, "V", 0.00489, 0.0
+ egov14 = scalar, U16, 294, "V", 0.00489, 0.0
+ egov15 = scalar, U16, 296, "V", 0.00489, 0.0
+ egov16 = scalar, U16, 298, "V", 0.00489, 0.0
+ egocor1 = scalar, S16, 300, "%", 0.1000, 0.0
+ egocor2 = scalar, S16, 302, "%", 0.1000, 0.0
+ egocor3 = scalar, S16, 304, "%", 0.1000, 0.0
+ egocor4 = scalar, S16, 306, "%", 0.1000, 0.0
+ egocor5 = scalar, S16, 308, "%", 0.1000, 0.0
+ egocor6 = scalar, S16, 310, "%", 0.1000, 0.0
+ egocor7 = scalar, S16, 312, "%", 0.1000, 0.0
+ egocor8 = scalar, S16, 314, "%", 0.1000, 0.0
+ egocor9 = scalar, S16, 316, "%", 0.1000, 0.0
+ egocor10 = scalar, S16, 318, "%", 0.1000, 0.0
+ egocor11 = scalar, S16, 320, "%", 0.1000, 0.0
+ egocor12 = scalar, S16, 322, "%", 0.1000, 0.0
+ egocor13 = scalar, S16, 324, "%", 0.1000, 0.0
+ egocor14 = scalar, S16, 326, "%", 0.1000, 0.0
+ egocor15 = scalar, S16, 328, "%", 0.1000, 0.0
+ egocor16 = scalar, S16, 330, "%", 0.1000, 0.0
+ stream_level = scalar, U08, 332, "", 1,0
+ water_duty = scalar, U08, 333, "%", 1, 0
+ dwell_trl = scalar, U16, 334, "ms", 0.1000, 0.0
+ vss1 = scalar, U16, 336, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss2 = scalar, U16, 338, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss1_ms_1 = scalar, U16, 336, "ms-1", 0.1, 0.0 ; see calcs converting this raw number into kph or mph
+ vss2_ms_1 = scalar, U16, 338, "ms-1", 0.1, 0.0
+ ss1 = scalar, U16, 340, "RPM", 10.000, 0.0 ; now in steps of 10 rpm
+ ss2 = scalar, U16, 342, "RPM", 10.000, 0.0
+ nitrous_timer = scalar, U16, 344, "s", 0.001, 0
+ sd_filenum = scalar, U16, 346, "", 1, 0
+ sd_error = scalar, U08, 348, "", 1, 0
+ sd_phase = scalar, U08, 349, "", 1, 0
+ boostduty2 = scalar, U08, 350 , "%", 1.0, 0.0
+ status8 = scalar, U08, 351, "", 1.0, 0.0
+ vvt_ang1 = scalar, S16, 352, "deg", 0.100, 0.0
+ vvt_ang2 = scalar, S16, 354, "deg", 0.100, 0.0
+ vvt_ang3 = scalar, S16, 356, "deg", 0.100, 0.0
+ vvt_ang4 = scalar, S16, 358, "deg", 0.100, 0.0
+ inj_timing_pri = scalar, S16, 360, "deg", 0.100, 0.0
+ inj_timing_sec = scalar, S16, 362, "deg", 0.100, 0.0
+ vvt_target1 = scalar, S16, 364, "deg", 0.100, 0.0
+ vvt_target2 = scalar, S16, 366, "deg", 0.100, 0.0
+ vvt_target3 = scalar, S16, 368, "deg", 0.100, 0.0
+ vvt_target4 = scalar, S16, 370, "deg", 0.100, 0.0
+ vvt_duty1 = scalar, U08, 372 , "%", 0.392, 0.0
+ vvt_duty2 = scalar, U08, 373 , "%", 0.392, 0.0
+ vvt_duty3 = scalar, U08, 374 , "%", 0.392, 0.0
+ vvt_duty4 = scalar, U08, 375 , "%", 0.392, 0.0
+ fuel_pct = scalar, U16, 376, "%", 0.1000, 0.0
+#if CELSIUS
+ fuel_temp1 = scalar, S16, 378, "°C", 0.05555, -320.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#else
+ fuel_temp1 = scalar, S16, 378, "°F", 0.100, 0.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#endif
+ tps_accel = scalar, S16, 382, "%", 0.1000, 0.0
+ map_accel = scalar, S16, 384, "%", 0.1000, 0.0
+ total_accel = scalar, S16, 386, "%", 0.1000, 0.0
+ knock_cyl01 = scalar, U08, 388, "%", 0.4, 0
+ knock_cyl02 = scalar, U08, 389, "%", 0.4, 0
+ knock_cyl03 = scalar, U08, 390, "%", 0.4, 0
+ knock_cyl04 = scalar, U08, 391, "%", 0.4, 0
+ knock_cyl05 = scalar, U08, 392, "%", 0.4, 0
+ knock_cyl06 = scalar, U08, 393, "%", 0.4, 0
+ knock_cyl07 = scalar, U08, 394, "%", 0.4, 0
+ knock_cyl08 = scalar, U08, 395, "%", 0.4, 0
+ knock_cyl09 = scalar, U08, 396, "%", 0.4, 0
+ knock_cyl10 = scalar, U08, 397, "%", 0.4, 0
+ knock_cyl11 = scalar, U08, 398, "%", 0.4, 0
+ knock_cyl12 = scalar, U08, 399, "%", 0.4, 0
+ knock_cyl13 = scalar, U08, 400, "%", 0.4, 0
+ knock_cyl14 = scalar, U08, 401, "%", 0.4, 0
+ knock_cyl15 = scalar, U08, 402, "%", 0.4, 0
+ knock_cyl16 = scalar, U08, 403, "%", 0.4, 0
+ launch_timer = scalar, U16, 404, "s", 0.001, 0
+ launch_retard = scalar, S16, 406, "deg", 0.1, 0
+ maf_volts = scalar, U16, 408, "V", 0.001, 0.0
+ porta = scalar, U08, 410, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porta0 = bits, U08, 410, [0:0]
+ porta1 = bits, U08, 410, [1:1]
+ porta2 = bits, U08, 410, [2:2]
+ porta3 = bits, U08, 410, [3:3]
+ porta4 = bits, U08, 410, [4:4]
+ porta5 = bits, U08, 410, [5:5]
+ porta6 = bits, U08, 410, [6:6]
+ porta7 = bits, U08, 410, [7:7]
+
+ portb = scalar, U08, 411, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portb0 = bits, U08, 411, [0:0]
+ portb1 = bits, U08, 411, [1:1]
+ portb2 = bits, U08, 411, [2:2]
+ portb3 = bits, U08, 411, [3:3]
+ portb4 = bits, U08, 411, [4:4]
+ portb5 = bits, U08, 411, [5:5]
+ portb6 = bits, U08, 411, [6:6]
+ portb7 = bits, U08, 411, [7:7]
+
+ porteh = scalar, U08, 412, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porte0 = bits, U08, 412, [0:0]
+ porte1 = bits, U08, 412, [1:1]
+ porte2 = bits, U08, 412, [2:2]
+ porte4 = bits, U08, 412, [4:4]
+ porth6 = bits, U08, 412, [6:6]
+ porth7 = bits, U08, 412, [7:7]
+
+ portk = scalar, U08, 413, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portk0 = bits, U08, 413, [0:0]
+ portk1 = bits, U08, 413, [1:1]
+ portk2 = bits, U08, 413, [2:2]
+ portk3 = bits, U08, 413, [3:3]
+ portk7 = bits, U08, 413, [7:7]
+
+ portmj = scalar, U08, 414, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portj0 = bits, U08, 414, [0:0]
+ portj1 = bits, U08, 414, [1:1]
+ portm2 = bits, U08, 414, [2:2]
+ portm3 = bits, U08, 414, [3:3]
+ portm4 = bits, U08, 414, [4:4]
+ portm5 = bits, U08, 414, [5:5]
+ portj7 = bits, U08, 414, [7:7]
+
+ portp = scalar, U08, 415, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portp2 = bits, U08, 415, [2:2]
+ portp3 = bits, U08, 415, [3:3]
+ portp4 = bits, U08, 415, [4:4]
+ portp5 = bits, U08, 415, [5:5]
+ portp6 = bits, U08, 415, [6:6]
+ portp7 = bits, U08, 415, [7:7]
+
+ portt = scalar, U08, 416, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portt0 = bits, U08, 416, [0:0]
+ portt1 = bits, U08, 416, [1:1]
+ portt2 = bits, U08, 416, [2:2]
+ portt3 = bits, U08, 416, [3:3]
+ portt4 = bits, U08, 416, [4:4]
+ portt5 = bits, U08, 416, [5:5]
+ portt6 = bits, U08, 416, [6:6]
+ cel_errorcode = scalar, U08, 417, "bit", 1, 0.0
+ boost_targ_1 = scalar, S16, 418, "%", 0.1, 0
+ boost_targ_2 = scalar, S16, 420, "%", 0.1, 0
+#if CELSIUS
+ airtemp = scalar, S16, 422, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 422, "°F", 0.100, 0.0
+#endif
+ looptime = scalar, U16, 424, "us", 1.0, 0.0
+ vss3 = scalar, U16, 426, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss4 = scalar, U16, 428, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss3_ms_1 = scalar, U16, 426, "ms-1", 0.1, 0.0
+ vss4_ms_1 = scalar, U16, 428, "ms-1", 0.1, 0.0
+ fuel_press1 = scalar, S16, 430, "kPa", 0.100, 0.0
+ fuel_press2 = scalar, S16, 432, "kPa", 0.100, 0.0
+ cl_idle_targ_rpm = scalar, U16, 434, "rpm", 1, 0
+ fp_duty = scalar, U08, 436, "%", 0.392, 0.0
+ alt_duty = scalar, U08, 437, "%", 1, 0.0
+ alt_freq = scalar, U08, 437, "Hz", 1, 0.0
+ load_duty = scalar, U08, 438, "%", 1, 0.0
+ alt_targv = scalar, U08, 439, "V", 0.100, 0.0
+ batt_curr = scalar, S16, 440, "A", 0.1, 0.0
+ fueltemp_cor = scalar, S16, 442, "%", 0.100, 0.0
+ fuelpress_cor = scalar, S16, 444, "%", 0.100, 0.0
+ ltt_cor = scalar, S08, 446, "%", 0.100, 0.0
+; engine_state_
+ tc_retard = scalar, S16, 448, "deg", 0.100, 0.0
+ cel_retard = scalar, S16, 450, "deg", 0.100, 0.0
+ fc_retard = scalar, S16, 452, "deg", 0.100, 0.0
+ ext_advance = scalar, S16, 454, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 456, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 458, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 460, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 462, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 464, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 466, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 468, "deg", 0.100, 0.0
+ adv4 = scalar, S16, 470, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 472, "deg", 0.100, 0.0
+ als_timing = scalar, S16, 474, "deg", 0.100, 0.0
+#if PW_4X
+ als_addfuel = scalar, S16, 476, "ms", 0.004, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.004, 0.0
+#else
+ als_addfuel = scalar, S16, 476, "ms", 0.001, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.001, 0.0
+#endif
+ launch_timing = scalar, S16, 480, "deg", 0.100, 0.0
+ step3_timing = scalar, S16, 482, "deg", 0.100, 0.0
+ launchvss_retard = scalar, S16, 484, "deg", 0.100, 0.0
+; cel_status2_xx = bits, U08, 486, [0:0] ; high byte
+ cel_status2 = scalar, U16, 486, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status2_winj = bits, U08, 487, [0:0] ; low byte
+ cel_status2_shutd = bits, U08, 487, [1:1]
+ gps_latdeg = scalar, S08, 488, "", 1,0
+ gps_latmin = scalar, U08, 489, "", 1,0
+ gps_latmmin = scalar, U16, 490, "", 1,0
+ gps_londeg = scalar, U08, 492, "", 1,0
+ gps_lonmin = scalar, U08, 493, "", 1,0
+ gps_lonmmin = scalar, U16, 494, "", 1,0
+ gps_outstatus = scalar, U08, 496, "", 1,0
+ gps_altk = scalar, S08, 497, "", 1,0
+ gps_altm = scalar, S16, 498, "", 0.1,0
+ gps_speed = scalar, U16, 500, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ gps_speed_ms_1 = scalar, U16, 500, "ms-1", 0.1, 0.0
+ gps_course = scalar, U16, 502, "", 0.1,0
+ generic_pid_duty_a = scalar, U08, 504, "%", 0.392, 0.0
+ generic_pid_duty_b = scalar, U08, 505, "%", 0.392, 0.0
+ tc_slipxtime = scalar, U16, 506, "", 1,0
+ loop = scalar, U08, 508, "", 1, 0
+
+;very nearly out of space. 512+ requires firmware changes
+;---------------
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ cycleTime1 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts1 = { nCylinders/divider}
+ altDiv1 = { alternate ? 2 : 1 }
+ dcfactor1 = { (sequential == 0) ? nSquirts1/altDiv1 : ( (sequential == 1) ? 2 : 1) }
+ dutyCycle1 = { cycleTime1 ? (100.0*dcfactor1*pulseWidth1/cycleTime1) : 0}, "%"
+
+ cycleTime2 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ altDiv2 = { alternate ? 2 : 1 } ; ought to look at staging parameters too
+ dcfactor2a = { (sequential == 0) ? nSquirts2/altDiv2 : ( (sequential == 1) ? 2 : 1) } ; ought to look at staging parameters too
+ dcfactor2b = { (staged_first_param && staged_extended_opts_use_v3) ? 1 : dcfactor2a }
+ dutyCycle2 = { cycleTime2 ? (100.0*dcfactor2b*pulseWidth2/cycleTime2) : 0}, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+ afr1err = { egov1 - afrtgt1 }
+ afr2err = { egov2 - afrtgt2 }
+#elif LAMBDA
+ lambda1 = { afr1 / stoich }, "Lambda"
+ lambda2 = { afr2 / stoich }, "Lambda2"
+ lambda3 = { afr3 / stoich }, "Lambda3"
+ lambda4 = { afr4 / stoich }, "Lambda4"
+ lambda5 = { afr5 / stoich }, "Lambda5"
+ lambda6 = { afr6 / stoich }, "Lambda6"
+ lambda7 = { afr7 / stoich }, "Lambda7"
+ lambda8 = { afr8 / stoich }, "Lambda8"
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+ afrtgt1 = { afrtgt1raw / stoich * (egoType == 2) } ; return zero if NB because of mixed units with target in volts
+ afrtgt2 = { afrtgt2raw / stoich * (egoType == 2) }
+ afr1err = { (afr1 - afrtgt1raw) / stoich * (egoType == 2)}
+ afr2err = { (afr2 - afrtgt2raw) / stoich * (egoType == 2)}
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+ afr1err = { afr1 - afrtgt1 }
+ afr2err = { afr2 - afrtgt2 }
+#endif
+
+ pwma_load = { getChannelValueByOffset( pwm_opt_load_a_offset ) }
+ pwmb_load = { getChannelValueByOffset( pwm_opt_load_b_offset ) }
+ pwmc_load = { getChannelValueByOffset( pwm_opt_load_c_offset ) }
+ pwmd_load = { getChannelValueByOffset( pwm_opt_load_d_offset ) }
+ pwme_load = { getChannelValueByOffset( pwm_opt_load_e_offset ) }
+ pwmf_load = { getChannelValueByOffset( pwm_opt_load_f_offset ) }
+ maxafrload = { (maxafr_opt1_load & 1) ? tps : map }
+
+ vvt_load = { (vvt_opt7_yaxis == 0) ? fuelload : ((vvt_opt7_yaxis == 1) ? map : ( (vvt_opt7_yaxis == 2) ? (map*100/barometer) : ((vvt_opt7_yaxis == 3) ? tps : ((vvt_opt7_yaxis == 4) ? mafload : fuelload ) ) ) ) }
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+; calculate instantaneous economy from fuel flow (not calculated in firmware at this time)
+ economy_l_km = { vss1_ms_1 ? (fuelflow / (vss1_ms_1 * 60)) : 0 }
+; economy_mpg_us = { (1 / economy_l_km) * 3.800 / 1.609344 }
+ economy_mpg_us = { vss1_ms_1 ? (2.361 / economy_l_km) : 0 }
+ economy_mpg_uk = { vss1_ms_1 ? (2.825 / economy_l_km) : 0 }
+ economy_l_100km = { economy_l_km * 100 }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+ maf_freq = { MAFOption_t ? (maf_freq0 + ((maf_freq1 - maf_freq0) * maf_volts / 5)) : 0 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;fuel pressures
+ fuel_press1_psi = {fuel_press1 * 0.147 }, "psi"
+ fuel_press2_psi = {fuel_press2 * 0.147 }, "psi"
+ fuel_press1_bar = {fuel_press1 / 101.35 }, "bar"
+ fuel_press2_bar = {fuel_press2 / 101.35 }, "bar"
+
+ msToPrefUnitsScale = { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, ""
+
+ gps_latsec = { 60 * gps_latmmin / 10000 }
+ gps_lonsec = { 60 * gps_lonmmin / 10000 }
+ gps_alt = { gps_altk * 1000 + gps_altm }
+ gps_latitude = { gps_latdeg + (gps_latmin / 60) + (gps_latsec / 3600) }
+ gps_long = { gps_londeg + (gps_lonmin / 60) + (gps_lonsec / 3600) }
+ gps_lonEW = { (gps_outstatus & 1) ? 1 : 0 }
+ gps_longitude = { gps_lonEW ? 0-gps_long : gps_long } ; the 0 is redundant, but causes a TS error otherwise
+
+ generic_pid_load_a = { getChannelValueByOffset( generic_pid_load_offset_a ) }
+ generic_pid_load_b = { getChannelValueByOffset( generic_pid_load_offset_b ) }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = tpsADC, "TPSADC", int, "%d" ; for debug
+ entry = maf, "MAF", float, "%.2f", { MAFOption || MAFOption_t }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption || MAFOption_t }
+ entry = maf_volts, "MAF volts", float, "%.3f", { MAFOption }
+ entry = maf_freq, "MAF Freq", int, "%d", { MAFOption_t }
+#if NARROW_BAND_EGO
+ entry = egov1 , "O2", float, "%.3f", {egonum > 0}
+ entry = egov2 , "O2 #2", float, "%.3f", {egonum > 1}
+ entry = egov3 , "O2 #3", float, "%.3f", {egonum > 2}
+ entry = egov4 , "O2 #4", float, "%.3f", {egonum > 3}
+ entry = egov5 , "O2 #5", float, "%.3f", {egonum > 4}
+ entry = egov6 , "O2 #6", float, "%.3f", {egonum > 5}
+ entry = egov7 , "O2 #7", float, "%.3f", {egonum > 6}
+ entry = egov8 , "O2 #8", float, "%.3f", {egonum > 7}
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f", {egonum > 0}
+ entry = lambda2, "Lambda2", float, "%.3f", {egonum > 1}
+ entry = lambda3, "Lambda3", float, "%.3f", {egonum > 2}
+ entry = lambda4, "Lambda4", float, "%.3f", {egonum > 3}
+ entry = lambda5, "Lambda5", float, "%.3f", {egonum > 4}
+ entry = lambda6, "Lambda6", float, "%.3f", {egonum > 5}
+ entry = lambda7, "Lambda7", float, "%.3f", {egonum > 6}
+ entry = lambda8, "Lambda8", float, "%.3f", {egonum > 7}
+#else
+ entry = afr1, "AFR", float, "%.2f", {egonum > 0}
+ entry = afr2, "AFR2", float, "%.2f", {egonum > 1}
+ entry = afr3, "AFR3", float, "%.2f", {egonum > 2}
+ entry = afr4, "AFR4", float, "%.2f", {egonum > 3}
+ entry = afr5, "AFR5", float, "%.2f", {egonum > 4}
+ entry = afr6, "AFR6", float, "%.2f", {egonum > 5}
+ entry = afr7, "AFR7", float, "%.2f", {egonum > 6}
+ entry = afr8, "AFR8", float, "%.2f", {egonum > 7}
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egocor1, "EGO cor1", int, "%.1f"
+ entry = egocor2, "EGO cor2", int, "%.1f", {egonum > 1}
+ entry = egocor3, "EGO cor3", int, "%.1f", {egonum > 2}
+ entry = egocor4, "EGO cor4", int, "%.1f", {egonum > 3}
+ entry = egocor5, "EGO cor5", int, "%.1f", {egonum > 4}
+ entry = egocor6, "EGO cor6", int, "%.1f", {egonum > 5}
+ entry = egocor7, "EGO cor7", int, "%.1f", {egonum > 6}
+ entry = egocor8, "EGO cor8", int, "%.1f", {egonum > 7}
+
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+ entry = accEnrichMS, "Fuel: Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%.1f"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "Duty Cycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%.1f"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "Duty Cycle2", float, "%.1f"
+
+ entry = pwseq1, "Seq PW1", float, "%.3f", { sequential }
+ entry = pwseq2, "Seq PW2", float, "%.3f", { sequential }
+ entry = pwseq3, "Seq PW3", float, "%.3f", { sequential }
+ entry = pwseq4, "Seq PW4", float, "%.3f", { sequential }
+ entry = pwseq5, "Seq PW5", float, "%.3f", { sequential }
+ entry = pwseq6, "Seq PW6", float, "%.3f", { sequential }
+ entry = pwseq7, "Seq PW7", float, "%.3f", { sequential }
+ entry = pwseq8, "Seq PW8", float, "%.3f", { sequential }
+ entry = pwseq9, "Seq PW9", float, "%.3f", { sequential }
+ entry = pwseq10, "Seq PW10", float, "%.3f", { sequential }
+ entry = pwseq11, "Seq PW11", float, "%.3f", { sequential }
+ entry = pwseq12, "Seq PW12", float, "%.3f", { sequential }
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = knock, "Knock in", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = tc_retard, "SPK: Traction retard", float, "%.1f"
+ entry = cel_retard, "SPK: CEL retard", float, "%.1f"
+ entry = fc_retard, "SPK: Fuel cut retard", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance,"SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = adv4, "SPK: Spark Table 4", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = als_timing, "SPK: ALS Timing", float, "%.1f"
+ entry = launch_timing, "SPK: Launch Timing", float, "%.1f"
+ entry = step3_timing, "SPK: 3-step Timing", float, "%.1f"
+ entry = launchvss_retard,"SPK: Launch VSS Retard",float, "%.1f"
+ entry = n2o_retard, "SPK: Nitrous Retard", float, "%.1f", { N2Oopt_2 }
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = iacstep, "Stepper Idle position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle duty", float, "%.1f", {IdleCtl == 2}
+ entry = cl_idle_targ_rpm, "Closed-loop idle target RPM", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = rpm_target_error_follower, "Closed-loop idle RPM error", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = boostduty, "Boost duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ_1, "Boost target 1", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+ entry = boostduty2, "Boost duty 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_on2 }
+ entry = boost_targ_2, "Boost target 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_on2 }
+
+#if NARROW_BAND_EGO
+ entry = afrtgt1, "EgoV 1 Target", float, "%.1f"
+ entry = afrtgt2, "EgoV 2 Target", float, "%.1f"
+ entry = afr1err, "EgoV 1 Error", float, "%.1f"
+ entry = afr2err, "EgoV 2 Error", float, "%.1f"
+#elif LAMBDA
+ entry = afrtgt1, "Lambda 1 Target", float, "%.1f"
+ entry = afrtgt2, "Lambda 2 Target", float, "%.1f"
+ entry = afr1err, "Lambda 1 Error", float, "%.1f"
+ entry = afr2err, "Lambda 2 Error", float, "%.1f"
+#else
+ entry = afrtgt1, "AFR 1 Target", float, "%.1f"
+ entry = afrtgt2, "AFR 2 Target", float, "%.1f"
+ entry = afr1err, "AFR 1 Error", float, "%.1f"
+ entry = afr2err, "AFR 2 Error", float, "%.1f"
+#endif
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = wallfuel1, "Wall fuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "Wall fuel2", int, "%d", {EAEOption}
+
+ entry = EAEFuelCorr1, "EAE1", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary ign load", float, "%.1f"
+ entry = eaeload1, "EAE load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR load", float, "%.1f"
+
+ entry = inj_timing_pri, "Injector timing pri", float, "%.1f"
+ entry = inj_timing_sec, "Injector timing sec", float, "%.1f"
+
+ entry = egt1, "EGT1", int, "%d", {egt_num > 0}
+ entry = egt2, "EGT2", int, "%d", {egt_num > 1}
+ entry = egt3, "EGT3", int, "%d", {egt_num > 2}
+ entry = egt4, "EGT4", int, "%d", {egt_num > 3}
+ entry = egt5, "EGT5", int, "%d", {egt_num > 4}
+ entry = egt6, "EGT6", int, "%d", {egt_num > 5}
+ entry = egt7, "EGT7", int, "%d", {egt_num > 6}
+ entry = egt8, "EGT8", int, "%d", {egt_num > 7}
+ entry = egt9, "EGT9", int, "%d", {egt_num > 8}
+ entry = egt10, "EGT10", int, "%d", {egt_num > 9}
+ entry = egt11, "EGT11", int, "%d", {egt_num > 10}
+ entry = egt12, "EGT12", int, "%d", {egt_num > 11}
+ entry = egt13, "EGT13", int, "%d", {egt_num > 12}
+ entry = egt14, "EGT14", int, "%d", {egt_num > 13}
+ entry = egt15, "EGT15", int, "%d", {egt_num > 14}
+ entry = egt16, "EGT16", int, "%d", {egt_num > 15}
+
+; for debug, enable these always
+ entry = sensor01, { stringValue(sensor01Alias) }, float, "%.1f";, { sensor01_source }
+ entry = sensor02, { stringValue(sensor02Alias) }, float, "%.1f";, { sensor02_source }
+ entry = sensor03, { stringValue(sensor03Alias) }, float, "%.1f";, { sensor03_source }
+ entry = sensor04, { stringValue(sensor04Alias) }, float, "%.1f";, { sensor04_source }
+ entry = sensor05, { stringValue(sensor05Alias) }, float, "%.1f";, { sensor05_source }
+ entry = sensor06, { stringValue(sensor06Alias) }, float, "%.1f";, { sensor06_source }
+ entry = sensor07, { stringValue(sensor07Alias) }, float, "%.1f";, { sensor07_source }
+ entry = sensor08, { stringValue(sensor08Alias) }, float, "%.1f";, { sensor08_source }
+ entry = sensor09, { stringValue(sensor09Alias) }, float, "%.1f";, { sensor09_source }
+ entry = sensor10, { stringValue(sensor10Alias) }, float, "%.1f";, { sensor10_source }
+ entry = sensor11, { stringValue(sensor11Alias) }, float, "%.1f";, { sensor11_source }
+ entry = sensor12, { stringValue(sensor12Alias) }, float, "%.1f";, { sensor12_source }
+ entry = sensor13, { stringValue(sensor13Alias) }, float, "%.1f";, { sensor13_source }
+ entry = sensor14, { stringValue(sensor14Alias) }, float, "%.1f";, { sensor14_source }
+ entry = sensor15, { stringValue(sensor15Alias) }, float, "%.1f";, { sensor15_source }
+ entry = sensor16, "ECU Temperature", float, "%.1f"
+
+ entry = canpwmin0, "CANpwmin0", int, "%d", { enable_pollPWM }
+ entry = canpwmin1, "CANpwmin1", int, "%d", { enable_pollPWM }
+ entry = canpwmin2, "CANpwmin2", int, "%d", { enable_pollPWM }
+ entry = canpwmin3, "CANpwmin3", int, "%d", { enable_pollPWM }
+ entry = canin1_8, "canin1_8", int, "%d"
+ entry = canout1_8, "canout1_8", int, "%d"
+ entry = canout9_16, "canout9_16", int, "%d"
+
+ entry = timing_err, "Timing err", float, "%.1f"
+ entry = synccnt, "Lost sync count", int, "%d"
+ entry = syncreason, "Lost sync reason", int, "%d"
+
+ entry = fuelflow, "Fuel flow cc/min", int, "%d"
+
+ entry = vss1, "VSS1", int, "%.1f", {vss_opt0_1}
+ entry = vss2, "VSS2", int, "%.1f", {vss_opt0_2}
+ entry = vss3, "VSS3", int, "%.1f", {vss_opt0_3}
+ entry = vss4, "VSS4", int, "%.1f", {vss_opt0_4}
+ entry = vss1_ms_1, "VSS1 ms-1", int, "%.1f", {vss_opt0_1}
+ entry = vss2_ms_1, "VSS2 ms-1", int, "%.1f", {vss_opt0_2}
+ entry = vss3_ms_1, "VSS3 ms-1", int, "%.1f", {vss_opt0_3}
+ entry = vss4_ms_1, "VSS4 ms-1", int, "%.1f", {vss_opt0_4}
+
+ entry = economy_mpg_us, "MPG(USA)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_mpg_uk, "MPG(UK)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_l_100km, "l/100km", int, "%d", {vss_opt0_1 && (prefSpeedUnits == 1)}
+
+ entry = ss1, "Shaft rpm 1", int, "%d", { ss_opt1 }
+ entry = ss2, "Shaft rpm 2", int, "%d", { ss_opt2 }
+ entry = n2o_addfuel, "Nitrous added fuel", float, "%.3f", { N2Oopt_2 }
+ entry = nitrous1_duty, "Nitrous 1 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous2_duty, "Nitrous 2 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous_timer, "Nitrous Timer", float, "%.3f", { N2Oopt_2 }
+ entry = water_duty, "Water inj duty", int, "%d", { water_freq_on }
+ entry = als_addfuel, "ALS added fuel", float, "%.3f", { als_in_pin }
+ entry = als_timing, "ALS timing", float, "%.1f", { als_in_pin }
+ entry = sd_filenum, "SDcard file number", int, "%d", { log_style_on2 }
+ entry = sd_status, "SDcard status", int, "%d", { log_style_on2 }
+ entry = sd_phase, "SDcard phase", int, "%d", { log_style_on2 }
+ entry = sd_error, "SDcard error", int, "%d", { log_style_on2 }
+ entry = gear, "Gear", int, "%d", { gear_method }
+ entry = vss1dot, "VSS1dot", float, "%.1f", {vss_opt0_1}
+ entry = vss2dot, "VSS2dot", float, "%.1f", {vss_opt0_2}
+ entry = accelx, "Accel X", float, "%.2f", { accXport }
+ entry = accely, "Accel Y", float, "%.2f", { accYport }
+ entry = accelz, "Accel Z", float, "%.2f", { accZport }
+ entry = duty_pwm_a, "PWM A duty", int, "%d", { pwm_opt_on_a }
+ entry = duty_pwm_b, "PWM B duty", int, "%d", { pwm_opt_on_b }
+ entry = duty_pwm_c, "PWM C duty", int, "%d", { pwm_opt_on_c }
+ entry = duty_pwm_d, "PWM D duty", int, "%d", { pwm_opt_on_d }
+ entry = duty_pwm_e, "PWM E duty", int, "%d", { pwm_opt_on_e }
+ entry = duty_pwm_f, "PWM F duty", int, "%d", { pwm_opt_on_f }
+ entry = generic_pid_duty_a, "Generic Closed-Loop A duty", float, "%.1f", { generic_pid_flags_a_on }
+ entry = generic_pid_duty_b, "Generic Closed-Loop B duty", float, "%.1f", { generic_pid_flags_b_on }
+ entry = status1, "Status1", int, "%d"
+ entry = status2, "Status2", int, "%d"
+ entry = status3, "Status3", int, "%d"
+ entry = status4, "Status4", int, "%d"
+ entry = status5, "Status5", int, "%d"
+ entry = status5s, "Status5s", int, "%d"
+ entry = status6, "Status6", int, "%d"
+ entry = status7, "Status7", int, "%d"
+ entry = status8, "Status8", int, "%d"
+ entry = vvt_ang1, "VVT angle 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_ang2, "VVT angle 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_ang3, "VVT angle 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_ang4, "VVT angle 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target1, "VVT target 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_target2, "VVT target 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_target3, "VVT target 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target4, "VVT target 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_duty1, "VVT duty 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_duty2, "VVT duty 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_duty3, "VVT duty 3", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = vvt_duty4, "VVT duty 4", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = tps_accel, "TPS accel", int, "%.1f", { AE_options & 0x1 }
+ entry = map_accel, "MAP accel", int, "%.1f", { AE_options & 0x1 }
+ entry = total_accel, "Total accel", int, "%.1f", { AE_options & 0x1 }
+ entry = launch_timer, "Launch retard timer", float, "%.3f", { launch_opt_on && launch_opt_retard }
+ entry = launch_retard, "Launch timed retard", float, "%.1f", { launch_opt_on && launch_opt_retard }
+
+ entry = knock_cyl01, "Knock cyl# 1", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 0)}
+ entry = knock_cyl02, "Knock cyl# 2", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 1)}
+ entry = knock_cyl03, "Knock cyl# 3", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 2)}
+ entry = knock_cyl04, "Knock cyl# 4", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 3)}
+ entry = knock_cyl05, "Knock cyl# 5", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 4)}
+ entry = knock_cyl06, "Knock cyl# 6", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 5)}
+ entry = knock_cyl07, "Knock cyl# 7", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 6)}
+ entry = knock_cyl08, "Knock cyl# 8", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 7)}
+ entry = knock_cyl09, "Knock cyl#09", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 8)}
+ entry = knock_cyl10, "Knock cyl#10", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 9)}
+ entry = knock_cyl11, "Knock cyl#11", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 10)}
+ entry = knock_cyl12, "Knock cyl#12", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 11)}
+
+ entry = porta, "porta", int, "%d"
+ entry = portb, "portb", int, "%d"
+ entry = porteh, "porteh", int, "%d"
+ entry = portk, "portk", int, "%d"
+ entry = portmj, "portmj", int, "%d"
+ entry = portp, "portp", int, "%d"
+ entry = portt, "portt", int, "%d"
+
+ entry = cel_status, "CEL status", int, "%d"
+ entry = cel_status2, "CEL status2", int, "%d"
+ entry = cel_errorcode, "CEL error code", int, "%d"
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+ entry = fuel_temp1, "Fuel Temp1", float, "%.1f", { (flexFuel && (fueltemp1 == 1)) || (fueltemp1 > 15)}
+ entry = fuel_temp2, "Fuel Temp2", float, "%.1f", { dualfuel_temp_sens }
+
+ entry = fuel_press1, "Fuel Pressure1_kPa", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_psi, "Fuel Pressure1_psi", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_bar, "Fuel Pressure1_bar", float, "%.1f", { fp_press_in }
+
+ entry = fuel_press2, "Fuel Pressure2_kPa", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_psi, "Fuel Pressure2_psi", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_bar, "Fuel Pressure2_bar", float, "%.1f", { dualfuel_press_sens }
+
+ entry = fp_duty, "Fuel pump control duty", int, "%d", { fp_opt_mode }
+
+ entry = alt_targv, "Alternator target voltage", float, "%.1f", {alternator_opt_mode > 1}
+ entry = alt_freq, "Alternator control frequency", int, "%d", {alternator_opt_mode == 2}
+ entry = alt_duty, "Alternator control duty", int, "%d", {alternator_opt_mode > 2}
+ entry = load_duty, "Alternator load", int, "%d", {alternator_opt_mode && alternator_freq_monin}
+ entry = batt_curr, "Battery current", float, "%.1f", {alternator_opt_mode && alternator_freq_currin}
+ entry = fueltemp_cor, "Fuel temperature cor", float, "%.1f"
+ entry = fuelpress_cor, "Fuel pressure cor", float, "%.1f"
+ entry = ltt_cor, "Long term fuel trim cor", float, "%.1f", {ltt_opt_on}
+ entry = gps_latdeg, "GPS Lat. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latmin, "GPS Lat. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latsec, "GPS Lat. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_londeg, "GPS Lon. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonmin, "GPS Lon. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonsec, "GPS Lon. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_lonEW, "GPS Lon. E/W", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_alt, "GPS Altitude", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed, "GPS Speed", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed_ms_1, "GPS Speed ms-1",float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_course, "GPS Course (deg)", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_latitude, "GPS Latitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = gps_longitude, "GPS Longitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = tc_slipxtime, "TC slip * time", int, "%d"
+ entry = loop, "Loop", int, "%d"
+
+#if INTERNAL_LOG_FIELDS
+ ;internalLogField = fieldName, class, type, offset, units, scale, translate, digits
+ internalLogField = "Tooth number", scalar, U08, 1024, "#", 1.0, 0.0, 0
+ internalLogField = "Synch", scalar, U08, 1025, "", 1, 0, 0
+ internalLogField = "Cumulative cycles", scalar, U16, 1026, "#", 1.0, 0.0, 0
+ internalLogField = "Cumulative teeth", scalar, U16, 1027, "#", 1.0, 0.0, 0
+ internalLogField = "coilsel", scalar, U16, 1028, "", 1, 0, 0
+ internalLogField = "dwellsel", scalar, U16, 1029, "", 1, 0, 0
+ internalLogField = "PTM", scalar, U08, 1030, "", 1, 0, 0
+ internalLogField = "PTJ", scalar, U08, 1031, "", 1, 0, 0
+ internalLogField = "PTT", scalar, U08, 1032, "", 1, 0, 0
+ internalLogField = "PORTA", scalar, U08, 1033, "", 1, 0, 0
+ internalLogField = "PORTB", scalar, U08, 1034, "", 1, 0, 0
+ internalLogField = "next_dwell.tooth", scalar, U08, 1035, "", 1, 0, 0
+ internalLogField = "next_spark.tooth", scalar, U08, 1036, "", 1, 0, 0
+ internalLogField = "next_inj0.tooth", scalar, U08, 1037, "", 1, 0, 0
+ internalLogField = "next_inj1.tooth", scalar, U08, 1038, "", 1, 0, 0
+ internalLogField = "next_inj2.tooth", scalar, U08, 1039, "", 1, 0, 0
+ internalLogField = "next_inj3.tooth", scalar, U08, 1040, "", 1, 0, 0
+ internalLogField = "next_inj4.tooth", scalar, U08, 1041, "", 1, 0, 0
+ internalLogField = "next_inj5.tooth", scalar, U08, 1042, "", 1, 0, 0
+ internalLogField = "next_inj6.tooth", scalar, U08, 1043, "", 1, 0, 0
+ internalLogField = "next_inj7.tooth", scalar, U08, 1044, "", 1, 0, 0
+; internalLogField = "fuel_ovflo", scalar, U08, 1046, "", 1, 0, 0
+ internalLogField = "wheeldec_ovflo", scalar, U08, 1047, "", 1, 0, 0
+ internalLogField = "next_dwell.time32", scalar, U32, 1048, "", 1, 0, 0
+ internalLogField = "next_spark.time32", scalar, U32, 1049, "", 1, 0, 0
+ internalLogField = "TIE", scalar, U08, 1050, "", 1, 0, 0
+ internalLogField = "TFLG1", scalar, U08, 1051, "", 1, 0, 0
+ internalLogField = "TIMTIE", scalar, U08, 1052, "", 1, 0, 0
+ internalLogField = "TIMTFLG1", scalar, U08, 1053, "", 1, 0, 0
+ internalLogField = "next_inj[0].time", scalar, U16, 1054, "", 1, 0, 0
+ internalLogField = "next_inj[1].time", scalar, U16, 1055, "", 1, 0, 0
+ internalLogField = "next_inj[2].time", scalar, U16, 1056, "", 1, 0, 0
+ internalLogField = "next_inj[3].time", scalar, U16, 1057, "", 1, 0, 0
+ internalLogField = "next_inj[4].time", scalar, U16, 1058, "", 1, 0, 0
+ internalLogField = "next_inj[5].time", scalar, U16, 1059, "", 1, 0, 0
+ internalLogField = "next_inj[6].time", scalar, U16, 1060, "", 1, 0, 0
+ internalLogField = "next_inj[7].time", scalar, U16, 1061, "", 1, 0, 0
+ internalLogField = "XGSEM", scalar, U08, 1062, "", 1, 0, 0
+ internalLogField = "pwcalc1", scalar, U16, 1063, "", 1, 0, 0
+ internalLogField = "pwcalc2", scalar, U16, 1064, "", 1, 0, 0
+ internalLogField = "next_map_start_event.tooth", scalar, U08, 1065, "", 1, 0, 0
+ internalLogField = "XGCHID", scalar, U08, 1066, "", 1, 0, 0
+ internalLogField = "XGSWT", scalar, U08, 1067, "", 1, 0, 0
+ internalLogField = "xgate_deadman", scalar, U08, 1068, "", 1, 0, 0
+ internalLogField = "XGMCTL", scalar, U08, 1069, "", 1, 0, 0
+ internalLogField = "xgpc", scalar, U16, 1070, "", 1, 0, 0
+ internalLogField = "xgswe_count", scalar, U08, 1071, "", 1, 0, 0
+ internalLogField = "next_fuel", scalar, U08, 1072, "", 1, 0, 0
+ internalLogField = "inj1_cnt", scalar, U16, 1073, "", 1, 0, 0
+ internalLogField = "inj2_cnt", scalar, U16, 1074, "", 1, 0, 0
+ internalLogField = "inj3_cnt", scalar, U16, 1075, "", 1, 0, 0
+ internalLogField = "inj4_cnt", scalar, U16, 1076, "", 1, 0, 0
+ internalLogField = "inj5_cnt", scalar, U16, 1077, "", 1, 0, 0
+ internalLogField = "inj6_cnt", scalar, U16, 1078, "", 1, 0, 0
+ internalLogField = "inj7_cnt", scalar, U16, 1079, "", 1, 0, 0
+ internalLogField = "inj8_cnt", scalar, U16, 1080, "", 1, 0, 0
+#endif
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms3/0524.05.ini b/src/ini/ms3/0524.05.ini
new file mode 100644
index 0000000..f9e3672
--- /dev/null
+++ b/src/ini/ms3/0524.05.ini
@@ -0,0 +1,14338 @@
+;-------------------------------------------------------------------------------
+; $Id: core.ini,v 1.365.4.55 2016/04/13 14:59:44 jsmcortina Exp $
+;
+; This ini file is Copyright 2007,2008,2009,2010,2011,2012,2013,2014,2015 James Murray and Kenneth Culver.
+; It is only to be used with a licensed MS3 product.
+;
+; Original author(s) uncertain. Contains work of Eric Fahlgren
+; Re-written to support MS3
+;
+;
+; configuration defines, either #set or #unset
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
+#set CAN_COMMANDS
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset INTERNAL_LOG_FIELDS
+#unset PW_4X
+#unset CYL_12_16_SUPPORT
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ signature = "MS3 Format 0524.05 " ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+#if INI_VERSION_2
+; ok
+#else
+ #error Megatune cannot be used with MS3 - please upgrade to TunerStudio
+#endif
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v"
+#if CAN_COMMANDS
+ tableBlockingFactor = 256 ; just in case MS2 is used
+#else
+ tableBlockingFactor = 2048
+#endif
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+; solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") } ; file is not valid, use new method instead
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor - Volts"
+ settingOption = LAMBDA, "Wideband - Lambda"
+ settingOption = DEFAULT, "WideBand - AFR" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ wue_lpg = bits, U08, [0:0], "No", "Yes"
+ vehigh = scalar, U16, "%", 1, 0, 100, 600, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ sensor01Alias = string, ASCII, 20
+ sensor02Alias = string, ASCII, 20
+ sensor03Alias = string, ASCII, 20
+ sensor04Alias = string, ASCII, 20
+ sensor05Alias = string, ASCII, 20
+ sensor06Alias = string, ASCII, 20
+ sensor07Alias = string, ASCII, 20
+ sensor08Alias = string, ASCII, 20
+ sensor09Alias = string, ASCII, 20
+ sensor10Alias = string, ASCII, 20
+ sensor11Alias = string, ASCII, 20
+ sensor12Alias = string, ASCII, 20
+ sensor13Alias = string, ASCII, 20
+ sensor14Alias = string, ASCII, 20
+ sensor15Alias = string, ASCII, 20
+ sensor16Alias = string, ASCII, 20
+
+ scatterRuntimeEnabled = bits, U08, [0:0], "Disabled", "Enabled"
+
+ portLabels = bits, U08, [0:8], "unused", "injection LED", "warmup LED", "squirt LED", "fuel pump", "PWM or on/off idle", "stepper idle", "primary injectors", "secondary injectors", "a programmable on/off output", "spark outputs", "HEI bypass", "knock", "MAF", "MAP", "baro", "EGO", "tacho out", "A/C idleup out", "A/C idleup in", "fan out", "boost out", "N2O stage 1 nitrous", "N2O stage 1 fuel", "N2O stage 2 nitrous", "N2O stage 2 fuel", "N2O in", "launch in", "variable launch in", "3 step in", "datalog button", "datalog LED", "bike shift in", "bike shift out", "generic PWM A", "generic PWM B", "generic PWM C", "generic PWM D", "generic PWM E", "generic PWM F", "datalog stream", "dual fuel in", "fuel tableswitch", "spark tableswitch", "boost tableswitch", "overboost tableswitch", "ReqFuel switch", "AFR tableswitch", "stoich switch", "max AFR safety switch", "accelerometer X", "accelerometer Y", "accelerometer Z", "vss out", "water inj pump", "water inj valve", "water inj in", "ignition trigger LED", "flex fuel in", "cam input", "vss1 in", "vss2 in", "speed sensor 1 in", "speed sensor 2 in", "gear position in", "anti-lag in", "anti-lag out", "anti-lag PWM out", "Boost 2 out", "EGT 1 in", "EGT 2 in", "EGT 3 in", "EGT 4 in", "EGT 5 in", "EGT 6 in", "EGT 7 in", "EGT 8 in", "EGT 9 in", "EGT 10 in", "EGT 11 in", "EGT 12 in", "EGT 13 in", "EGT 14 in", "EGT 15 in", "EGT 16 in", "Generic Sensor 1 in", "Generic Sensor 2 in", "Generic Sensor 3 in", "Generic Sensor 4 in", "Generic Sensor 5 in", "Generic Sensor 6 in", "Generic Sensor 7 in", "Generic Sensor 8 in", "Generic Sensor 9 in", "Generic Sensor 10 in", "Generic Sensor 11 in", "Generic Sensor 12 in", "Generic Sensor 13 in", "Generic Sensor 14 in", "Generic Sensor 15 in", "Generic Sensor 16 in", "VVT 1 output", "VVT 2 output", "VVT 3 output", "VVT 4 output", "VVT cam 2/3/4 input", "Real Time Clock", "Torque Convertor Lockup", "Traction control", "Rotary trailing dwell timer", "Internal SPI2", "2nd MAP", "Long Term Trim button", "dual-fuel injectors", "launch timed in", "launch timed out", "throttle stop", "check engine light", "vss3 in", "vss4 in", "Staged inj switch output 1", "Alternator control output", "Alternator load monitor input", "Alternator current monitor input", "Alternator lamp output", "Staged inj switch output 1", "Shift light output", "Oil pressure warning output", "TCS input", "MAP2", "Generic Closed-Loop Out 1", "Generic Closed-Loop Out 2", "Line-lock staging input", "Line-lock staging output", "SDcard trigger output", "Pit limiter input", "TC LED out", "Dome fill out", "Dome empty out"
+ prefSpeedUnits = bits, U08, [0:0], "MPH", "KPH"
+ prefLengthUnits = bits, U08, [0:0], "m", "in"
+
+[LoggerDefinition]
+ ; valid logger types: composite, tooth, trigger, csv
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mafAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+ calcField = mapValue, "MAF Freq", "Hz", { (MAFOption_t == 0 || (!(mafAdc > 0))) ? 0 : (maf_freq1 > 62.5) ? (1000000 / (32 * mafAdc)) : (1000000 / (128 * mafAdc)) }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+[TurboBaud]
+ turboBaudOnCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x51"
+ turboBaudOffCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x50"
+
+ ; turboBaudSpeed defines the speed for
+ ; TS to set the PC baud to when turboBaud is activated
+ turboBaudSpeed = { baudhigh } ; reference the Constant so they will always be in sync with one setting.
+ sdTurboActive = { 1 } ; this can reference a Constant or PcVariable in order to make it user selectable.
+ runtimeTurboActive = { 0 }
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+; updated settings from "new" serial
+ pageActivationDelay = 1
+ blockReadTimeout = 500
+ tsWriteBlocks = on
+; writeBlocks = on
+ interWriteDelay = 0
+
+;Relationship between TS pages and MS3 pages
+;TS MS3 internal
+;MS3 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS3 internal pages 6,7 are outpc,txbuf
+;3 8
+;4 9
+;5 10
+;6 11
+;7 12
+;8 13
+;9 18
+;10 19
+;11 21
+;12 22
+;13 23
+;14 24
+;15 25
+;16 26 ; RAM only page
+;17 27
+;18 28
+
+ endianness = big
+ nPages = 19
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0a", "\$tsCanId\x0b", "\$tsCanId\x0c", "\$tsCanId\x0d", "\$tsCanId\x12", "\$tsCanId\x13", "\$tsCanId\x15", "\$tsCanId\x16", "\$tsCanId\x17", "\$tsCanId\x18", "\$tsCanId\x19", "\$tsCanId\x1a", "\$tsCanId\x1b", "\$tsCanId\x1c", "\$tsCanId\x1d"
+ burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "", "b%2i", "b%2i", "b%2i"
+ pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c"
+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ crc32CheckCommand = "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04"
+
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0 ; TS could use the 'F' command to determine this automatically.
+
+ ;TS could use the 'f' command to determine this automatically. Will change if using CAN passthrough
+#if CAN_COMMANDS
+ blockingFactor = 256 ; just in case MS2 is used
+#else
+ blockingFactor = 2048
+#endif
+
+ validateArrayBounds = true
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 10.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; ICIgnOption
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+
+ max_coil_dur = scalar, U08, 3, "ms", 0.1000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 4, "ms", 0.1000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+; dwellAcc = scalar, U08, 5, "ms", 0.1000, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte)
+ crankingRPM = scalar, S16, 6, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ triggerOffset = scalar, S16, 8, "deg", 0.10000, 0.00000, -90.0, 380.00, 1 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 10, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+; RevLimRpm2 = scalar, S16, 12, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+
+ map0 = scalar, S16, 14, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 16, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 18, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 22, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 18, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 22, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 24, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 26, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 28, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 30, "V", 0.10000, 0.00000, -10, 10, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 32, "V", 0.10000, 0.00000, 10, 100, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 34, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 36, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 38, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 40, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 42, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 44, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ iacfullopen = scalar, U16, 46, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+ reluctorteeth1 = scalar, U16, 48, "", 0.01, 0,0,255,2 ; this is VSS1
+ crankTolerance = scalar, U08, 50, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 51, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 52, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+; IdleCtl = bits , U08, 53, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ IdleCtl = bits , U08, 53, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 53, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_vss = bits , U08, 53, [4:4], "Standard", "Use VSS"
+ IdleCtl_home = bits , U08, 53, [5:5], "Closed", "Open"
+ IACtstep = scalar, U08, 54, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IAC_tinitial_step=scalar, U08, 55, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 56, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 57, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 58, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 60, "°C", 0.05555, 0.00000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ IdleHyst = scalar, S16, 60, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ IACcrankpos = scalar, S16, 62, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcrankxt = scalar, S16, 64, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 66, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+;gap
+ reluctorteeth2 = scalar, U16, 68, "", 0.01, 0,0,255,2 ; this is VSS2
+ boosttol = scalar, S16, 70, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ OverBoostKpa2 = scalar, S16, 72, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fc_rpm_lower = scalar, U16, 74, "rpm", 1.00000, 0.0, 0.0, {rpmhigh}, 0 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 76, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 76, [2:2], "Off", "On"
+ hardware_spk = bits, U08, 77, [0:2], "JS10 spark", "LEDs spark", "MS3X spark", "INVALID", "Tacho", "INVALID", "INVALID", "INVALID"
+ hardware_fuel = bits, U08, 77, [4:4], "Std fuel", "MS3X fuel"
+ hardware_injij = bits, U08, 77, [5:5], "Mainboard", "H3+H4"
+ hardware_cam = bits, U08, 77, [6:7], "JS10", "MS3X Cam in", "MAP sensor", "INVALID"
+ OverBoostKpa = scalar, S16, 78, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 80, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+ N2Olaunchmaxmap = scalar, S16, 82, "kPa", 0.1, 0, 100, {loadhigh}, 1
+ tpsThresh = scalar, S16, 84, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 86, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 88, "%ReqFuel", 1, 0.00000, 0, 255, 0 ; * ( 1 byte) ; Tpsacold
+ taeColdM = scalar, U08, 89, "%", 1.00000, 0.00000, 100, 255.00, 0 ; * ( 1 byte) ; AccMult
+ taeTime = scalar, U08, 90, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync
+ tpsasync_events = scalar, U08, 90, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync
+ tdePct = scalar, U08, 91, "", 1.00000, 0.00000, 50.00, 100.00, 0 ; * ( 1 byte) ; TPSDQ
+ floodClear = scalar, S16, 92, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes) ; TPSWOT
+ TPSOXLimit = scalar, S16, 94, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes) ; TPSOXLimit
+ tpsProportion = scalar, U08, 96, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) ; Tps_acc_wght
+ baroCorr = bits , U08, 97, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"; BaroOption
+ egoType = bits , U08, 98, [0:1], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
+ egoCount = scalar, U08, 99, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 100, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 101, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ EGOVtarget = scalar, U08, 102, "Volts", 0.00489, 0.00000, 0.00, 1, 3
+ tempUnits = bits , U08, 103, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ egonum = scalar, U08, 104, "", 1, 0, 0, 16, 0
+ rtc_trim = scalar, S08, 105, "ppm", 1, 0, -127, +127, 0
+#if CELSIUS
+ fastIdleT = scalar, S16, 106, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 108, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fastIdleT = scalar, S16, 106, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ egoTemp = scalar, S16, 108, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ egoRPM = scalar, U16, 110, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+#if PW_4X
+ reqFuel = scalar, U16, 112, "ms", 0.004, 0.00000, 0.00, 262.143, 2 ; * ( 2 bytes)
+#else
+ reqFuel = scalar, U16, 112, "ms", 0.001, 0.00000, 0.00, 65.535, 2 ; * ( 2 bytes)
+#endif
+ divider = scalar, U08, 114, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 115, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 115, [1:1], "Every event", "Alternate events"
+ alternate_blend = bits, U08, 115, [2:2], "Off", "Blend Curve (7)"
+ injPwmT = scalar, U08, 116, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 117, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 118, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 119, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary" ; *
+; injType = bits, U08, 120, [0:0], "Port Injection", "Throttle Body" ; * not used by code
+ nInjectors = bits, U08, 121, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ OddFireang = scalar, U16, 122, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 124, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 125, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 126, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 127, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 128, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ knk_pin_out = bits, U08, 129, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ mafLF = scalar, U08, 130, "", 1.00000, 0.00000, 10.00, 100.00, 0
+;gap
+ algorithm = bits, U08, 132, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ algorithm2 = bits, U08, 132, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm = bits, U08, 133, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm2 = bits, U08, 133, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ AfrAlgorithm = scalar, U08, 134, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 135, "ms", 0.10000, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 136, "deg", 0.1, 0, 5, 180,1
+ RevLimOption_retard = bits,U08, 138, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 138, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 138, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 138, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 138, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 139, "deg", 0.10000, 0.00000,0, 25.5, 0 ; * ( 1 byte)
+ ego_startdelay = scalar, U08, 140, "s", 1, 0, 0, 120, 0
+ can_poll2_ego = bits, U08, 141, [0:0], "Disable", "Enable" ; old setting
+ can_poll2_ego2 = bits, U08, 141, [0:0], "Disable", "Innovate format"
+ can_poll2_gps = bits, U08, 141, [1:2], "Off", "JBperf GPS", "INVALID", "INVALID"
+ can_poll2_vss = bits, U08, 141, [3:3], "Listen", "Poll"
+ can_poll2_egolag= bits, U08, 141, [4:4], "Off", "On"
+ opt142_rtc = bits, U08, 142, [0:1], "Off", "On-board", "CAN", "INVALID"
+ opt142_gs_share = bits, U08, 142, [2:2], "Off", "On"
+ injPwmT2 = scalar, U08, 143, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 144, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 145, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ can_ego_id = scalar, U08, 146, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_ego_table = scalar, U08, 147, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_ego_offset = scalar, U16, 148, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ baro_upper = scalar, S16, 150, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_lower = scalar, S16, 152, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_default = scalar, S16, 154, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 156, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ launchcutzone = scalar, S16, 158, "RPM", 1.00000, 0.00000, 0.00, 1000, 0
+ RevLimNormal2 = scalar, S16, 160, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ hw_latency = scalar, U08, 162, "usec", 1.0, 0.00000, 0.00, 255.00, 0
+;next three are loadopts in the firmware
+ loadCombine = bits, U08, 163, [0:1], "additive", "multiplicitive", "Blend Curve (1)", "INVALID"
+ loadMult = bits, U08, 163, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 163, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadCombineign = bits, U08, 163, [4:4], "additive", "Blend Curve (2)"
+ loadMult2 = bits, U08, 163, [5:5], "don't multiply", "multiply"
+ loadopts_oldbaro= bits, U08, 163, [6:6], "Off", "On"
+ baud = scalar, U32, 164, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 168, "%", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ can_poll_id_rtc = scalar, U08, 170, "", 1.00000, 0.00000, 0.00, 14, 0
+ mycan_id = scalar, U08, 171, "", 1.00000, 0.00000, 0.00, 14, 0
+ mapsample_percent = scalar, U08, 172, "%", 1.00000, 0.00000, 0.00, 50, 0
+ can_poll_id_ports = scalar, U08, 173, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id = scalar, U08, 174, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ aeTaperTime = scalar, U08, 175, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync2
+ tpsasync2_events= scalar, U08, 175, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync2
+ aeEndPW = scalar, S16, 176, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 ; * tpsaccel2 ; TpsAccel2
+ egoAlgorithm = bits , U08, 178, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
+ egoAlgorithm_auth=bits , U08, 178, [2:2], "Off", "On"
+ egoAlgorithm_delay_table=bits, U08, 178, [3:3], "Use IGN events", "Use delay table"
+ egoKP = scalar, U08, 179, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 180, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 181, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+
+ ac_idleup_vss_offpoint = scalar, U16, 182, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ ac_idleup_vss_hyst = scalar, U16, 184, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 186, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 186, [1:2], "PE0/JS7", "JS11", "Flex input", "INVALID"; (1 byte )
+ fuelFreq = array , U08, 187, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 187, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 188, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 189, [ 2], "%", 1.00000, 0.00000, 50, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 189, "%", 1.00000, 0.00000, 50, 255, 0
+ fuelCorr1 = scalar, U08, 190, "%", 1.00000, 0.00000, 50, 255, 0
+
+ dwellmode = bits , U08, 191, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ pwmidle_shift_lower_rpm = scalar, U16, 192, "rpm", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ ac_idleup_tps_offpoint = scalar, S16, 194, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ ac_idleup_tps_hyst = scalar, S16, 196, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_tps_offpoint = scalar, S16, 198, "%", 0.10000, 0.00000, 0.00, 150.00, 1
+ fan_idleup_tps_hyst = scalar, S16, 200, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_vss_offpoint = scalar, U16, 202, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200.00, 0
+
+ knk_option = bits , U08, 204, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knk_option_an = bits , U08, 204, [2:3], "On/Off", "Analogue", "INVALID", "Internal"
+ knkDirection = bits , U08, 204, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 204, [5:6], "INVALID", "None", "Pull up", "INVALID" ; *
+ knk_option_wind = bits , U08, 204, [7:7], "At end", "Peak"
+ knk_maxrtd = scalar, U08, 205, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 206, "deg", 0.1, 0.0, 1.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 207, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 208, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 209, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 210, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 211, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 212, [0:2], "Off", "EAE", "INVALID", "X-tau", "X-tau with CLT correction", "INVALID", "INVALID", "INVALID" ; * ( 1 byte )
+ knkport = bits, U08, 213, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)","INVALID","INVALID"
+ knk_maxmap = scalar, S16, 214, "kPa", 0.1, 0.0, 0.0, {loadhigh}, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 216, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 218, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ triggerTeeth = scalar, U16, 220, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 222, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ pwmidle_shift_open_time = scalar, U08, 223, "s", 1.0, 0.0, 0.0, 20, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 224, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+ ICISR_tmask = scalar, U08, 226, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 227, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ ae_lorpm = scalar, U16, 228, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 230, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ fuelSpkDel = array , S16, 232, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 232, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 234, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ spk_conf2_gmtfi = bits , U08, 236, [0:2], "Off", "GM Bypass on SpkB", "Buick C3I", "TFI Non-signature", "TFI Signature PIP", "INVALID", "INVALID", "INVALID"
+ spk_conf2_oddodd= bits , U08, 236, [3:4], "Alternate", "INVALID", "Paired", "Custom"
+ spk_conf2_dwell = bits , U08, 236, [5:5], "Off", "On"
+ spk_conf2_dwelltbl = bits, U08, 236, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 236, [7:7], "Off", "Toyota DLI"
+;spk_config
+ spk_config_campol =bits, U08, 237, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 237, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 237, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 237, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam =bits, U08, 237, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used, extra CASes hidden.
+ spk_mode0 = bits , U08, 238, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-05", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "Fiat 1.8 16V", "Fuel Only", "Optispark", "Nissan SR20", "Nissan RB25", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "Honda Acura", "VQ35DE","Jeep 2000", "Jeep 2002", "Zetec VCT", "Flywheel tri-tach", "2JZ VVTi", "Honda TSX/D17", "Mazda6 2.3 VVT", "Viper V10","Viper V10 Gen1", "Honda K24A2", "HD32-2", "Miata 36-2","Daihatsu 12+1", "Subaru 36-2-2-2 VVT", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+; incomplete modes are hidden for the moment
+ spk_mode3_trim = bits, U08, 239, [0:0], "Off", "On"
+ spk_mode3_tach3 = bits, U08, 239, [1:1], "MS3X Cam", "JS10"
+ spk_mode3_hirespol= bits, U08, 239, [2:2], "Normal", "Inverted"
+ spk_mode3_kick = bits , U08, 239, [3:3], "Off", "On"
+ spk_mode3 = bits, U08, 239, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID" ; (1 byte )
+ rtbaroport = bits, U08, 240, [0:4], "Mainboard", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ego2port = bits, U08, 241, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport = bits, U08, 242, [0:4], "Mainboard", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport_t = bits, U08, 242, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+;NB these mapport are in next byte
+ mapport_f = bits, U08, 243, [6:7], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ knkport_an = bits, U08, 243, [0:2], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID",
+ OvrRunC = bits , U08, 244, [0:0], "Off", "On"
+ OvrRunC_progcut= bits , U08, 244, [1:1], "Off", "On"
+ OvrRunC_progret= bits , U08, 244, [2:2], "Off", "On"
+ OvrRunC_progign= bits , U08, 244, [3:3], "Off", "On"
+ OvrRunC_retign = bits , U08, 244, [4:4], "Off", "On"
+ poll_level_tooth = scalar, U08, 245, "", 1, 0, 0, 255, 0
+; feature4_0ftrig = bits, U08, 246, [0:0], "Simple", "Advanced"
+ feature4_0igntrig= bits, U08, 246, [1:1], "Off", "Ignition trigger indicator"
+
+ feature4_0maxdwl = bits, U08, 246, [3:3], "Off", "On"
+ feature4_0ftrig = bits, U08, 246, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ feature4_0mindwl = bits, U08, 246, [6:6], "Off", "On"
+
+ timing_flags = bits, U08, 247, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 247, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 248, "ms", 0.1000,0.00000,1.00,8.00,1
+ tsw_pin_f = bits, U08, 249, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve (3)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ crank_timing = scalar, S16, 250, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 252, "degrees", 0.10000,0.00000,-90.00,90.00,1;
+ tsf_rpm = scalar, U16, 254, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 256, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 258, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 260, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 262, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 264, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+; feature5_0 266
+ f5_0_tsf = bits , U08, 266, [0:0], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 266, [1:3], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+ f5_0_tss = bits , U08, 266, [4:4], "Off", "On"
+ f5_0_tss_opt = bits , U08, 266, [5:7], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+
+ tsw_pin_s = bits, U08, 267, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve (4)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pwmidlecranktaper= scalar, U08, 268, "s", 1.00000, 0.00000, 0.00, 100.00, 0
+ knk_step_adv = scalar, U08, 269, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ fc_rpm = scalar, U16, 270, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 272, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 274, "%", 0.10000, 0.00000, 0.00, 10.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 276, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fc_clt = scalar, S16, 276, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 278, "s", 0.1, 0, 0, 5.0, 1
+
+ tacho_opt3f = bits, U08, 279, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fc_ego_delay = scalar, U08, 280, "s", 1, 0, 0.00, 10, 0
+
+ tacho_opt80 = bits, U08, 281, [7:7], "Off", "On" ; tacho_opt2
+ tacho_optvar = bits, U08, 281, [6:6], "Fixed", "Variable"
+ tacho_opt40 = bits, U08, 281, [5:5], "Normal", "Half speed"
+ tacho_scale = scalar, U16, 282, "%", 0.1, 0, 10, 1000, 1
+;gap 284, 285
+ feature3_tps = bits, U08, 286, [0:0], "Off", "On"
+ feature3_aseunit= bits, U08, 286, [1:1], "Cycles", "0.1 seconds"
+ feature3_maplog = bits, U08, 286, [2:2], "Off", "On"
+ feature3_3 = bits, U08, 286, [3:3], "Off", "On"
+ feature3_pw4x = bits, U08, 286, [4:4], "Normal", "4x"
+ feature3_n2oin = bits, U08, 286, [5:5], "On", "Off"
+ feature3_matase = bits, U08, 286, [6:6], "Off", "On"
+ feature3_dwell = bits, U08, 286, [7:7], "Off", "On"
+ launch_opt_vss = bits, U08, 287, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ launch_opt_vssgear = bits, U08, 287, [2:2], "Off", "On"
+ launch_opt_retard = bits, U08, 287, [3:3], "Off", "On"
+ launch_opt_bank = bits, U08, 287, [4:5], "Off","Bank1", "Bank2", "Both"
+ launch_opt_on = bits, U08, 287, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_sft_zone = scalar, S16, 288, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 290, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, S16, 292, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 294, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 296, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+ launchlimopt_adv= bits , U08, 296, [2:2], "Basic", "Advanced"
+ launchlimopt_cut= bits , U08, 296, [3:4], "Random Progressive", "Random Ramped", "Fixed 5/7", "Fixed 4/5"
+ launchvsstime = scalar, U08, 297, "s", 1, 0, 0, 255, 0
+ launchvss_maxgear= scalar, U08, 298, "", 1, 0, 1, 6, 0
+ launch_opt_pins = bits, U08, 299, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ flats_arm = scalar, U16, 300, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ launchvss_minvss = scalar, U16, 302, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 1, 200, 1
+ flats_deg = scalar, S16, 304, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 306, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 308, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 310, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 312, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 312, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 312, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 312, [7:7], "OR", "AND"
+ staged_pw1_0 = bits, U08, 312, [7:7], "Off", "On"
+ staged_transition_events = scalar, U08, 313, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, S16, 314, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, S16, 316, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, S16, 318, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, S16, 320, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 322,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 322,[2:2], "Off", "On" ; enables stage 1
+ N2Oopt_3 = bits, U08, 322,[3:3], "Off", "On" ; enables stage 2
+ N2Oopt_4 = bits, U08, 322,[4:4], "Off", "On" ; use AFR2
+ N2Oopt_5 = bits, U08, 322,[5:5], "Off", "On" ; nitrous + launch
+ N2Oopt2_prog_time= bits, U08, 322,[6:7], "RPM-based", "Time-based", "VSS-based", "INVALID"
+;input and output pins moved
+ N2Oopt2_prog = bits, U08, 323,[0:0], "On/Off", "Progressive"
+;
+ N2Oopt2_prog_freq= bits, U08, 323,[2:4], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2Oopt2_prog_freqf= bits, U08, 323,[5:7], "Same", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2ORpm = scalar, U16, 324, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 326, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 328, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+#if CELSIUS
+ N2OClt = scalar, S16, 330, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ N2OClt = scalar, S16, 330, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 332, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2OPWLo = scalar, S16, 334, "ms", 0.004, 0, -128, +128, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2OPWLo = scalar, S16, 334, "ms", 0.001, 0, -32, +32, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.001, 0, -32, +32, 3
+#endif
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 338, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 339, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 340, "s", 0.01, 0, 0, 2.55, 2
+;nitrous stage 2
+; Nitrous System
+ N2O2delay = scalar, U08, 341, "s", 0.01, 0, 0, 2.55,2
+ N2O2Rpm = scalar, U16, 342, "RPM", 1, 0, 1000, 25000, 0
+ N2O2RpmMax = scalar, U16, 344, "RPM", 1, 0, 1000, 25000, 0
+ N2O2Angle = scalar, S16, 346, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2O2PWLo = scalar, S16, 348, "ms", 0.004, 0, -128, +128, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2O2PWLo = scalar, S16, 348, "ms", 0.001, 0, -32, +32, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.001, 0, -32, +32, 3
+#endif
+ RotarySplitModeFD = bits, U08, 352, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 352, [1:1], "Not Allowed", "Allowed"
+ dlyct = scalar, U08, 353, "", 1,0,0,255,0
+ dwelltime_trl = scalar, U08, 354, "ms", 0.10000, 0, 0.1, 25.5, 1
+ N2Oopt_pins = bits, U08, 355, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ RevLimRtdAng = scalar, S16, 356, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ vss4_can_offset = scalar, U16, 358, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ RevLimNormal2_hyst= scalar,U16, 360, "RPM", 1.00000, 0.00000, 100, 1000, 0
+ pwmidleset_inv = bits, U08, 362, [3:3], "Normal, 0%=off", "Inverted, 100%=off"
+ trig_init = scalar, U08, 363, "", 1,0,0,255,0
+;pwmidle
+ pwmidle_ms = scalar, U16, 364, "ms", 1, 0.00000, 0, 500, 0
+ pwmidle_close_delay = scalar, U08, 366, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 367, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 367, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_closed_duty = scalar, U08, 368, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 368, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_pid_wait_timer = scalar, U08, 369, "s", 0.1, 0.00000, 1, 10, 0
+ pwmidle_freq_pin3 = bits, U08, 370, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ pwmidle_freq_koeo = bits, U08, 370, [7:7], "Off", "On"
+ ac_idleup_min_rpm = scalar, U16, 371, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 373, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 375, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 375, "steps", 1.00000, 0.00000, 0, 20, 0 ; same but steps
+ pwmidle_rpmdot_threshold = scalar, U16, 376, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold=scalar,U16, 378, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 380, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 382, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 384, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_freq_scale = bits, U08, 386, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ pwmidle_freq_pin = bits, U08, 386, [4:6], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ boost_ctl_settings_freq = bits, U08, 387, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 387, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 387, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_settings_invert_new= bits, U08, 387, [5:5], "Normal", "Inverted"
+
+ boost_ctl_pins = bits, U08, 388, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp = scalar, U08, 389, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 390, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 391, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 392, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 393, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pwm_scale = bits, U08, 396, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ boost_ctl_pwm = bits, U08, 396, [4:5], "INVALID", "Mid","Slow", "INVALID"
+
+ NoiseFilterOpts = bits, U08, 397, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 397, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 397, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 397, [3:3], "Off", "On"
+ launchcuttiming = scalar, S16, 398, "deg", 0.10000, 0.00000, -50.00, 50.00, 1
+ pwmidle_max_rpm_new = scalar, U16, 400, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 402, "s", 1, 0.00000, 0, 10, 0
+ boost_ctl_pins_pwm = bits, U08, 403, [0:2], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+; gap 24 bytes
+ secondtrigopts = bits, U08, 428, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 428, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 428, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 428, [3:3], "Off", "On"
+
+ TC5_required_width = scalar, U16, 429, "uSec", 1.0, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 431, "%", 0.10000, 0.00000, 0.00, 50, 0 ;
+ stoich = scalar, S16, 433, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ MAPOXMin = scalar, S16, 435, "%", 0.10000, 0.00000, -10, {loadhigh}, 2 ; * ( 2 bytes)
+ IC2ISR_tmask = scalar, U08, 437, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 438, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+;afrload and eaeload are part of extra_load_opts in firmware
+ afrload = bits, U08, 439, [0:3], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ eaeload = bits, U08, 439, [4:7], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+; airden_scaling = scalar, U08, 440, "%", 1, 0.00000, 0, 150.00, 0
+ fan_idleup_vss_hyst = scalar, U16, 441, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 200, 0
+ log_style_led = bits, U08, 443, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ log_style_ledspd = bits, U08, 443, [6:7], "Normal", "Slower", "Faster", "Fastest"
+ primedelay = scalar, U08, 444, "s", 0.1, 0.0, 0.0, 3, 1
+ pwmidle_cl_opts_initvaluetable = bits, U08, 445, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 445, [1:1], "Use MAT", "Use CLT"
+ pwmidle_cl_opts_display_pid = bits, U08, 445, [2:2], "Basic", "Advanced"
+ boost_ctl_flags = bits, U08, 446, [0:1], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ boost_ctl_flags2 = bits, U08, 446, [2:3], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ idleveadv_to_pid_idleadv = bits, U08, 447, [0:0], "Use normal activation", "Use PID idle activation"
+ idleveadv_to_pid_idleve = bits, U08, 447, [1:1], "Use normal activation", "Use PID idle activation"
+ boost_ctl_sensitivity = scalar, S16, 448, "", 0.1, 0, 0, 500, 1
+ boost_ctl_sensitivity2 = scalar, S16, 450, "", 0.1, 0, 0, 500, 1
+ fuelcut_fuelon_upper_rpmdot = scalar, U16, 452, "rpmdot", 10, 0, 0, 10000, 0
+ fuelcut_fuelon_lower_rpmdot = scalar, U16, 454, "rpmdot", 10, 0, 0, 10000, 0
+#if PW_4X
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.004, 0, 0, 10, 3
+#else
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.001, 0, 0, 10, 3
+#endif
+ staged_primary_delay = scalar, U08, 458, "ign events", 1, 0, 0, 30, 0
+
+ idleadvance_on = bits, U08, 459, [0:0], "Off", "On" ;
+ idleve_on = bits, U08, 459, [1:1], "Off", "On"
+ idleve_vsson = bits, U08, 459, [2:3], "Off", "VSS1", "VSS2", "INVALID"
+ idleadv_vsson = bits, U08, 459, [4:5], "Off", "VSS1", "VSS2", "INVALID"
+ idle_special_ops_timing_assist = bits, U08, 459, [6:6], "Off", "On"
+ idleadvance_tps = scalar, S16, 460, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 462, "rpm", 1, 0, 0, {rpmhigh}, 0
+ idleadvance_load = scalar, S16, 464, "%", 0.1, 0, 0, 100, 0
+
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 466, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleadvance_clt = scalar, S16, 466, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 468, "s", 1, 0, 0, 5, 0
+ idleadvance_curve = array, S16, 469, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1
+ idleadvance_loads = array, S16, 477, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1
+
+;SD datalogging
+ log_style2_but = bits, U08, 485, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ log_style_block = bits, U08, 486, [0:1], "64 byte", "64 byte + stream", "INVALID", "INVALID"
+ log_style_gps = bits, U08, 486, [5:5], "Off", "On"
+ log_style_on = bits, U08, 486, [6:7], "Disabled", "Insertion", "Button", "Trigger" ; old names
+ log_style_on2 = bits, U08, 486, [6:7], "Disabled", "Always", "Button", "Trigger" ; new names
+
+ log_style2_samp = bits, U08, 487, [3:4], "Timed", "every tooth", "every cycle", "INVALID"
+ log_style2_clg = bits, U08, 487, [5:5], "Off", "On"
+
+ log_style3_adc = bits, U08, 488, [0:2], "INT_MAP", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID"
+ log_length = scalar, U08, 489, "mins", 1, 0, 1, 255, 0
+ log_int = scalar, U16, 490, "ms", 0.128,0,2.0,8388,1
+ log_rate = scalar, U16, 490, "", 1.0, { (1000/log_int) - (log_int/ 0.128) },0,1000,0
+ logFieldOffset = array , U16, 492, [ 64], "", 1.0000, 0.00000, 0.00, 65535, 0 ; * ( 64 words)
+ logFieldLength = array , U08, 620, [ 64], "", 1.0000, 0.00000, 0.00, 255.00, 0 ; * ( 64 bytes)
+
+ firea = scalar, U08, 684, "", 1,0,0,16,0
+ fireb = scalar, U08, 685, "", 1,0,0,16,0
+ firec = scalar, U08, 686, "", 1,0,0,16,0
+ fired = scalar, U08, 687, "", 1,0,0,16,0
+ firee = scalar, U08, 688, "", 1,0,0,16,0
+ firef = scalar, U08, 689, "", 1,0,0,16,0
+ fireg = scalar, U08, 690, "", 1,0,0,16,0
+ fireh = scalar, U08, 691, "", 1,0,0,16,0
+ firei = scalar, U08, 692, "", 1,0,0,16,0
+ firej = scalar, U08, 693, "", 1,0,0,16,0
+ firek = scalar, U08, 694, "", 1,0,0,16,0
+ firel = scalar, U08, 695, "", 1,0,0,16,0
+ firem = scalar, U08, 696, "", 1,0,0,16,0
+ firen = scalar, U08, 697, "", 1,0,0,16,0
+ fireo = scalar, U08, 698, "", 1,0,0,16,0
+ firep = scalar, U08, 699, "", 1,0,0,16,0
+
+ sequential = bits, U08, 700, [0:1], "Off", "Semi-sequential", "Fully Sequential", "INVALID"
+ sequential_angle_spec = bits, U08, 700, [2:4], "INVALID", "End of squirt", "Middle of Squirt", "INVALID", "Beginning of squirt", "INVALID", "INVALID", "INVALID"
+ sequential_trim_on_off = bits, U08, 700, [5:5], "Off", "On"
+
+ boost_launch_duty = scalar, U08, 701, "%", 1,0,0,100,0
+ boost_launch_target = scalar, U16, 702, "kPa", 0.1,0,0,{loadhigh},1
+ boost_feats_tsw = bits, U08, 704, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend Curve(6)","Gear-based", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_feats_launch = bits, U08, 704, [5:5], "Off", "On"
+ boost_feats_timed = bits, U08, 704, [6:6], "Off", "On"
+
+;see lower for launch_var_on
+ launch_3step_in = bits, U08, 705, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ launch_var_low = scalar, U16, 706, "rpm", 1,0,0,{rpmhigh},0
+ launch_var_up = scalar, U16, 708, "rpm", 1,0,0,{rpmhigh},0
+ vssout_scale = scalar, U32, 710, "", 1, 0, 0, 300000, 0
+ launch_sft_deg3 = scalar, S16, 714, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim3 = scalar, U16, 716, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ map_sample_duration = scalar, S16, 718, "deg", 0.10000, 0.00000, 0, 180, 1 ; * ( 2 bytes )
+ opentime_opt1_master = bits, U08, 720, [7:7], "Same", "Individual"
+ opentime_opt1 = bits, U08, 720, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt2 = bits, U08, 721, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt3 = bits, U08, 722, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt4 = bits, U08, 723, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt5 = bits, U08, 724, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt6 = bits, U08, 725, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt7 = bits, U08, 726, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt8 = bits, U08, 727, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta = bits, U08, 728, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta_pwm= bits, U08, 728, [4:4], "Off", "On"
+ opentime_optb = bits, U08, 729, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_optb_pwm= bits, U08, 729, [4:4], "Off", "On"
+ opentime_optb_own= bits, U08, 729, [5:5], "Off", "On"
+
+ opentime_opt11 = bits, U08, 730, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt12 = bits, U08, 731, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt13 = bits, U08, 732, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt14 = bits, U08, 733, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt15 = bits, U08, 734, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt16 = bits, U08, 735, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt17 = bits, U08, 736, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt18 = bits, U08, 737, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt1_master = bits, U08, 738, [7:7], "Off", "On"
+ smallpw_opt1 = bits, U08, 738, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt2 = bits, U08, 739, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt3 = bits, U08, 740, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt4 = bits, U08, 741, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt5 = bits, U08, 742, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt6 = bits, U08, 743, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt7 = bits, U08, 744, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt8 = bits, U08, 745, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opta = bits, U08, 746, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_optb = bits, U08, 747, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt11 = bits, U08, 748, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt12 = bits, U08, 749, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt13 = bits, U08, 750, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt14 = bits, U08, 751, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt15 = bits, U08, 752, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt16 = bits, U08, 753, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt17 = bits, U08, 754, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt18 = bits, U08, 755, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ maxafr_opt1_on = bits, U08, 756, [0:0], "Off", "On"
+ maxafr_opt1_load= bits,U08, 756, [1:2], "MAP", "TPS", "INVALID", "INVALID"
+ maxafr_opt1_led = bits,U08, 757, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ maxafr_en_load = scalar, U16, 758, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_en_rpm = scalar, U16, 760, "rpm", 1, 0, 0, {rpmhigh}, 0
+ maxafr_en_time = scalar, U16, 762, "s", 0.001, 0, 0, 5.000, 1
+ maxafr_spkcut_time=scalar, U16, 764, "s", 0.001, 0, 0, 5.000, 2
+ maxafr_ret_tps = scalar, S16, 766, "%", 0.10000, 0, 0, 110, 1
+ maxafr_ret_map = scalar, S16, 768, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_ret_rpm = scalar, U16, 770, "rpm", 1, 0, 0, {rpmhigh}, 1
+#if PW_4X
+ launch_addfuel = scalar, S16, 772, "ms", 0.004, 0.0000, -128, +128, 3
+#else
+ launch_addfuel = scalar, S16, 772, "ms", 0.001, 0.0000, -32, +32, 3
+#endif
+ wheeldia1 = scalar, U16, 774, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ wheeldia2 = scalar, U16, 778, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ fdratio1 = scalar, U16, 776, ":1", 0.01, 0.00000, 0.40, 6.0, 2 ; * ( 2 bytes)
+;not a gap
+ vss1_pos = bits, U08, 780, [0:1], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ vss2_pos = bits, U08, 780, [2:3], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ launch_var_on = bits, U08, 781, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ flats_minvss = scalar, U16, 782, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ vss_opt1 = bits, U08, 784, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss_opt2 = bits, U08, 784, [4:7], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss1_an = bits, U08, 785,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss1_can_id = scalar, U08, 786, "", 1.00000, 0.00000, 0.00, 255, 0 ;
+ tsw_pin_ob = bits, U08, 787, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vss1_can_offset = scalar, U16, 788, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss2_can_offset = scalar, U16, 790, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ MapThreshXTD = scalar, U08, 792, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ MapThreshXTD2 = scalar, U08, 793, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ vss_opt0_1 = bits, U08, 794, [0:1], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_2 = bits, U08, 794, [2:3], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_3 = bits, U08, 794, [4:4], "Off", "On"
+ vss_opt0_4 = bits, U08, 794, [6:6], "Off", "On"
+ ; 1 gap
+ ss_opt1 = bits, U08, 796, [0:3], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Poll CAN"
+ ss_opt1_spd = bits, U08, 796, [7:7], "Off", "On"
+ vss2_an = bits, U08, 797,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ss1_pwmseq = scalar, U08, 798, "", 1.00000, 0.00000, 1, 4, 0
+ ss2_pwmseq = scalar, U08, 799, "", 1.00000, 0.00000, 1, 4, 0
+ gear_can_offset = scalar, U16, 800, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ mapsample_opt1 = bits, U08, 802, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 802, [2:2], "Use timed min", "Use event average"
+ map2port = bits, U08, 803, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ n2o1n_pins = bits, U08, 804, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o1f_pins = bits, U08, 805, [0:5], "Same", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2n_pins = bits, U08, 806, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2f_pins = bits, U08, 807, [0:5], "Same", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+; these an_max did use msToPrefUnitsScale, but that didn't change the values in real time
+ vss1_an_max = scalar, U16, 808, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ vss2_an_max = scalar, U16, 810, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ tsw_pin_rf = bits, U08, 812, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_afr = bits, U08, 813, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "Blend curve(5)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_stoich = bits, U08, 814, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_vss = bits, U08, 815, [0:1], "Off", "VSS1", "VSS2", "Gear"
+#if PW_4X
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ stoich_alt = scalar, S16, 818, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1
+
+ water_pins_pump = bits, U08, 820, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ water_pins_valve = bits, U08, 821, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_pins_in_shut = bits, U08, 822, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_freq_on = bits, U08, 823,[0:0], "Off", "On"
+ water_freq = bits, U08, 823,[1:4], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ water_freq_type = bits, U08, 823,[5:6], "Off", "Fast", "Slow", "INVALID"
+ boost_vss_tps = scalar, U16, 824, "%", 0.1, 0, 0, 100, 0
+ water_tps = scalar, S16, 826, "%", 0.1, 0, 0, 100, 0
+ water_rpm = scalar, U16, 828, "RPM", 1, 0, 0, {rpmhigh}, 0
+ water_map = scalar, S16, 830, "kPa", 0.1, 0, 0, {loadhigh}, 1
+#if CELSIUS
+ water_mat = scalar, S16, 832, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ water_mat = scalar, S16, 832, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ pwmidle_rpmdot_disablepid = scalar, S16, 834, "", 10.0000, 0.00000, 0, 1000, 0
+ boost_ctl_lowerlimit = scalar, S16, 836, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+
+ enable_pollADC = bits, U08, 838, [0:0], "Disable", "Enable" ; enable_poll
+ enable_pollPWM = bits, U08, 838, [1:2], "Disable", "16bit", "32bit", "INVALID"
+ enable_pollports_digin = bits, U08,838, [3:3], "Disable", "Enable"
+ enable_pollports_digout = bits,U08,838, [4:5], "Disable", "One", "Two", "INVALID"
+ enable_pwmout = bits,U08,838, [6:6], "Disable", "Enable"
+ enable_pwmout255 = bits,U08,838, [7:7], "Disable", "Enable"
+
+ poll_table_rtc = scalar, U08, 839, "", 1.00000, 0.00000, 0, 15, 0
+ poll_tablePWM = scalar, U08, 840, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 841, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offset_rtc = scalar, S16, 842, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ poll_offsetPWM = scalar, S16, 844, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digin_offset = scalar, S16, 846, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digout_offset = scalar, S16, 848, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+
+ egt_num = bits, U08, 850, [0:4], "Off", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ accXport = bits, U08, 851, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accYport = bits, U08, 852, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accZport = bits, U08, 853, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accXcal1 = scalar, S16, 854, "ADC", 1, 0, 0, 4095, 0
+ accXcal2 = scalar, S16, 856, "ADC", 1, 0, 0, 4095, 0
+ accYcal1 = scalar, S16, 858, "ADC", 1, 0, 0, 4095, 0
+ accYcal2 = scalar, S16, 860, "ADC", 1, 0, 0, 4095, 0
+ accZcal1 = scalar, S16, 862, "ADC", 1, 0, 0, 4095, 0
+ accZcal2 = scalar, S16, 864, "ADC", 1, 0, 0, 4095, 0
+
+ accxyzLF = scalar, U08, 866, "%", 1, 0, 10, 100, 0
+ egt1port = bits, U08, 867, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt2port = bits, U08, 868, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt3port = bits, U08, 869, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt4port = bits, U08, 870, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt5port = bits, U08, 871, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt6port = bits, U08, 872, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt7port = bits, U08, 873, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt8port = bits, U08, 874, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt9port = bits, U08, 875, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt10port = bits, U08, 876, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt11port = bits, U08, 877, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt12port = bits, U08, 878, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt13port = bits, U08, 879, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt14port = bits, U08, 880, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt15port = bits, U08, 881, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt16port = bits, U08, 882, [0:4], "Off", "INVALID", "INVALID", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt_conf_action = bits, U08, 883, [0:0], "Off", "On"
+ egt_conf_shutdown = bits, U08, 883, [1:1], "Off", "On"
+ egt_conf_bank = bits, U08, 883, [2:3], "INVALID", "Bank 1", "Bank 2", "Both"
+ egt_conf_percyl = bits, U08, 883, [4:4], "Off", "On"
+;EGT calibration
+#if CELSIUS
+ egtcal_temp0 = scalar, S16, 884, "°C", 0.05555, -320, -40, 1500, 0
+ egtcal_tempmax= scalar, S16, 886, "°C", 0.05555, -320, -40, 1500, 0
+ egt_warn = scalar, S16, 888, "°C", 0.05555, -320, -40, 1500, 0
+ egt_max = scalar, S16, 890, "°C", 0.05555, -320, -40, 1500, 0
+#else
+ egtcal_temp0 = scalar, S16, 884, "°F", 0.1, 0, -40, 2700, 0
+ egtcal_tempmax= scalar, S16, 886, "°F", 0.1, 0, -40, 2700, 0
+ egt_warn = scalar, S16, 888, "°F", 0.1, 0, -40, 2700, 0
+ egt_max = scalar, S16, 890, "°F", 0.1, 0, -40, 2700, 0
+#endif
+ egt_time = scalar, U16, 892, "s", 0.001, 0, 0, 10, 2
+ vss1_can_scale= scalar, U16, 894, "%", 0.1, 0, 0, 6553, 1
+ vss1_can_scale_pulse= scalar, U16, 894, "", 1, 0, 0, 65535, 0
+ vss2_can_scale= scalar, U16, 896, "%", 0.1, 0, 0, 6553, 1
+ vss2_can_scale_pulse= scalar, U16, 896, "", 1, 0, 0, 65535, 0
+ vss1_pwmseq = scalar, U08, 898, "", 1.00000, 0.00000, 1, 4, 0
+ vss2_pwmseq = scalar, U08, 899, "", 1.00000, 0.00000, 1, 4, 0
+ MAFOption = bits, U08, 900, [0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "MAP (ADC0)", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ MAFOption_t = bits, U08, 900, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+ enginesize = scalar, U16, 901, "cc", 1.00000, 0.00000, 0, 65536, 0
+ vssout_opt = bits, U08, 903, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vssout_optunits= bits, U08, 903, [6:7], "Time", "Pulses per mile", "Pulses per km", "INVALID"
+ vss3_can_offset = scalar, U16, 904, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss1_can_size = bits, U08, 906, [0:0], "8bit", "16bit"
+ vss2_can_size = bits, U08, 906, [1:1], "8bit", "16bit"
+;MAF Freq options in vss_can_size byte
+ MAFOption_f = bits, U08, 906, [6:7], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ canpwm_clk = scalar, U08, 907, "MHz", 1,0,0,100,0
+ canpwm_pre = scalar, U08, 908, "", 1,0,0,255,0
+ canpwm_div = scalar, U08, 909, "", 1,0,0,255,0
+ vss1_can_table = scalar, U08, 910, "", 1,0,0,255,0
+ feature7_mafmat = bits, U08, 911, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 911, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 911, [2:2], "Off", "On"
+ feature7_aeevents= bits, U08, 911, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 911, [4:4], "Off", "On"
+ feature7_batchcrank= bits,U08, 911, [5:5], "Off", "On"
+ feature7_cranktaper= bits,U08, 911, [6:6], "Off", "On"
+ feature7_crtpunits= bits, U08, 911, [7:7], "Time", "Events"
+ vss1LF = scalar, U08, 912, "", 1,0,10,100,0
+ vss2LF = scalar, U08, 913, "", 1,0,10,100,0
+ ss1LF = scalar, U08, 914, "", 1,0,10,100,0
+ ss2LF = scalar, U08, 915, "", 1,0,10,100,0
+#if PW_4X
+ egt_addfuel = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ egt_addfuel = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ launch_fcut_rpm= scalar, U16, 918, "RPM", 1, 0, 1000, 65000, 0
+;gear ratios
+ gear1ratio = scalar, U16, 920, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear2ratio = scalar, U16, 922, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear3ratio = scalar, U16, 924, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear4ratio = scalar, U16, 926, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear5ratio = scalar, U16, 928, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear6ratio = scalar, U16, 930, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear_method = bits, U08, 932, [0:1], "Off", "VSS/RPM", "Analogue", "CAN Gear#"
+ gear_port_an = bits, U08, 933, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ gear0v = scalar, U16, 934, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear1v = scalar, U16, 936, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear2v = scalar, U16, 938, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear3v = scalar, U16, 940, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear4v = scalar, U16, 942, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear5v = scalar, U16, 944, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear6v = scalar, U16, 946, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear_no = scalar, U08, 948, "", 1, 0, 1, 6, 0
+ vssdotLF = scalar, U08, 949, "", 1,0,10,100,0
+ vssdot_int = scalar, U08, 950, "ms", 10, 0 , 10, 2000, 0
+ ac_idleup_io_in = bits, U08, 951, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ac_idleup_settings_inv = bits, U08, 951, [6:6], "Normal", "Inverted"
+ ac_idleup_settings = bits, U08, 951, [7:7], "Off", "On"
+
+ ac_idleup_io_out = bits, U08, 952, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ac_idleup_delay = scalar, U16, 953, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ac_idleup_adder_duty = scalar, U08, 955, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 955, "steps", 1, 0, 0, 255, 0
+ fanctl_settings_on = bits, U08, 956, [7:7], "Off", "On"
+ fanctl_settings_idleup = bits, U08, 956, [6:6], "No", "Yes"
+ fanctl_settings_pin = bits, U08, 956, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fanctl_idleup_delay = scalar, U16, 957, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ fanctl_idleup_adder_duty = scalar, U08, 959, "%", 0.392, 0.00000, 0, 100, 1
+ fanctl_idleup_adder_steps = scalar, U08, 959, "steps", 1.000, 0.00000, 0, 255, 0
+#if CELSIUS
+ fanctl_ontemp =scalar, S16, 960, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+#else
+ fanctl_ontemp =scalar, S16, 960, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ canadc_opt1 = bits, U08, 964, [0:0], "Off", "On"
+ canadc_opt2 = bits, U08, 964, [1:1], "Off", "On"
+ canadc_opt3 = bits, U08, 964, [2:2], "Off", "On"
+ canadc_opt4 = bits, U08, 964, [3:3], "Off", "On"
+ canadc_opt5 = bits, U08, 964, [4:4], "Off", "On"
+ canadc_opt6 = bits, U08, 964, [5:5], "Off", "On"
+ fanctl_opt2_engineoff = bits, U08, 965, [0:0], "No", "Yes"
+ canadc_id1 = scalar, U08, 966, "", 1, 0, 0, 14, 0
+ canadc_id2 = scalar, U08, 967, "", 1, 0, 0, 14, 0
+ canadc_id3 = scalar, U08, 968, "", 1, 0, 0, 14, 0
+ canadc_id4 = scalar, U08, 969, "", 1, 0, 0, 14, 0
+ canadc_id5 = scalar, U08, 970, "", 1, 0, 0, 14, 0
+ canadc_id6 = scalar, U08, 971, "", 1, 0, 0, 14, 0
+ canadc_tab1 = scalar, U08, 972, "", 1, 0, 0, 31, 0
+ canadc_tab2 = scalar, U08, 973, "", 1, 0, 0, 31, 0
+ canadc_tab3 = scalar, U08, 974, "", 1, 0, 0, 31, 0
+ canadc_tab4 = scalar, U08, 975, "", 1, 0, 0, 31, 0
+ canadc_tab5 = scalar, U08, 976, "", 1, 0, 0, 31, 0
+ canadc_tab6 = scalar, U08, 977, "", 1, 0, 0, 31, 0
+ canadc_off1 = scalar, U16, 978, "", 1, 0, 0, 1023, 0
+ canadc_off2 = scalar, U16, 980, "", 1, 0, 0, 1023, 0
+ canadc_off3 = scalar, U16, 982, "", 1, 0, 0, 1023, 0
+ canadc_off4 = scalar, U16, 984, "", 1, 0, 0, 1023, 0
+ canadc_off5 = scalar, U16, 986, "", 1, 0, 0, 1023, 0
+ canadc_off6 = scalar, U16, 988, "", 1, 0, 0, 1023, 0
+ ac_idleup_cl_targetadder = scalar, S16, 990, "rpm", 1, 0, 0, 700, 0
+ fan_idleup_cl_targetadder = scalar, S16, 992, "rpm", 1, 0, 0, 700, 0
+#if CELSIUS
+ boost_ctl_clt_threshold = scalar, S16, 994, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ boost_ctl_clt_threshold = scalar, S16, 994, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ fan_ctl_settings_acfan = bits, U08, 996, [0:0], "Leave Fan off", "Turn fan on"
+#if LAMBDA
+ ego_upper_bound = scalar, U08, 997, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+ ego_lower_bound = scalar, U08, 998, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+#else
+ ego_upper_bound = scalar, U08, 997, "AFR", 0.10000, 0.00000, 7, 25, 1
+ ego_lower_bound = scalar, U08, 998, "AFR", 0.10000, 0.00000, 7, 25, 1
+#endif
+ ss_opt2 = bits, U08, 999, [0:3], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Poll CAN"
+ ss_opt2_spd = bits, U08, 999, [7:7], "Off", "On"
+ launch_maxvss = scalar, U16, 1000, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ maf_range = bits, U08, 1002, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ ac_delay_since_last_on = scalar, U08, 1003, "s", 1.00000, 0.00000, 0, 30, 0
+ reluctorteeth3 = scalar, U16, 1004, "", 0.01, 0,0,255,2 ; this is SS1
+ reluctorteeth4 = scalar, U16, 1006, "", 0.01, 0,0,255,2 ; this is SS2
+ boost_gear_switch = scalar, U08, 1008, "gear", 1, 0, 1, 7, 0
+ staged_extended_opts_use_v3 = bits, U08, 1009, [0:0], "Use MS3x (if possible)", "Use V3"
+ staged_extended_opts_simult = bits, U08, 1009, [1:1], "Alternating (2 squirts)", "Simultaneous (1 squirt)"
+ staged_extended_opts_pw1off = bits, U08, 1009, [2:2], "Off", "On"
+
+ can_pwmout_id = scalar, U08, 1010, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_tab = scalar, U08, 1011, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_offset = scalar, S16, 1012, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ idleve_tps = scalar, S16, 1014, "%", 0.10000, 0.00000, 0, 100, 1
+ idleve_rpm = scalar, U16, 1016, "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ idleve_load = scalar, S16, 1018, "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+#if CELSIUS
+ idleve_clt = scalar, S16, 1020, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleve_clt = scalar, S16, 1020, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleve_delay = scalar, U08, 1022, "s", 1.00000, 0.0000, 0, 10, 0
+ ac_idleup_cl_lockout_mapadder = scalar, U08, 1023, "%", 0.10000, 0.00000, 0, 25.5, 0
+
+page = 2
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,1,8388,1
+;this depend on single coil or seq etc.
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+#if PW_4X
+ testpw = scalar, U16, 6, "ms", 0.004, 0.00000, 0, 262.143, 3
+#else
+ testpw = scalar, U16, 6, "ms", 0.001, 0.00000, 0, 65.535, 3
+#endif
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0
+;gap
+ testinjPwmT = scalar, U08, 11, "ms", 0.12800, 0.12800, 0.00, 32.64, 1
+ testinjPwmPd = scalar, U08, 12, "us", 1.00000, 0.00000, 40.00, 100.00, 0
+ testinjPwmP = scalar, U08, 13, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ testsel_inj = bits, U08, 14, [0:3], "InjA", "InjB", "InjC", "InjD", "InjE", "InjF", "InjG", "InjH", "Inj1/I", "Inj2/J", "InjK", "InjL", "INVALID", "INVALID", "INVALID", "INVALID"
+ testsel_coil = bits, U08, 14, [4:7], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "CoilG", "CoilH", "CoilI", "CoilJ", "CoilK", "CoilL", "CoilM", "CoilN", "INVALID", "INVALID"
+ dbgtooth = scalar, U08, 15, "tooth", 1,0,0,255,0
+ iacpostest = scalar, U16, 16, "steps", 1,0,0,65535,0
+ iachometest = scalar, U16, 18, "steps", 1,0,0,65535,0
+ iactest_0 = scalar, U08, 20, "", 1,0,0,255,0
+ flashlock = bits, U08, 21, [0:0], "Locked", "Unlocked" ; tables 0-3
+ boost_ctl_settings_on2 = bits, U08, 22, [3:3], "Off","On"
+ boost_ctl_settings_cl2 = bits, U08, 22, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_pins2 = bits, U08, 23, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp2 = scalar, U08, 24, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki2 = scalar, U08, 25, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd2 = scalar, U08, 26, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty2 = scalar, U08, 27, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty2 = scalar, U08, 28, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pins_pwm2 = bits, U08, 29, [0:2], "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
+ boost_ctl_lowerlimit2 = scalar, S16, 30, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+ boost_ctl_sensor2 = bits, U08, 32, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+
+ vss_opt3 = bits, U08, 33, [0:3], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+ vss_opt4 = bits, U08, 33, [4:7], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "CAN VSS", "Use CAN PWMin"
+
+ vss3_an = bits, U08, 34,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss4_an = bits, U08, 35,[0:4], "INVALID", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss3_pwmseq = scalar, U08, 36, "", 1.00000, 0.00000, 1, 4, 0
+ vss4_pwmseq = scalar, U08, 37, "", 1.00000, 0.00000, 1, 4, 0
+ u08_debug38 = scalar, U08, 38, "", 1, 0.00000, 0, +255, 0
+ u08_debug38_0 = bits, U08, 38, [0:0], "Normal", "Loopback"
+ u08_debug38_1 = bits, U08, 38, [1:1], "Off", "On"
+; pad gap
+
+ egoport1 = bits, U08, 40, [0:4], "Normal EGO", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport2 = bits, U08, 41, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport3 = bits, U08, 42, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport4 = bits, U08, 43, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport5 = bits, U08, 44, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport6 = bits, U08, 45, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport7 = bits, U08, 46, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport8 = bits, U08, 47, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport9 = bits, U08, 48, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport10 = bits, U08, 49, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport11 = bits, U08, 50, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport12 = bits, U08, 51, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport13 = bits, U08, 52, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport14 = bits, U08, 53, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport15 = bits, U08, 54, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport16 = bits, U08, 55, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ egomap1 = bits, U08, 56, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap2 = bits, U08, 57, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap3 = bits, U08, 58, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap4 = bits, U08, 59, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap5 = bits, U08, 60, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap6 = bits, U08, 61, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap7 = bits, U08, 62, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap8 = bits, U08, 63, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap9 = bits, U08, 64, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap10 = bits, U08, 65, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap11 = bits, U08, 66, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap12 = bits, U08, 67, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap13 = bits, U08, 68, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap14 = bits, U08, 69, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap15 = bits, U08, 70, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap16 = bits, U08, 71, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+;egomap?t is not presently implemented in the code
+ egomap1t = bits, U08, 56, [4:4], "1", "2"
+ egomap2t = bits, U08, 57, [4:4], "1", "2"
+ egomap3t = bits, U08, 58, [4:4], "1", "2"
+ egomap4t = bits, U08, 59, [4:4], "1", "2"
+ egomap5t = bits, U08, 60, [4:4], "1", "2"
+ egomap6t = bits, U08, 61, [4:4], "1", "2"
+ egomap7t = bits, U08, 62, [4:4], "1", "2"
+ egomap8t = bits, U08, 63, [4:4], "1", "2"
+ egomap9t = bits, U08, 64, [4:4], "1", "2"
+ egomap10t = bits, U08, 65, [4:4], "1", "2"
+ egomap11t = bits, U08, 66, [4:4], "1", "2"
+ egomap12t = bits, U08, 67, [4:4], "1", "2"
+ egomap13t = bits, U08, 68, [4:4], "1", "2"
+ egomap14t = bits, U08, 69, [4:4], "1", "2"
+ egomap15t = bits, U08, 70, [4:4], "1", "2"
+ egomap16t = bits, U08, 71, [4:4], "1", "2"
+
+ tc_opt_on = bits, U08, 72, [0:0], "Off", "On"
+ tc_opt_method = bits, U08, 72, [1:2], "Perfect Run", "VSS %slip", "Perfect Run RPM", "Switch input"
+ tc_opt_slipcurve=bits,U08, 72, [4:4], "Fixed value", "Adjustable"
+ tc_opt_n2o = bits, U08, 72, [5:5], "On/Off", "INVALID"
+ tc_opt_bank = bits, U08, 72, [6:7], "INVALID", "Bank 1", "Bank 2", "Both"
+ tc_slipthresh = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ tc_minvss = scalar, U16, 74, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_maxvss = scalar, U16, 76, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_mintps = scalar, S16, 78, "%", 0.10000, 0.00000, 0, 100, 1
+ tc_enin = bits, U08, 80, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ knock_bpass = bits, U08, 81, [0:5], "1.22", "1.26", "1.31", "1.35", "1.40", "1.45", "1.51", "1.57", "1.63", "1.71", "1.78", "1.87", "1.96", "2.07", "2.18", "2.31", "2.46", "2.54", "2.62", "2.71", "2.81", "2.92", "3.03", "3.15", "3.28", "3.43", "3.59", "3.76", "3.95", "4.16", "4.39", "4.66", "4.95", "5.12", "5.29", "5.48", "5.68", "5.90", "6.12", "6.37", "6.64", "6.94", "7.27", "7.63", "8.02", "8.46", "8.95", "9.50", "10.12", "10.46", "10.83", "11.22", "11.65", "12.10", "12.60", "13.14", "13.72", "14.36", "15.07", "15.84", "16.71", "17.67", "18.76", "19.98"
+ knock_conf_num = bits, U08, 82, [0:0], "1", "2"
+ knock_conf_debug = bits, U08, 82, [4:4], "Off", "On"
+ knock_conf_percylact = bits, U08, 82, [5:5], "Off", "On"
+ knock_conf_launch = bits, U08, 82, [6:6], "Off", "On"
+ knock_conf_percyl = bits, U08, 82, [7:7], "Off", "On"
+ knock_int = bits, U08, 83, [0:4], "40", "45", "50", "55", "60", "65", "70", "75", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240", "260", "280", "300", "320", "360", "400", "440", "480", "520", "560", "600"
+
+ ff_tpw0 = scalar, U08, 84, "ms", 0.05, 0, 0, 12.7, 2
+ ff_tpw1 = scalar, U08, 85, "ms", 0.05, 0, 0, 12.7, 2
+#if CELSIUS
+ ff_temp0 = scalar, S16, 86, "°C", 0.05555, -320, -40, 150.00, 1
+ ff_temp1 = scalar, S16, 88, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ ff_temp0 = scalar, S16, 86, "°F", 0.10000, 0.00000, -40, 300, 1
+ ff_temp1 = scalar, S16, 88, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ fueltemp1 = bits, U08, 90, [0:4], "Off", "Flex fuel", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ fueltemp1_corr = bits, U08, 90, [7:7], "Off", "On"
+ tc_knob = bits, U08, 91, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ maf_freq0 = scalar, U16, 92, "Hz", 0.25, 0.00000, 0, 16383,1
+ maf_freq1 = scalar, U16, 94, "Hz", 0.25, 0.00000, 0, 16383,1
+ map_freq0 = scalar, U16, 96, "Hz", 0.2, 0.00000, 0, 13107,1
+ map_freq1 = scalar, U16, 98, "Hz", 0.2, 0.00000, 0, 13107,1
+
+ knock_gain01 = bits, U08, 100, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain02 = bits, U08, 101, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain03 = bits, U08, 102, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain04 = bits, U08, 103, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain05 = bits, U08, 104, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain06 = bits, U08, 105, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain07 = bits, U08, 106, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain08 = bits, U08, 107, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain09 = bits, U08, 108, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain10 = bits, U08, 109, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain11 = bits, U08, 110, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain12 = bits, U08, 111, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain13 = bits, U08, 112, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain14 = bits, U08, 113, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain15 = bits, U08, 114, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain16 = bits, U08, 115, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+
+ knock_sens01 = bits, U08, 116, [0:0], "1", "2"
+ knock_sens02 = bits, U08, 117, [0:0], "1", "2"
+ knock_sens03 = bits, U08, 118, [0:0], "1", "2"
+ knock_sens04 = bits, U08, 119, [0:0], "1", "2"
+ knock_sens05 = bits, U08, 120, [0:0], "1", "2"
+ knock_sens06 = bits, U08, 121, [0:0], "1", "2"
+ knock_sens07 = bits, U08, 122, [0:0], "1", "2"
+ knock_sens08 = bits, U08, 123, [0:0], "1", "2"
+ knock_sens09 = bits, U08, 124, [0:0], "1", "2"
+ knock_sens10 = bits, U08, 125, [0:0], "1", "2"
+ knock_sens11 = bits, U08, 126, [0:0], "1", "2"
+ knock_sens12 = bits, U08, 127, [0:0], "1", "2"
+ knock_sens13 = bits, U08, 128, [0:0], "1", "2"
+ knock_sens14 = bits, U08, 129, [0:0], "1", "2"
+ knock_sens15 = bits, U08, 130, [0:0], "1", "2"
+ knock_sens16 = bits, U08, 131, [0:0], "1", "2"
+ s16_debug = scalar, S16, 132, "", 1, 0.00000, -32768, +32767, 0
+ u08_debug134 = scalar, U08, 134, "", 1, 0.00000, 0, +255, 0
+ AE_options = bits, U08, 135, [0:0], "Time-based AE", "Accel-pump AE"
+ accel_blend_percent = scalar, S16, 136, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold = scalar, U16, 138, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold = scalar, U16, 140, "kpa/sec", 1, 0, 0, 20000, 0
+ ae_lorpm2 = scalar, U16, 142, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ ae_hirpm2 = scalar, U16, 144, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ accel_blend_percent2 = scalar, S16, 146, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold2 = scalar, U16, 148, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold2 = scalar, U16, 150, "kpa/sec", 1, 0, 0, 20000, 0
+ tpsThresh2 = scalar, S16, 152, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1
+ mapThresh2 = scalar, S16, 154, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0
+ aeEndPW2 = scalar, S16, 156, "%ReqFuel", 1, 0.00000, 0.00, 100, 0
+ taeColdA2 = scalar, U08, 158, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ taeColdM2 = scalar, U08, 159, "%", 1.00000, 0.00000, 100, 255.00, 0
+ taeTime2 = scalar, U08, 160, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ taeTime_events2 = scalar, U08, 160, "events", 1, 0.00000, 0.00, 255, 0
+ tdePct2 = scalar, U08, 161, "", 1.00000, 0.00000, 50.00, 100.00, 0
+ aeTaperTime2 = scalar, U08, 162, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ aeTaperTime_events2= scalar, U08, 162, "events", 1, 0.00000, 0.00, 255, 0
+ tpsProportion2 = scalar, U08, 163, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ accel_CLT_multiplier2 = scalar, S16, 164, "%", 0.1, 0, 100, 255, 1
+ tc_led_out = bits, U08, 166, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+;gap
+;gap
+;gap
+ accel_CLT_multiplier = scalar, S16, 206, "%", 0.1, 0, 100, 255, 1
+ cl_idle_timing_target_deltas = array, S16, 208, [8], "rpm", 1, 0, -1000, 1000, 0
+ cl_idle_timing_advance_deltas = array, S16, 224, [8], "deg", 0.1, 0, -90, 90, 0
+
+ ltt_opt_on = bits, U08, 240, [0:0], "Off", "On"
+ ltt_opt_mode = bits, U08, 240, [1:1], "Timed", "Button"
+ ltt_opt_feedback = bits, U08, 240, [2:2], "Off", "On"
+ ltt_but_in = bits, U08, 241, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ltt_int = scalar, U08, 242, "min", 1, 0.00000, 5, 30, 0
+ ltt_led_out = bits, U08, 243, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ltt_thresh = scalar, U16, 244, "%", 0.1, 0.0, 10, 65535, 1
+
+ tc_minmap = scalar, S16, 246, "kPa", 0.10000, 0.00000, 0, 100, 1
+ can_bcast1_on = bits, U08, 248, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 248, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 248, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 248, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 248, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 248, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 248, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 248, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 249, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 249, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 249, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 250, "ms", 0.128, 0.00000, 50, 1000,1
+
+ timedout1_in = bits, U08, 252, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "Same as launch", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ timedout1_out = bits, U08, 253, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ timedout1_offdelay = scalar, U16, 254, "s", 0.001, 0, 0, 15, 3
+ tstop_out = bits, U08, 256, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ can_enable_on = bits, U08, 257, [0:0], "Off", "On"
+ tstop_delay = scalar, U16, 258, "s", 0.001, 0, 0, 15, 3
+ tstop_hold = scalar, U16, 260, "s", 0.001, 0, 0, 15, 3
+ oddfireangs1 = scalar, U16, 262, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 264, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 266, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 268, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 270, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 272, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+
+ cel_opt_on = bits, U08, 274, [0:0], "Off", "On"
+ cel_opt_stat = bits, U08, 274, [1:3], "Off", "MAP", "MAT", "CLT", "TPS", "Batt", "EGO", "EGT1"
+ cel_opt_adc = bits, U08, 274, [5:5], "Fluctuation", "ADC counts"
+ cel_opt_flash = bits, U08, 274, [6:6], "Solid", "Flash-codes"
+ cel_opt_when = bits, U08, 274, [7:7], "Off", "On"
+
+ cel_port = bits, U08, 275, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ afr_min = scalar, U08, 276, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_max = scalar, U08, 277, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_var_upper = scalar, U16, 278, "", 1, 0, 0.00, 65535, 0
+ afr_var_lower = scalar, U16, 280, "", 1, 0, 0.00, 65535, 0
+ map_minadc = scalar, U16, 282, "", 1, 0, 0.00, 1023, 0
+ map_maxadc = scalar, U16, 284, "", 1, 0, 0.00, 1023, 0
+ map_var_upper = scalar, U16, 286, "", 1, 0, 0.00, 65535, 0
+ mat_minadc = scalar, U16, 288, "", 1, 0, 0.00, 1023, 0
+ mat_maxadc = scalar, U16, 290, "", 1, 0, 0.00, 1023, 0
+ mat_var_upper = scalar, U16, 292, "", 1, 0, 0.00, 65535, 0
+ clt_minadc = scalar, U16, 294, "", 1, 0, 0.00, 1023, 0
+ clt_maxadc = scalar, U16, 296, "", 1, 0, 0.00, 1023, 0
+ clt_var_upper = scalar, U16, 298, "", 1, 0, 0.00, 65535, 0
+ tps_minadc = scalar, U16, 300, "", 1, 0, 0.00, 1023, 0
+ tps_maxadc = scalar, U16, 302, "", 1, 0, 0.00, 1023, 0
+ tps_var_upper = scalar, U16, 304, "", 1, 0, 0.00, 65535, 0
+ batt_minv = scalar, U08, 306, "", 0.1, 0, 7.00, 23.0, 1
+ batt_maxv = scalar, U08, 307, "", 0.1, 0, 7.00, 23.0, 1
+ batt_var_upper = scalar, U16, 308, "", 1, 0, 0.00, 65535, 0
+ cel_opt2_map = bits, U08, 310, [0:0], "Off", "On"
+ cel_opt2_mat = bits, U08, 310, [1:1], "Off", "On"
+ cel_opt2_clt = bits, U08, 310, [2:2], "Off", "On"
+ cel_opt2_tps = bits, U08, 310, [3:3], "Off", "On"
+ cel_opt2_batt = bits, U08, 310, [4:4], "Off", "On"
+ cel_opt2_afr0 = bits, U08, 310, [5:5], "Off", "On"
+ cel_opt2_sync = bits, U08, 310, [6:6], "Off", "On"
+ cel_opt2_egt = bits, U08, 310, [7:7], "Off", "On"
+ cel_action1_map = bits, U08, 311, [0:0], "Off", "On"
+ cel_action1_mat = bits, U08, 311, [1:1], "Off", "On"
+ cel_action1_clt = bits, U08, 311, [2:2], "Off", "On"
+ cel_action1_tps = bits, U08, 311, [3:3], "Off", "On"
+ cel_action1_batt= bits, U08, 311, [4:4], "Off", "On"
+ cel_action1_ego = bits, U08, 311, [5:5], "Off", "On"
+ cel_action1_sync = bits, U08, 311, [6:6], "Off", "On"
+ cel_action1_map_an = bits, U08, 311, [7:7], "Off", "On"
+#if CELSIUS
+ cel_clt_cold = scalar, S16, 312, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_clt_cold = scalar, S16, 312, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_warmtime = scalar, U16, 316, "mins", 0.01666, 9, 1, 20,1
+#if CELSIUS
+ cel_mat_default = scalar, S16, 318, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_mat_default = scalar, S16, 318, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_revlim = scalar, S16, 320, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ cel_overboost = scalar, S16, 322, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ cel_boost_duty = scalar, U08, 324, "%", 1, 0.00000, 0, 100, 0
+ cel_boost_duty2 = scalar, U08, 325, "%", 1, 0.00000, 0, 100, 0
+ cel_synctol = scalar, U08, 326, "", 1, 0.00000, 0, 100, 0
+ cel_opt3_flex = bits, U08, 327, [0:0], "Off", "On"
+
+ cel_retard = scalar, S16, 328, "deg", 0.10000, 0.00000,0.00, 10.00, 1
+ map_var_lower = scalar, U16, 330, "", 1, 0, 0.00, 65535, 0
+#if CELSIUS
+ egt_minvalid = scalar, S16, 332, "°C", 0.05555, -320.000,-40.00, 1500, 1
+ egt_maxvalid = scalar, S16, 334, "°C", 0.05555, -320.000,-40.00, 1500, 1
+#else
+ egt_minvalid = scalar, S16, 332, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+ egt_maxvalid = scalar, S16, 334, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+#endif
+ egt_var_upper = scalar, U16, 336, "", 1, 0, 0.00, 65535, 0
+ egt_var_lower = scalar, U16, 338, "", 1, 0, 0.00, 65535, 0
+ cel_runtime = scalar, U08, 340, "s", 1, 0.00000, 5, 100, 0
+ cel_action2_flex = bits, U08, 341, [0:0], "Off", "On"
+ cel_action2_egt = bits, U08, 341, [1:1], "Off", "On"
+
+ blend_opt1 = bits, U08, 342, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt2 = bits, U08, 343, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt3 = bits, U08, 344, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt4 = bits, U08, 345, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt5 = bits, U08, 346, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt6 = bits, U08, 347, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt7 = bits, U08, 348, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+;gap in case of more blend curve options
+ fp_opt_mode = bits, U08, 350, [0:1], "On/Off", "Open-Loop PWM", "Closed-Loop PWM", "INVALID"
+ fp_opt_reg = bits, U08, 350, [4:5], "Vac referenced", "Fixed pressure", "Custom correction", "INVALID"
+ fp_opt_inv = bits, U08, 350, [6:6], "Normal", "Inverted"
+ fp_opt_safety = bits, U08, 350, [7:7], "Off", "On"
+ fp_out1 = bits, U08, 351, [0:5], "Fuel Pump", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ rail_pressure_psig = scalar, U16, 352, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ rail_pressure_kpag = scalar, U16, 352, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_Kp = scalar, U16, 354, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Ki = scalar, U16, 356, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Kd = scalar, U16, 358, "%", 0.1, 0.00000, 0, 200, 1
+ fp_prime_duty = scalar, U08, 360, "%", 0.392, 0.00000, 0, 100, 1
+ fp_press_in = bits, U08, 361, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ fp_press_type = bits, U08, 361, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+ fp_freq = bits, U08, 362, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+;spare
+ alternator_opt_mode = bits, U08, 364, [0:2], "Off", "On-Off", "Open-loop frequency", "Open-loop duty", "Closed-loop field control", "High-speed feedback field control", "INVALID", "INVALID"
+; possible application specific option bits
+ alternator_freq = bits, U08, 365, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ alternator_controlout = bits, U08, 366, [0:4], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_control_inv = bits, U08, 366, [6:6], "Normal", "Inverted"
+ alternator_lampout = bits, U08, 367, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ alternator_Kp = scalar, U16, 368, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Ki = scalar, U16, 370, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Kd = scalar, U16, 372, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_startdelay = scalar, U08, 374, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_ramptime = scalar, U08, 375, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_wot = scalar, U16, 376, "%", 0.1, 0.00000, 0, 110, 1
+ alternator_wotv = scalar, U08, 378, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_overrv = scalar, U08, 379, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_wottimeout = scalar, U08, 380, "s", 1, 0.00000, 0, 30, 0
+ alternator_tempin = bits, U08, 381, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ alternator_freq_monin = bits, U08, 382, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_moninv = bits, U08, 382, [6:6], "Normal", "Inverted"
+ alternator_targv = scalar, U08, 383, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_ctl_ms = scalar, U16, 384, "ms", 0.128, 0.00000, 10, 500, 0
+ fp_ctl_ms = scalar, U16, 386, "ms", 0.128, 0.00000, 10, 500, 0
+ alternator_freq_currin = bits, U08, 388, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_currinv = bits, U08, 388, [6:6], "Normal", "Inverted"
+ alternator_chargetime = scalar, U08, 389, "min", 1, 0.00000, 0, 30, 0
+ alternator_targvr = scalar, U08, 390, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_diff = scalar, U08, 391, "V", 0.1, 0.00000, 0.1, 3.0, 1
+ alternator_maxload = scalar, U08, 392, "%", 1, 0.00000, 75, 101, 0
+ hpte_opt_on = bits, U08, 393, [0:0], "Off","On"
+ hpte_load = scalar, S16, 394, "%", 0.10000, 0, 0, {loadhigh}, 1
+ hpte_rpm = scalar, U16, 396, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_opt_pins = bits, U08, 398, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ shiftlight_opt_gear = bits, U08, 398, [7:7], "Off", "On"
+ fc_trans_time_ret = scalar, U08, 399, "s", 0.1, 0, 0.5, 5.0, 1
+ shiftlight_limit1 = scalar, U16, 400, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit2 = scalar, U16, 402, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit3 = scalar, U16, 404, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit4 = scalar, U16, 406, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit5 = scalar, U16, 408, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit6 = scalar, U16, 410, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ltt_samp_time = scalar, U08, 412, "s", 1, 0, 0, 255, 0
+ ltt_agg = scalar, U08, 413, "", 1, 0, 10, 255, 0
+ oilpress_in = bits, U08, 414, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ oilpress_out = bits, U08, 415, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelcalctime = scalar, U16, 416, "ms", 0.128, 0, 100, 8000, 0
+ alternator_sensitivity = scalar, U16, 420, "", 0.1, 0.00000, 0, 20, 0
+ idleminvss = scalar, U16, 422, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0
+
+ flex_baseline = scalar, U16, 424, "%", 0.1, 0.00000, 0, 100,1
+ fc_transition_time = scalar, U08, 426, "s", 0.1, 0, 0.5, 5.0, 1
+ fc_ae_time = scalar, U08, 427, "s", 0.01, 0, 0, 0.5, 2
+ fc_timing = scalar, S16, 428, "deg", 0.10000, 0.00000, -90.0, 180.00, 2
+ fc_ae_pct = scalar, U08, 430, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ fp_off_duty = scalar, U08, 431, "%", 0.392, 0.00000, 0, 100, 1
+ fp_min_duty = scalar, U08, 432, "%", 0.392, 0.00000, 0, 100, 1
+ fp_max_duty = scalar, U08, 433, "%", 0.392, 0.00000, 0, 100, 1
+
+ tcs_in = bits, U08, 434, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tcs_moves = scalar, U08, 435, "", 1, 0, 1, 50, 0
+ tcs_offtime = scalar, U16, 436, "s", 0.001, 0, 0.005, 0.100, 3
+ tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.050, 0.200, 3
+
+ boost_geartarg1 = scalar, S16, 440, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg2 = scalar, S16, 442, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg3 = scalar, S16, 444, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg4 = scalar, S16, 446, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg5 = scalar, S16, 448, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg6 = scalar, S16, 450, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ fp_drop_psig = scalar, U16, 452, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ fp_drop_kpag = scalar, U16, 452, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_drop_load = scalar, U16, 454, "%", 0.1, 0, 0, {loadhigh}, 1
+ fp_drop_rpm = scalar, U16, 456, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fp_drop_time = scalar, U16, 458, "s", 0.001,0, 0, 10, 2
+
+ pwm_opt_load_a_offset = scalar, U16, 460, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_b_offset = scalar, U16, 462, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_c_offset = scalar, U16, 464, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_d_offset = scalar, U16, 466, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_e_offset = scalar, U16, 468, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_f_offset = scalar, U16, 470, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_a_size = scalar, U08, 472, "", 1, 0, 0, 255, 0
+ pwm_opt_load_b_size = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ pwm_opt_load_c_size = scalar, U08, 474, "", 1, 0, 0, 255, 0
+ pwm_opt_load_d_size = scalar, U08, 475, "", 1, 0, 0, 255, 0
+ pwm_opt_load_e_size = scalar, U08, 476, "", 1, 0, 0, 255, 0
+ pwm_opt_load_f_size = scalar, U08, 477, "", 1, 0, 0, 255, 0
+
+ can_gps_id = scalar, U08, 478, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_gps_table = scalar, U08, 479, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_gps_offset = scalar, U16, 480, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ spkadj_max = scalar, S16, 482, "deg", 0.10000, 0.00000,0, 45, 1
+ spkadj_min = scalar, S16, 484, "deg", 0.10000, 0.00000,-45, 0, 1
+
+ can_outpc_msg = scalar, U16, 486, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 488, [7:7], "Off", "On"
+ can_outpc_gp00 = bits, U08, 488, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp01 = bits, U08, 489, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp02 = bits, U08, 490, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp03 = bits, U08, 491, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp04 = bits, U08, 492, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp05 = bits, U08, 493, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp06 = bits, U08, 494, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp07 = bits, U08, 495, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp08 = bits, U08, 496, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp09 = bits, U08, 497, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp10 = bits, U08, 498, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp11 = bits, U08, 499, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp12 = bits, U08, 500, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp13 = bits, U08, 501, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp14 = bits, U08, 502, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp15 = bits, U08, 503, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp16 = bits, U08, 504, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp17 = bits, U08, 505, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp18 = bits, U08, 506, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp19 = bits, U08, 507, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp20 = bits, U08, 508, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp21 = bits, U08, 509, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp22 = bits, U08, 510, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp23 = bits, U08, 511, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp24 = bits, U08, 512, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp25 = bits, U08, 513, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp26 = bits, U08, 514, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp27 = bits, U08, 515, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp28 = bits, U08, 516, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp29 = bits, U08, 517, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp30 = bits, U08, 518, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp31 = bits, U08, 519, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp32 = bits, U08, 520, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp33 = bits, U08, 521, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp34 = bits, U08, 522, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp35 = bits, U08, 523, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp36 = bits, U08, 524, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp37 = bits, U08, 525, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp38 = bits, U08, 526, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp39 = bits, U08, 527, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp40 = bits, U08, 528, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp41 = bits, U08, 529, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp42 = bits, U08, 530, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp43 = bits, U08, 531, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp44 = bits, U08, 532, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp45 = bits, U08, 533, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp46 = bits, U08, 534, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp47 = bits, U08, 535, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp48 = bits, U08, 536, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp49 = bits, U08, 537, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp50 = bits, U08, 538, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp51 = bits, U08, 539, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp52 = bits, U08, 540, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp53 = bits, U08, 541, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp54 = bits, U08, 542, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp55 = bits, U08, 543, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp56 = bits, U08, 544, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp57 = bits, U08, 545, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp58 = bits, U08, 546, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp59 = bits, U08, 547, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp60 = bits, U08, 548, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp61 = bits, U08, 549, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp62 = bits, U08, 550, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp63 = bits, U08, 551, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+
+ can_rcv_opt_on = bits, U08, 552, [0:0], "Off", "On"
+; engine_state_accel_fast_thresh = scalar, S16, 553, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_accel_slow_thresh = scalar, S16, 555, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_decel_fast_thresh = scalar, S16, 557, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_decel_slow_thresh = scalar, S16, 559, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_tps_closed_thresh = scalar, S16, 561, "%", 0.1, 0, 0, 5, 1
+; engine_state_overrun_map_thresh = scalar, S16, 563, "kPa", 0.1, 0, 0, 100, 1
+; engine_state_overrun_rpm_thresh = scalar, U16, 565, "rpm", 1, 0, 0, {rpmhigh}, 0
+
+ vss_samp_int = scalar, U16, 568, "ms", 0.05, 0, 10, 50, 2
+
+; somewhat big gap here
+; ###### ### ##### ##### # ######
+; # # # # # # # # # # #
+; # # # # # # # # #
+; ###### # # #### # #### # # ######
+; # # # # # # # ####### #
+; # # # # # # # # # #
+; ###### ### ##### ##### # # #
+;
+; big pad
+ dummyfield = bits, U08, 637, [0:0], "",""
+
+ staged_out2 = bits, U08, 638, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out2_inv = bits, U08, 638, [7:7], "Normal", "Inverted"
+ staged_out2_time = scalar, U08, 639, "s", 0.1, 0, 0, 1, 1
+ u16_debug640 = scalar, U16, 640, "", 1, 0.00000, 0, 65536, 0
+ staged_out1 = bits, U08, 642, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out1_inv = bits, U08, 642, [7:7], "Normal", "Inverted"
+ log_style4_opt = bits, U08, 643, [0:1], "RPM", "TPS", "MAP", "INVALID"
+ log_trig_rpm = scalar, U16, 644, "RPM", 1, 0, 0, {rpmhigh}, 0
+ log_trig_tps = scalar, U16, 646, "%", 0.1, 0, 0, 100, 0
+
+ baudhigh = scalar, U32, 648, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ fuelCorr_default = scalar, U08, 652, "%", 1.00000, 0.00000, 50, 255, 0
+ sdpulse_out = bits, U08, 653, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelSpkDel_default = scalar, S16, 654, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ map_phase_thresh = scalar, S16, 656, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ flex_pct0 = scalar, U16, 658, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 660, "%", 0.1, 0.00000, 0, 100,1
+
+;generic sensors
+ sensor01_source = bits, U08, 662, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor02_source = bits, U08, 663, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor03_source = bits, U08, 664, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor04_source = bits, U08, 665, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor05_source = bits, U08, 666, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor06_source = bits, U08, 667, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor07_source = bits, U08, 668, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor08_source = bits, U08, 669, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor09_source = bits, U08, 670, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor10_source = bits, U08, 671, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor11_source = bits, U08, 672, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor12_source = bits, U08, 673, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor13_source = bits, U08, 674, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor14_source = bits, U08, 675, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor15_source = bits, U08, 676, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor16_source = bits, U08, 677, [0:4], "Off", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor01_trans = bits, U08, 678, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor02_trans = bits, U08, 679, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor03_trans = bits, U08, 680, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor04_trans = bits, U08, 681, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor05_trans = bits, U08, 682, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor06_trans = bits, U08, 683, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor07_trans = bits, U08, 684, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor08_trans = bits, U08, 685, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor09_trans = bits, U08, 686, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor10_trans = bits, U08, 687, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor11_trans = bits, U08, 688, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor12_trans = bits, U08, 689, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor13_trans = bits, U08, 690, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor14_trans = bits, U08, 691, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor15_trans = bits, U08, 692, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor16_trans = bits, U08, 693, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor01_val0 = scalar, S16, 694, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_val0 = scalar, S16, 696, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_val0 = scalar, S16, 698, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_val0 = scalar, S16, 700, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_val0 = scalar, S16, 702, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_val0 = scalar, S16, 704, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_val0 = scalar, S16, 706, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_val0 = scalar, S16, 708, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_val0 = scalar, S16, 710, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_val0 = scalar, S16, 712, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_val0 = scalar, S16, 714, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+
+ sensor12_val0 = scalar, S16, 716, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_val0 = scalar, S16, 718, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_val0 = scalar, S16, 720, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_val0 = scalar, S16, 722, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_val0 = scalar, S16, 724, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01_max = scalar, S16, 726, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_max = scalar, S16, 728, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_max = scalar, S16, 730, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_max = scalar, S16, 732, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_max = scalar, S16, 734, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_max = scalar, S16, 736, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_max = scalar, S16, 738, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_max = scalar, S16, 740, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_max = scalar, S16, 742, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_max = scalar, S16, 744, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_max = scalar, S16, 746, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor12_max = scalar, S16, 748, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_max = scalar, S16, 750, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_max = scalar, S16, 752, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_max = scalar, S16, 754, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_max = scalar, S16, 756, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01LF = scalar, U08, 758, "", 1,0,10,100,0
+ sensor02LF = scalar, U08, 759, "", 1,0,10,100,0
+ sensor03LF = scalar, U08, 760, "", 1,0,10,100,0
+ sensor04LF = scalar, U08, 761, "", 1,0,10,100,0
+ sensor05LF = scalar, U08, 762, "", 1,0,10,100,0
+ sensor06LF = scalar, U08, 763, "", 1,0,10,100,0
+ sensor07LF = scalar, U08, 764, "", 1,0,10,100,0
+ sensor08LF = scalar, U08, 765, "", 1,0,10,100,0
+ sensor09LF = scalar, U08, 766, "", 1,0,10,100,0
+ sensor10LF = scalar, U08, 767, "", 1,0,10,100,0
+ sensor11LF = scalar, U08, 768, "", 1,0,10,100,0
+ sensor12LF = scalar, U08, 769, "", 1,0,10,100,0
+ sensor13LF = scalar, U08, 770, "", 1,0,10,100,0
+ sensor14LF = scalar, U08, 771, "", 1,0,10,100,0
+ sensor15LF = scalar, U08, 772, "", 1,0,10,100,0
+ sensor16LF = scalar, U08, 773, "", 1,0,10,100,0
+ sensor_temp = bits, U08, 774, [0:0], "degF", "degC"
+;pad
+#if PW_4X
+ injOpen1 = scalar, U16, 776, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ injOpen1 = scalar, U16, 776, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ shift_cut_on = bits, U08, 812, [0:0], "Off", "On"
+ shift_cut_auto = bits, U08, 812, [1:1], "Button", "Auto"
+ shift_cut_gear = bits, U08, 812, [2:2], "Off", "On"
+ shift_cut_fuel = bits, U08, 812, [3:3], "Off", "On"
+ shift_cut_in = bits, U08, 813, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_out = bits, U08, 814, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_rpm = scalar, U16, 815, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 817, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 819, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 820, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add12 = scalar, U08, 821, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add23 = scalar, U08, 822, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add34 = scalar, U08, 823, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add45 = scalar, U08, 824, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add56 = scalar, U08, 825, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 826, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_rpm12 = scalar, U16, 827, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm23 = scalar, U16, 829, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm34 = scalar, U16, 831, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm45 = scalar, U16, 833, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm56 = scalar, U16, 835, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_reshift= scalar, U08, 837, "s", 0.01024, 0, 0, 2.55, 2
+;open-loop PWM. all arrays
+ pwm_opt_on_a = bits, U08, 838, [0:0], "Off", "On"
+ pwm_opt_freq_a = bits, U08, 838, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_a = bits, U08, 838, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ pwm_opt_on_b = bits, U08, 839, [0:0], "Off", "On"
+ pwm_opt_freq_b = bits, U08, 839, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_b = bits, U08, 839, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_c = bits, U08, 840, [0:0], "Off", "On"
+ pwm_opt_freq_c = bits, U08, 840, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_c = bits, U08, 840, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_d = bits, U08, 841, [0:0], "Off", "On"
+ pwm_opt_freq_d = bits, U08, 841, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_d = bits, U08, 841, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_e = bits, U08, 842, [0:0], "Off", "On"
+ pwm_opt_freq_e = bits, U08, 842, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_e = bits, U08, 842, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_f = bits, U08, 843, [0:0], "Off", "On"
+ pwm_opt_freq_f = bits, U08, 843, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_f = bits, U08, 843, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ pwm_opt2_a = bits, U08, 844, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_b = bits, U08, 845, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_c = bits, U08, 846, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_d = bits, U08, 847, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_e = bits, U08, 848, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_f = bits, U08, 849, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_onabove_a = scalar, U08, 850, "%", 1, 0, 0, 100, 0
+ pwm_onabove_b = scalar, U08, 851, "%", 1, 0, 0, 100, 0
+ pwm_onabove_c = scalar, U08, 852, "%", 1, 0, 0, 100, 0
+ pwm_onabove_d = scalar, U08, 853, "%", 1, 0, 0, 100, 0
+ pwm_onabove_e = scalar, U08, 854, "%", 1, 0, 0, 100, 0
+ pwm_onabove_f = scalar, U08, 855, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_a = scalar, U08, 856, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_b = scalar, U08, 857, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_c = scalar, U08, 858, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_d = scalar, U08, 859, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_e = scalar, U08, 860, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_f = scalar, U08, 861, "%", 1, 0, 0, 100, 0
+
+ dualfuel_sw_on = bits, U08, 862, [0:0], "Off", "On"
+ dualfuel_sw_fuel = bits,U08, 862, [1:1], "Off", "On"
+ dualfuel_sw_spk = bits, U08, 862, [2:2], "Off", "On"
+ dualfuel_sw_afr = bits, U08, 862, [3:3], "Off", "On"
+ dualfuel_sw_rf = bits, U08, 862, [4:4], "Off", "On"
+ dualfuel_sw_stoich=bits,U08, 862, [5:5], "Off", "On"
+ dualfuel_sw_wue = bits, U08, 862, [6:6], "Off", "On"
+ dualfuel_sw_ase = bits, U08, 862, [7:7], "Off", "On"
+ dualfuel_sw2_prime=bits,U08, 863, [0:0], "Off", "On"
+ dualfuel_sw2_crank=bits,U08, 863, [1:1], "Off", "On"
+ dualfuel_sw2_injp =bits,U08, 863, [2:2], "Off", "On"
+ dualfuel_sw2_smpw =bits,U08, 863, [3:3], "Off", "On"
+ dualfuel_sw2_ob =bits ,U08, 863, [4:4], "Off", "On"
+ dualfuel_sw2_boosw=bits,U08, 863, [5:5], "Off", "On"
+ dualfuel_sw2_ae =bits,U08, 863, [6:6], "Off", "On"
+ opentime2_opt1_master = bits, U08, 864, [7:7], "Same", "Individual"
+ opentime2_opt1 = bits, U08, 864, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt2 = bits, U08, 865, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt3 = bits, U08, 866, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt4 = bits, U08, 867, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt5 = bits, U08, 868, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt6 = bits, U08, 869, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt7 = bits, U08, 870, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt8 = bits, U08, 871, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta = bits, U08, 872, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta_pwm= bits, U08, 872, [4:4], "Off", "On"
+ opentime2_optb = bits, U08, 873, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_optb_pwm= bits, U08, 873, [4:4], "Off", "On"
+ opentime2_optb_own= bits, U08, 873, [5:5], "Off", "On"
+
+ opentime2_opt11 = bits, U08, 874, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt12 = bits, U08, 875, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt13 = bits, U08, 876, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt14 = bits, U08, 877, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt15 = bits, U08, 878, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt16 = bits, U08, 879, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt17 = bits, U08, 880, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt18 = bits, U08, 881, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt1_master = bits, U08, 864, [7:7], "Off", "On"
+ smallpw2_opt1 = bits, U08, 882, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt2 = bits, U08, 883, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt3 = bits, U08, 884, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt4 = bits, U08, 885, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt5 = bits, U08, 886, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt6 = bits, U08, 887, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt7 = bits, U08, 888, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt8 = bits, U08, 889, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opta = bits, U08, 890, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_optb = bits, U08, 891, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt11 = bits, U08, 892, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt12 = bits, U08, 893, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt13 = bits, U08, 894, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt14 = bits, U08, 895, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt15 = bits, U08, 896, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt16 = bits, U08, 897, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt17 = bits, U08, 898, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt18 = bits, U08, 899, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ dualfuel_pin = bits, U08, 900, [0:4], "INVALID", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ dualfuel_opt_temp= bits, U08, 901, [0:0], "Off", "On"
+ dualfuel_opt_press=bits, U08, 901, [1:1], "Off", "On"
+ dualfuel_opt_mode = bits,U08, 901, [2:3], "Switching", "Dual table", "Flex blend", "INVALID"
+ dualfuel_opt_out = bits,U08, 901, [4:4], "Shared outputs+relay", "Different outputs"
+
+#if PW_4X
+ inj2Open1 = scalar, U16, 902, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+
+ inj2Open13 = scalar, U16, 926, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open17 = scalar, U16, 934, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ inj2Open1 = scalar, U16, 902, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open13 = scalar, U16, 926, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+
+ inj2Open17 = scalar, U16, 934, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ inj2PwmT = scalar, U08, 938, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd = scalar, U08, 939, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP = scalar, U08, 940, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmT2 = scalar, U08, 941, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd2 = scalar, U08, 942, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP2 = scalar, U08, 943, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ dualfuel_temp_sens = bits, U08, 944, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_sens = bits, U08, 945, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_type = bits, U08, 945, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+; Leave these unused variables matching MS2 in case trans controller erroneously adjusts them
+; FuelAdj 946
+; SpkAdj, 948
+; IdleAdj, 950
+; SprAdj; 952
+
+ pwm_opt_curve_a = bits, U08, 954, [0:0], "Table", "Curve"
+ pwm_opt_curve_b = bits, U08, 954, [1:1], "Table", "Curve"
+ pwm_opt_curve_c = bits, U08, 954, [2:2], "Table", "Curve"
+ pwm_opt_curve_d = bits, U08, 954, [3:3], "Table", "Curve"
+ pwm_opt_curve_e = bits, U08, 954, [4:4], "Table", "Curve"
+ pwm_opt_curve_f = bits, U08, 954, [5:5], "Table", "Curve"
+;gap
+ ITB_load_mappoint = scalar, S16, 956, "% baro", 0.1000, 0, 30, 100.0, 1
+ ITB_load_idletpsthresh = scalar, S16, 958, "%", 0.1000, 0, -10, 100, 0
+ idle_voltage_comp_voltage = array, S16, 960, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_delta = array, S16, 972, [6], "%", 0.392, 0.00000, -20, 20, 1
+ ac_idleup_max_rpm = scalar, U16, 984, "rpm", 1, 0, 1000, {rpmhigh}, 0
+ llstg_in = bits, U08, 986, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ llstg_out = bits, U08, 987, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ kickdelay = scalar, U16, 988, "ms", 0.001,0.00000,0.1,35.00,3
+ log_trig_map = scalar, S16, 990, "%", 0.1, 0, 0, {loadhigh}, 0
+
+ page = 3 ; 8
+ boost_ctl_load_targets = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if PW_4X
+ primePWTable = array, S16, 256, [ 10], "ms", 0.40000, 0.00000, 0.00, 260.00, 1 ; * ( 20 bytes)
+#else
+ primePWTable = array, S16, 256, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+#endif
+ crankPctTable =array, U16, 276, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable =array, S16, 296, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable =array, S16, 316, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+
+#if CELSIUS
+ matTemps =array, S16, 336, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps =array, S16, 336, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard =array, U08, 348, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 354, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 378, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 402, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAESOCKPAbins = array, U16, 426, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAEBAWC = array, U08, 450, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 462, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 474, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 486, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 498, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 510, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+
+ ; Supplemental corrections for barometer and MAT.
+ baroCorrVals = array , S16, 522, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 540, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 540, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+
+#if CELSIUS
+ temp_table_p5 = array, S16, 558, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 558, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+ pwmidle_target_rpms = array, U16, 626, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 642, [8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ;
+ #else
+ pwmidle_clt_temps = array, S16, 642, [8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+;gap 20 bytes
+#if CELSIUS
+ RevLimLookup = array , S16, 678, [ 8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 678, [ 8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 694, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes
+;gap 24 bytes
+ RotarySplitTable = array, S16, 734, [8x8], "deg", 0.10000, 0.00000, -60, 20, 1
+ RotarySplitLoad = array, U16, 862, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, {loadhigh}, 0
+ RotarySplitRPM = array, U16, 878, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+
+ NoiseFilterRpm = array, U16, 894, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 902, [ 4], "usec", 1.0, 0.00000, 0.00, 43000, 1
+
+ VariableLagTPSBins = array, U08, 910, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 914, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 918, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 918, [4], "steps", 1, 0, 0, 512, 0
+
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ matclt_pct = array, U16, 934, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 946, [6], "load*rpm", 100, 0, 0, 6553500, 0
+ ;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 958, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 960, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 962, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 962, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;spare 10 bytes
+;end user defined
+;pad1
+ baroCorrDelta = array , S16, 974, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 992, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+; space
+
+page = 4 ; 9 - injector channel trims
+ inj_trima = array , S08, 000, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimb = array , S08, 036, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimc = array , S08, 072, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimd = array , S08, 108, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trime = array , S08, 144, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimf = array , S08, 180, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimg = array , S08, 216, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimh = array , S08, 252, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimi = array , S08, 288, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimj = array , S08, 324, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimk = array , S08, 360, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_triml = array , S08, 396, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimm = array , S08, 432, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimn = array , S08, 468, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimo = array , S08, 504, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimp = array , S08, 540, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+
+ inj_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ inj_trim_load =array, U16, 588, [6], { bitStringValue( algorithmUnits , algorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1
+ inj_timing = array, S16, 600, [12x12], "deg", 0.10000, 0.00000, -360.0, 720.0, 1
+ inj_timing_rpm = array, U16, 888, [12], "rpm", 1, 0, 0, {rpmhigh}, 0
+ inj_timing_load = array, S16, 912, [12], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_load = array, U16, 936, [6], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_rpm = array, U16, 948, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if LAMBDA
+ maxafr1_diff = array, U08, 960, [6x6], "Lambda", 0.006803, 0.00000, 0.00, 0.14, 3
+#else
+ maxafr1_diff = array, U08, 960, [6x6], "AFR", 0.10000, 0.00000, 0.00, 2.00, 1
+#endif
+ dwellrpm_dwell = array, U08, 996, [6], "ms", 0.1, 0, 1, 8, 1
+ dwellrpm_rpm = array, U16, 1002, [6], "RPM", 1, 0, 0, 15000, 0
+
+page = 5 ; 10
+ boost_ctl_load_targets2 = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins2=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins2=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets2 = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins2=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins2=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_timed_pct = array, U08, 256, [ 6 ], "%", 1, 0, 0, 100, 0
+ boost_timed_time= array, U16, 262, [ 6 ], "s", 0.001, 0, 0, 15, 1
+ boostvss_duty = array, U08, 274, [ 6 ], "%", 1, 0, 0, 100, 0
+ boostvss_target = array, U16, 280, [ 6 ], "kPa", 0.1, 0, 0, {loadhigh}, 1
+ boostvss_speed = array, U16, 292, [ 6 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ map_sample_rpms = array, U16, 304, [ 8 ], "rpm", 1, 0, 0, {rpmhigh}, 0
+ map_sample_timing = array, S16, 320, [ 8 ], "deg", 0.10000, 0, -360, 720, 1
+#if LAMBDA
+ afrTable1 = array , U08, 336, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 480, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 336, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 480, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 624, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+;gap 8 bytes
+ iacstepTable = array , S16, 642, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+ arpm_table1 = array , U16, 662, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 686, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 710, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ amap_table2 = array , S16, 734, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ tempTable = array , S16, 758, [ 10], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE ; temp_table
+ #else
+ tempTable = array , S16, 758, [ 10], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ #endif
+;gap
+ dwellvolts = array , U08, 794, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 800, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ cold_adv_table = array , S16, 806, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ ipwmTable = array , S16, 826, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+;846
+ opentimepct0 = array, U16, 846, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct1 = array, U16, 858, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct2 = array, U16, 870, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct3 = array, U16, 882, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimev = array, U16, 894, [ 6], "V", 0.100, 0.00000, 6, 19.2, 1
+
+#if PW_4X
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+#else
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+#endif
+
+ waterinj_rpm = array, U16, 966, [ 8], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ waterinj_map = array, U16, 982, [ 4], "kPa", 0.1, 0.00000, 0.00, {loadhigh}, 0
+ waterinj_duty = array, U08, 990, [8 x 4], "%", 1, 0, 0, 100, 0
+
+page = 6 ; 11 - spark channel trims
+ spk_trima = array , S08, 000, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimb = array , S08, 036, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimc = array , S08, 072, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimd = array , S08, 108, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trime = array , S08, 144, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimf = array , S08, 180, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimg = array , S08, 216, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimh = array , S08, 252, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimi = array , S08, 288, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimj = array , S08, 324, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimk = array , S08, 360, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_triml = array , S08, 396, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimm = array , S08, 432, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimn = array , S08, 468, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimo = array , S08, 504, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimp = array , S08, 540, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ spk_trim_load = array, U16, 588, [6], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1 ; * (12 bytes)
+ XAcc =array, U16, 600, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauAcc =array, U16, 610, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XDec =array, U16, 620, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauDec =array, U16, 630, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XTrpms =array, U16, 640, [5], "rpm",1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 10 bytes)
+ XClt =array, U16, 650, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ TauClt =array, U16, 670, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+#if CELSIUS
+ XClt_temps = array, S16, 690, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ TauClt_temps = array, S16, 710, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ XClt_temps = array, S16, 690, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ TauClt_temps = array, S16, 710, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ launch_time = array, U16, 730, [10], "s", 0.001, 0, 0, 15, 2
+ launch_retard = array, U16, 750, [10], "deg", 0.1, 0, 0, 30, 1
+;gap (68 bytes)
+; staged tables
+ staged_percents=array, U08, 838, [8x8], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 902, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 918, [8], "%", 0.1, 0, 0, 250, 1
+ MAFFlow = array, U16, 934, [12], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 1
+ MAFCor = array, U08, 958, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+;gap
+ cranktaper_time=array, U16, 994, [6], "s", 0.1, 0, 0, 15, 1
+ cranktaper_timeevents=array,U16, 994, [6], "events", 1, 0, 0, 1000, 0 ; same again, different units
+ cranktaper_pct =array, U16, 1006, [6], "%", 0.1, 0, 0, 500, 0
+
+page = 7 ; 12
+ veTable1 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ; * (512 bytes)
+ veTable2 = array , U16, 512, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+
+page = 8 ; 13
+ advanceTable1 = array , S16, 000, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+ advanceTable2 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+
+page = 9 ; 18
+ veTable3 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable3 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 10 ; 19
+ frpm_table1 = array , U16, 000, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2 = array , U16, 032, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3 = array , U16, 064, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ fmap_table1 = array , S16, 096, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table2 = array , S16, 128, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table3 = array , S16, 160, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+
+ srpm_table1 = array , U16, 192, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 224, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table3 = array , U16, 256, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ smap_table1 = array , S16, 288, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table2 = array , S16, 320, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table3 = array , S16, 352, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ EAEAWCRPMbins2 = array, U16, 384, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAESOCRPMbins2 = array, U16, 408, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAEAWCKPAbins2 = array, U16, 432, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAESOCKPAbins2 = array, U16, 456, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAEBAWC2 = array, U08, 480, [ 12], "%", 1.0000, 0.00000, 0.00, 100.00, 0
+ EAEBSOC2 = array, U08, 492, [ 12], "%", 0.10000, 0.00000, 0.00, 25.5, 1
+ EAEAWN2 = array, U08, 504, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON2 = array, U08, 516, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAEAWW2 = array, U08, 528, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+ EAESOW2 = array, U08, 540, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+
+#if CELSIUS
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ ITB_load_loadvals= array, S16, 600, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 624, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 648, [ 12], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+ idleve_table1 = array, U16, 672, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_table2 = array, U16, 704, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_loads1 = array, S16, 736, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_loads2 = array, S16, 744, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_rpms1 = array, U16, 752, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+ idleve_rpms2 = array, U16, 760, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+;TC
+ tc_perfect_vss = array, U16, 768, [ 10 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_perfect_time = array, U16, 788, [ 10 ], "s", 0.001024, 0.00000, 0, 30, 1
+ tc_react_x = array, U16, 808, [ 4 ], "slip% x 0.01s", 0.1, 0.00000, 0, 10000, 1
+ tc_retard = array, U16, 816, [ 4 ], "deg", 0.1, 0.00000, 0, 30, 1
+ tc_spkcut = array, U08, 824, [ 4 ], "cut%", 1, 0.00000, 0, 100, 0
+ tc_addfuel = array, U08, 828, [ 4 ], "add%", 1, 0.00000, 0, 100, 1
+ tc_nitrous = array, U08, 832, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+ tc_boost = array, U08, 836, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+;840
+ knock_rpms = array, U16, 840, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds= array, U16, 860, [10], "%", 0.1, 0, 0, 100, 1
+ knock_starts= array, S16, 880, [10], "deg", 0.1, 0, -50, 50, 1
+ knock_durations = array, S16, 900, [10], "deg", 0.1, 0, 0, 50, 1
+;920
+ pwmidle_cl_initialvalue_rpms = array, U16, 920, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°C", 0.05555, -320, -40, 230, 0
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°F", 0.10000, 0.000, -40, 450, 0
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 940, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 940, [5 x 5], "steps", 1, 0, 0, 255, 0
+;pad
+#if CELSIUS
+ knock_clts = array, S16, 966, [ 4], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ knock_clts = array, S16, 966, [ 4], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ knock_upscale = array, U16, 974, [4], "%", 0.1, 0, 100, 600, 1
+ tc_perfect_rpm = array, U16, 982, [ 10 ], "rpm", 1.0000, 0.00000, 0, {rpmhigh}, 0
+ tc_boost_duty_delta = array, S08, 1002, [ 4 ], "+/-duty", 1, 0.00000, -100, 100, 0
+
+page = 11 ; 21
+ pwm_rpms_a = array, S16, 0, [6], "rpm",{ pwm_opt_curve_a == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_a_offset) } , { pwm_opt_curve_a == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_loadvals_a = array, S16, 12, [6], "%", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_xaxis_a = array, S16, 0, [12], "", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+
+ pwm_rpms_b = array, S16, 24, [6], "rpm",{ pwm_opt_curve_b == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_b_offset) } , { pwm_opt_curve_b == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_loadvals_b = array, S16, 36, [6], "%", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_xaxis_b = array, S16, 24, [12], "", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+
+ pwm_rpms_c = array, S16, 48, [6], "rpm",{ pwm_opt_curve_c == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_c_offset) } , { pwm_opt_curve_c == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_loadvals_c = array, S16, 60, [6], "%", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_xaxis_c = array, S16, 48, [12], "", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+
+ pwm_rpms_d = array, S16, 72, [6], "rpm",{ pwm_opt_curve_d == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_d_offset) } , { pwm_opt_curve_d == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_loadvals_d = array, S16, 84, [6], "%", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_xaxis_d = array, S16, 72, [12], "", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+
+ pwm_rpms_e = array, S16, 96, [6], "rpm",{ pwm_opt_curve_e == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_e_offset) } , { pwm_opt_curve_e == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_loadvals_e = array, S16, 108,[6], "%", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_xaxis_e = array, S16, 96, [12], "", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+
+ pwm_rpms_f = array, S16, 120, [6], "rpm",{ pwm_opt_curve_f == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_f_offset) } , { pwm_opt_curve_f == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_loadvals_f = array, S16, 132, [6], "%", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_xaxis_f = array, S16, 120, [12], "", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+
+ pwm_duties_a = array, U08, 144, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_a = array, U08, 144, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_b = array, U08, 180, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_b = array, U08, 180, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_c = array, U08, 216, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_c = array, U08, 216, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_d = array, U08, 252, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_d = array, U08, 252, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_e = array, U08, 288, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_e = array, U08, 288, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_f = array, U08, 324, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_f = array, U08, 324, [12], "%", 1, 0, 0, 250, 0
+
+ primePWTable2 = array, S16, 360, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable2 = array, U16, 380, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable2 = array, S16, 400, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable2 = array, S16, 420, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+ wueBins2 = array, U08, 440, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+#if CELSIUS
+ temp_table_p21 = array, S16, 450, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p21 = array, S16, 450, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ frpm_table4 = array , U16, 470, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table4 = array , S16, 502, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ srpm_table4 = array , U16, 534, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table4 = array , S16, 566, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ dualfuel_temp = array, S16, 598, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ dualfuel_temp = array, S16, 598, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ dualfuel_temp_adj=array, S16, 618, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ dualfuel_press = array, S16, 638, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ dualfuel_press_adj=array, S16, 658, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ inj_timing_sec=array, S16, 678, [12x12], "deg", 0.10000, 0.000, -360, 720, 1
+ inj_timing_sec_load=array, S16, 966, [ 12], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ inj_timing_sec_rpm=array, U16, 990, [ 12], "rpm", 1, 0, 0, {rpmhigh}, 0
+
+page = 12 ; 22
+ veTable4 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable4 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 13 ; 23
+ ; Generic on/off outputs "Spare Port Settings"
+ psEnabled = array , U08, 0, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psCondition = array , U08, 51, [ 51x2], "", 1, 0, 32, 124, 0, noSizeMutation
+ psConnector = array , U08, 153, [ 51], "", 1, 0, 32, 124, 0, noSizeMutation
+ psInitValue = array , U08, 204, [ 51], "", 1, 0 0, 1, 0, noSizeMutation
+ psPortValue = array , U08, 255, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psOutSize = array , U08, 306, [ 51x2], "", 1, 0, 0, 255, 0, noSizeMutation
+ psOutOffset = array , U16, 408, [ 51x2], "", 1, 0, 0, 1024, 0, noSizeMutation
+ psThreshold = array , S16, 612, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ psHysteresis = array , S16, 816, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ ;next is 1020
+ vvt_softout1 = bits, U08, 1020, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout2 = bits, U08, 1021, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout3 = bits, U08, 1022, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout4 = bits, U08, 1023, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+page = 14 ; 24
+ narrowband_tgts = array, U16, 0, [12x12], "V", 0.00488, 0.00000, 0, 1, 3
+ narrowband_tgts_rpms = array, U16, 288, [ 12], "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ narrowband_tgts_loads = array, S16,312, [ 12], "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+ als_opt_fc = bits, U08, 336, [0:0], "Off", "On"
+ als_opt_sc = bits, U08, 336, [1:1], "Off", "On"
+ als_opt_idle = bits, U08, 336, [2:2], "Off", "On"
+ als_opt_fuel = bits, U08, 336, [3:3], "Off", "On"
+ als_opt_pwmout= bits, U08, 336, [4:4], "Off", "On"
+ als_opt_ri = bits, U08, 336, [5:5], "Off", "On"
+ als_maxtime = scalar, U08, 337, "s", 0.1, 0, 1, 25.5, 1
+; als_mintps = scalar, S16, 338, "%", 0.10000, 0.00000, 0, 100, 1
+ als_maxtps = scalar, S16, 340, "%", 0.10000, 0.00000, 0, 100, 1
+ als_iac_duty = scalar, U08, 342, "%", 0.392, 0.00000, 0, 100, 1
+ als_iac_steps = scalar, U08, 342, "steps", 1, 0, 0, 255, 0
+ als_in_pin = bits, U08, 343, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ als_out_pin = bits, U08, 344, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ als_pwm_duty = scalar, U08, 345, "%", 1, 0, 0, 100, 0
+ als_pausetime = scalar, U08, 346, "s", 0.1, 0, 0, 25.5, 1
+ vvt_slew = scalar, U08, 347, "deg", 0.1, 0, 0.1, 25.5, 1
+#if CELSIUS
+ als_minclt = scalar, S16, 348, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+ als_maxclt = scalar, S16, 350, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_minclt = scalar, S16, 348, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+ als_maxclt = scalar, S16, 350, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+;ALS tables
+ als_rpms = array, U16, 352, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_tpss = array, U16, 364, [6], "%", 0.1, 0, 0, 100, 0
+ als_timing = array, S16, 376, [6x6], "degrees", 0.10000,0.00000,-50.00, 50.00,1;
+ als_addfuel = array, S16, 448, [6x6], "%", 0.1, 0, 0, 100, 1
+ als_fuelcut = array, U08, 520, [6x6], "%", 1, 0, 0, 100, 0
+ als_sparkcut = array, U08, 556, [6x6], "%", 1, 0, 0, 100, 0
+ als_minrpm = scalar, U16, 592, "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_maxrpm = scalar, U16, 594, "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ als_maxmat = scalar, S16, 596, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_maxmat = scalar, S16, 596, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_onoff_ang = scalar, S16, 598, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt1_on = bits, U08, 600, [0:1], "Off", "1", "2", "4"
+ vvt_opt1_filter = bits, U08, 600, [2:2], "Off", "On"
+ vvt_opt1_int = bits, U08, 600, [3:3], "Synced to cam", "Timed"
+ vvt_opt1_tst = bits, U08, 600, [4:6], "Off", "VVT1", "VVT2", "VVT3", "VVT4", "INVALID", "INVALID", "INVALID" ; 0, 1, 2, 3, 4
+ vvt_opt1_dir_exhaust = bits, U08, 600, [7:7], "Advance", "Retard"
+ vvt_hold_duty = scalar, U08, 601, "%", 0.392, 0, 0, 100, 1
+ vvt_out1 = bits, U08, 602, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out2 = bits, U08, 603, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out3 = bits, U08, 604, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out4 = bits, U08, 605, [0:3], "Off", "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out1_dir = bits, U08, 602, [7:7], "Advance", "Retard"
+ vvt_out2_dir = bits, U08, 603, [7:7], "Advance", "Retard"
+ vvt_out3_dir = bits, U08, 604, [7:7], "Advance", "Retard"
+ vvt_out4_dir = bits, U08, 605, [7:7], "Advance", "Retard"
+ vvt_ctl_ms = scalar, U16, 606, "ms", 1, 0.00000, 10, 500, 0
+ vvt_ctl_Kp = scalar, U08, 608, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki = scalar, U08, 609, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd = scalar, U08, 610, "%", 1, 0.00000, 0, 200, 0
+ vvt_test_duty = scalar, U08, 611, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_min_ang1 = scalar, S16, 612, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang2 = scalar, S16, 614, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang3 = scalar, S16, 616, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang4 = scalar, S16, 618, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang1 = scalar, S16, 620, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang2 = scalar, S16, 622, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang3 = scalar, S16, 624, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang4 = scalar, S16, 626, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt2_pid = bits, U08, 628, [0:0], "On/off", "PID"
+ vvt_opt2_pid2 = bits, U08, 628, [0:0], "On/Off", "Variable"
+ vvt_opt2_use_hold_intake = bits, U08, 628, [1:1], "Off", "On"
+ vvt_opt2_use_hold_exhaust = bits, U08, 628, [2:2], "Off", "On"
+ vvt_opt2_cam2pol = bits, U08, 628, [4:4], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam3pol = bits, U08, 628, [5:5], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam4pol = bits, U08, 628, [6:6], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam1pol = bits, U08, 628, [7:7], "Falling Edge", "Rising Edge"
+ vvt_opt3_cam2 = bits, U08, 629, [0:1], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam3 = bits, U08, 629, [2:3], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam4 = bits, U08, 629, [4:5], "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
+ vvt_opt3_cam1 = bits, U08, 629, [6:6], "Main cam", "INVALID" ; for display only
+ vvt_timing_load = array, S16, 630, [ 8], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ vvt_timing_rpm = array, U16, 646, [ 8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ vvt_timing1 = array, S16, 662, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_timing2 = array, S16, 790, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_tth1 = scalar, U08, 918, "", 1, 0, 0, 24, 0
+ vvt_tth2 = scalar, U08, 919, "", 1, 0, 0, 24, 0
+ vvt_tth3 = scalar, U08, 920, "", 1, 0, 0, 24, 0
+ vvt_tth4 = scalar, U08, 921, "", 1, 0, 0, 24, 0
+
+ vvt_coldpos1 = scalar, S16, 922, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_coldpos2 = scalar, S16, 924, "degrees", 0.10000,0.00000,0, 720.00,1;
+
+ tclu_opt_vss = bits, U08, 926, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ tclu_opt_gear = bits, U08, 926, [2:2], "Off", "On"
+ tclu_brakepin = bits, U08, 927, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tclu_enablepin = bits, U08, 928, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ tclu_outpin = bits, U08, 929, [0:5], "Off", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ tclu_gearmin = scalar, U08, 930, "", 1, 0, 0, 8, 0
+ tclu_delay = scalar, U08, 931, "s", 0.1, 0, 0, 10, 1
+ tclu_vssmin = scalar, U16, 932, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ tclu_tpsmin = scalar, S16, 934, "%", 0.1, 0, 0, 100, 1
+ tclu_tpsmax = scalar, S16, 936, "%", 0.1, 0, 0, 100, 1
+ tclu_mapmin = scalar, S16, 938, "%", 0.1, 0, 0, {loadhigh}, 1
+ tclu_mapmax = scalar, S16, 940, "%", 0.1, 0, 0, {loadhigh}, 1
+ vvt_opt4_decode = bits, U08, 942, [0:2], "Standard", "BMW V10", "BMW S54", "Hemi VVT", "Ford Coyote", "Ford Duratec 4 cyl", "INVALID", "INVALID"
+ vvt_opt5_add1 = bits, U08, 943, [0:1], "Off", "Cam 1", "Cam 2", "INVALID"
+ vvt_opt5_add2 = bits, U08, 943, [2:2], "Commanded", "Actual"
+ vvt_opt5_err = bits, U08, 943, [3:3], "Yes","No"
+ vvt_opt5_vvt1 = bits, U08, 943, [4:4], "Intake","Exhaust"
+ vvt_opt5_vvt2 = bits, U08, 943, [5:5], "Intake","Exhaust"
+ vvt_opt5_vvt3 = bits, U08, 943, [6:6], "Intake","Exhaust"
+ vvt_opt5_vvt4 = bits, U08, 943, [7:7], "Intake","Exhaust"
+ vvt_hold_duty_exh = scalar, U08, 944, "%", 0.392, 0, 0, 100, 1
+ vvt_ctl_Kp_exh = scalar, U08, 945, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki_exh = scalar, U08, 946, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd_exh = scalar, U08, 947, "%", 1, 0.00000, 0, 200, 0
+ vvt_cam1tth1 = scalar, U08, 948, "", 1, 0.00000, 0, 255, 0
+ vvt_cam1tth2 = scalar, U08, 949, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth1 = scalar, U08, 950, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth2 = scalar, U08, 951, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth1 = scalar, U08, 952, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth2 = scalar, U08, 953, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth1 = scalar, U08, 954, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth2 = scalar, U08, 955, "", 1, 0.00000, 0, 255, 0
+ vvt_opt6_freq = bits, U08, 956, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ vvt_opt7_yaxis = bits, U08, 957, [0:2], "Fuelload", "MAP", "% baro", "TPS", "MAFload", "INVALID", "INVALID", "INVALID"
+ als_rifuelcut = array, U08, 958, [6x6], "%", 1, 0, 0, 100, 0
+ als_rirpms = array, U16, 994, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_ritpss = array, U16, 1006, [6], "%", 0.1, 0, 0, 100, 0
+ als_pwm_opt_freq = bits, U08, 1018, [1:4], "On-Off", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ als_pwm_opt2 = bits, U08, 1019, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+#if CELSIUS
+ vvt_minclt = scalar, S16, 1020, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ vvt_minclt = scalar, S16, 1020, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_minduty1 = scalar, U08, 1022, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_maxduty1 = scalar, U08, 1023, "%", 0.392, 0.00000, 0, 100, 1
+
+page = 15 ; 25
+ mafv = array, U16, 0, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ maff = array, U16, 0, [64], "Hz", { (maf_freq1 - maf_freq0) / 5000 }, { maf_freq0 * 5000 / (maf_freq1 - maf_freq0) }, {maf_freq0}, { maf_freq1 }, 0
+ mafflow = array, U16, 128, [64], "g/sec", {0.01 * (maf_range + 1)}, -8192, {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 2
+ alphaMAPtable = array , S16, 256, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes)
+ amap_tps = array , S16, 328, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ amap_rpm = array , U16, 340, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ tpswot_tps = array , S16, 352, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 364, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 376, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 376, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 388, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+;next is 400
+ boost_ctl_cl_pwm_targs1 = array, U08, 400, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_targs2 = array, U08, 464, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 528, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_rpms2 = array, U16, 544, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 560, [8], "%", 0.10000, 0, 0, 600, 0
+ boost_ctl_cl_pwm_targboosts2 = array, S16, 576, [8], "%", 0.10000, 0, 0, 600, 0
+ blendx1 = array, S16, 592, [9], "X", 1, 0, -32767, 32767, 0
+ blendx2 = array, S16, 610, [9], "X", 1, 0, -32767, 32767, 0
+ blendx3 = array, S16, 628, [9], "X", 1, 0, -32767, 32767, 0
+ blendx4 = array, S16, 646, [9], "X", 1, 0, -32767, 32767, 0
+ blendx5 = array, S16, 664, [9], "X", 1, 0, -32767, 32767, 0
+ blendx6 = array, S16, 682, [9], "X", 1, 0, -32767, 32767, 0
+ blendx7 = array, S16, 700, [9], "X", 1, 0, -32767, 32767, 0
+ blendx8 = array, S16, 718, [9], "Flex%", 0.1, 0, 0, 100, 1
+ blendy1 = array, U08, 736, [9], "VE2", 1, 0, 0, 100, 0
+ blendy2 = array, U08, 745, [9], "Spk2", 1, 0, 0, 100, 0
+ blendy3 = array, U08, 754, [9], "VE3/4", 1, 0, 0, 100, 0
+ blendy4 = array, U08, 763, [9], "Spk3/4", 1, 0, 0, 100, 0
+ blendy5 = array, U08, 772, [9], "AFR2", 1, 0, 0, 100, 0
+ blendy6 = array, U08, 781, [9], "Boost2", 1, 0, 0, 100, 0
+ blendy7 = array, U08, 790, [9], "Crank%2", 1, 0, 0, 100, 0
+ blendy8 = array, U08, 799, [9], "Blend%", 1, 0, 0, 100, 0
+ fpd_duty= array, U08, 808, [6x6], "%", 0.392, 0.00000, 0, 100, 1
+ fpd_load= array, S16, 844, [6], "%", 0.10000, 0.00000, 0.0,{loadhigh}, 1
+ fpd_rpm = array, U16, 856, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+#if CELSIUS
+ fp_temps = array, S16, 868, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ fp_temps = array, S16, 868, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ fp_temp_adj = array, S16, 888, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ fp_presss = array, S16, 908, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ fp_press_adj = array, S16, 928, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ hpte_times = array, S16, 948, [ 6], "s", 0.10000, 0.000, 0.00, 25.5, 1
+ hpte_afrs = array, U08, 960, [ 6], "AFR", 0.10000, 0.000, 0.00, 5.0, 1
+ oil_rpm = array, U16, 966, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ oil_press_min = array, S16, 978, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ oil_press_max = array, S16, 990, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ alt_dutyin = array, U16, 1002, [7], "%", 1, 0, 0, 100, 0
+ alt_dutyout = array, U08, 1016, [7], "%", 1, 0, 0, 100, 0
+
+page = 16 ; 26 ; this is a RAM only page with no burnable flash
+; Quickform realtime data. Lower part of data is offset into outpc. Upper 3 bits are size. 0 = nothing, 1 = 1 byte, 2 = 2 bytes, 3 = 4 bytes
+ qfrtfielddata= array, U16, 0, [ 256], "", 1.0000, 0.00000, 0.00, 65535, 0, noMsqSave
+ ltt_table1 = array , S08, 512, [16x16], "%", 0.10000, 0.00000, -12.7, 12.7, 1, noMsqSave ; * (512 bytes)
+ ltt_rpms = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0, noMsqSave ; * ( 24 bytes)
+ ltt_loads = array , S16, 800, [ 16], "%", 0.10000, 0.00000, 0.00, {loadhigh}, 1, noMsqSave ; * ( 24 bytes)
+
+ portusage = array, U08, 832, [ 148], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_a = array, U08, 832, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_b = array, U08, 840, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_e = array, U08, 848, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_h = array, U08, 856, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_j = array, U08, 864, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_k = array, U08, 872, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_m = array, U08, 880, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_p = array, U08, 888, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_t = array, U08, 896, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0h=array, U08, 904, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0l=array, U08, 912, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canin=array, U08, 920, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canout=array,U08, 928, [16], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canadc=array,U08, 944, [24], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canpwm=array,U08, 968, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_pwmscl=array,U08, 976, [ 4], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_loop =array, U08, 980, [ 3], "", 1, 0, 0, 255, 0, noMsqSave
+
+page = 17 ; 27
+ ego_auth_table = array, U08, 0, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1
+ ego_auth_rpms = array, U16, 144, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ ego_auth_loads = array, S16, 168, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ vsslaunch_vss = array, U16, 192, [ 10], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ vsslaunch_rpm = array, U16, 212, [ 10], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ vsslaunch_retard = array, U16, 232, [ 10], "deg", 0.10000, 0.00000, 0.00, 50, 1
+ ego_delay_table = array, U08, 252, [12x12], "ms", 10.00000, 0, 0, 2550, 0
+ ego_delay_rpms = array, U16, 396, [ 12], "rpm", 1.00000, 0, 0, {rpmhigh}, 0
+ ego_delay_loads = array, S16, 420, [ 12], "%", 0.10000, 0, 0, {loadhigh}, 0
+ ego_sensor_delay = scalar,U08, 444, "ms", 2, 0, 0, 510, 0
+
+; 2 Generic PID channels
+ generic_pid_flags_a_on = bits,U08, 445, [0:0], "Off", "On"
+ generic_pid_flags_a_type = bits, U08, 445, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_a_direction = bits, U08, 445, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_a_output_type = bits, U08, 445, [4:4], "PWM", "Stepper"
+ generic_pid_flags_a_lookup_type = bits, U08, 445, [5:5], "Table", "Curve"
+ generic_pid_flags_b_on = bits,U08, 446, [0:0], "Off", "On"
+ generic_pid_flags_b_type = bits, U08, 446, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_b_direction = bits, U08, 446, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_b_output_type = bits,U08, 446, [4:4], "PWM", "Stepper"
+ generic_pid_flags_b_lookup_type = bits, U08, 446, [5:5], "Table", "Curve"
+
+ generic_pid_pwm_opts_freq_a = bits, U08, 447, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_a = bits, U08, 447, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ generic_pid_pwm_opts_freq_b = bits, U08, 448, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_b = bits, U08, 448, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ generic_pid_pwm_outs_a = bits, U08, 449, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ generic_pid_pwm_outs_b = bits, U08, 450, [0:5], "INVALID", "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+ generic_pid_load_offset_a = scalar, U16, 451, "", 1, 0, 0, 65535, 0
+ generic_pid_load_offset_b = scalar, U16, 453, "", 1, 0, 0, 65535, 0
+ generic_pid_load_size_a = scalar, U08, 455, "", 1, 0, 0, 255, 0
+ generic_pid_load_size_b = scalar, U08, 456, "", 1, 0, 0, 255, 0
+
+; These are positioned here so that TS reads them in the correct order and the autoscaling on the next block function
+ generic_pid_PV_offset_a = scalar, U16, 469, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_offset_b = scalar, U16, 471, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_size_a = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ generic_pid_PV_size_b = scalar, U08, 474, "", 1, 0, 0, 255, 0
+
+ generic_pid_upper_inputlim_a = scalar, S16, 457, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_upper_inputlim_b = scalar, S16, 459, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_lower_inputlim_a = scalar, S16, 461, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_lower_inputlim_b = scalar, S16, 463, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_output_upperlim_a = scalar, U08, 465, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_upperlim_b = scalar, U08, 466, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_a = scalar, U08, 467, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_b = scalar, U08, 468, "%", 0.392, 0.00000, 0, 100, 1
+ ;
+ ; not a gap!
+ ;
+ generic_pid_rpms_a = array, S16, 475, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_a = array, S16, 491, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_a) } , { getChannelTranslateByOffset(generic_pid_load_offset_a) }, { getChannelMinByOffset(generic_pid_load_offset_a) }, { getChannelMaxByOffset(generic_pid_load_offset_a) }, { getChannelDigitsByOffset(generic_pid_load_offset_a) }
+ generic_pid_rpms_b = array, S16, 507, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_b = array, S16, 523, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_b) } , { getChannelTranslateByOffset(generic_pid_load_offset_b) }, { getChannelMinByOffset(generic_pid_load_offset_b) }, { getChannelMaxByOffset(generic_pid_load_offset_b) }, { getChannelDigitsByOffset(generic_pid_load_offset_b) }
+
+ generic_pid_targets_a = array, S16, 539, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_targets_b = array, S16, 667, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+
+ generic_pid_control_interval_a = scalar, U08, 795, "ms", 1, 0, 10, 255, 0
+ generic_pid_control_interval_b = scalar, U08, 796, "ms", 1, 0, 10, 255, 0
+
+ generic_pid_P_a = scalar, U08, 797, "%", 1, 0, 0, 255, 0
+ generic_pid_P_b = scalar, U08, 798, "%", 1, 0, 0, 255, 0
+ generic_pid_I_a = scalar, U08, 799, "%", 1, 0, 0, 255, 0
+ generic_pid_I_b = scalar, U08, 800, "%", 1, 0, 0, 255, 0
+ generic_pid_D_a = scalar, U08, 801, "%", 1, 0, 0, 255, 0
+ generic_pid_D_b = scalar, U08, 802, "%", 1, 0, 0, 255, 0
+;gap
+ tcslipx = array, U16, 804, [9], "Knob%", 0.0978, 0, 0, 100, 0
+ tcslipy = array, U08, 822, [9], "Slip threshold %", 1, 0, 0, 100, 0
+;gap
+; 4 outmsg
+ outmsg1_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+page = 18 ; 28
+ dwell_table_values = array, U08, 262, [8x8], "%", 0.10000, 0.00000, 0.5, 25.5, 1
+ dwell_table_rpms = array, U16, 326, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ dwell_table_loads = array, S16, 342, [ 8], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ can_rcv_id1 = scalar, U16, 358, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id2 = scalar, U16, 360, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id3 = scalar, U16, 362, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id4 = scalar, U16, 364, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id5 = scalar, U16, 366, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id6 = scalar, U16, 368, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id7 = scalar, U16, 370, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id8 = scalar, U16, 372, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id9 = scalar, U16, 374, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id10= scalar, U16, 376, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id11= scalar, U16, 378, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id12= scalar, U16, 380, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id13= scalar, U16, 382, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id14= scalar, U16, 384, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id15= scalar, U16, 386, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id16= scalar, U16, 388, "", 1, 0.00000, 0, 2047, 0
+
+ can_rcv_var1 = bits, U08, 390, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var2 = bits, U08, 391, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var3 = bits, U08, 392, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var4 = bits, U08, 393, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var5 = bits, U08, 394, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var6 = bits, U08, 395, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var7 = bits, U08, 396, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var8 = bits, U08, 397, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var9 = bits, U08, 398, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var10 = bits, U08, 399, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var11 = bits, U08, 400, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var12 = bits, U08, 401, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var13 = bits, U08, 402, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var14 = bits, U08, 403, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var15 = bits, U08, 404, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var16 = bits, U08, 405, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ can_rcv_off1 = scalar, U08, 406, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off2 = scalar, U08, 407, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off3 = scalar, U08, 408, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off4 = scalar, U08, 409, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off5 = scalar, U08, 410, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off6 = scalar, U08, 411, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off7 = scalar, U08, 412, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off8 = scalar, U08, 413, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off9 = scalar, U08, 414, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off10 = scalar, U08, 415, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off11 = scalar, U08, 416, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off12 = scalar, U08, 417, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off13 = scalar, U08, 418, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off14 = scalar, U08, 419, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off15 = scalar, U08, 420, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off16 = scalar, U08, 421, "", 1, 0.00000, 0, 7, 0
+
+ can_rcv_size1 = bits, U08, 422, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size2 = bits, U08, 423, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size3 = bits, U08, 424, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size4 = bits, U08, 425, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size5 = bits, U08, 426, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size6 = bits, U08, 427, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size7 = bits, U08, 428, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size8 = bits, U08, 429, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size9 = bits, U08, 430, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size10 = bits, U08, 431, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size11 = bits, U08, 432, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size12 = bits, U08, 433, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size13 = bits, U08, 434, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size14 = bits, U08, 435, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size15 = bits, U08, 436, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size16 = bits, U08, 437, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ can_rcv_mult1 = scalar, S16, 438, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult2 = scalar, S16, 440, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult3 = scalar, S16, 442, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult4 = scalar, S16, 444, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult5 = scalar, S16, 446, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult6 = scalar, S16, 448, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult7 = scalar, S16, 450, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult8 = scalar, S16, 452, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult9 = scalar, S16, 454, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult10 = scalar, S16, 456, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult11 = scalar, S16, 458, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult12 = scalar, S16, 460, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult13 = scalar, S16, 462, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult14 = scalar, S16, 464, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult15 = scalar, S16, 466, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult16 = scalar, S16, 468, "", 1, 0.00000, -32767, 32767,0
+
+ can_rcv_div1 = scalar, U16, 470, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div2 = scalar, U16, 472, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div3 = scalar, U16, 474, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div4 = scalar, U16, 476, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div5 = scalar, U16, 478, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div6 = scalar, U16, 480, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div7 = scalar, U16, 482, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div8 = scalar, U16, 484, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div9 = scalar, U16, 486, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div10 = scalar, U16, 488, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div11 = scalar, U16, 490, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div12 = scalar, U16, 492, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div13 = scalar, U16, 494, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div14 = scalar, U16, 496, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div15 = scalar, U16, 498, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div16 = scalar, U16, 500, "", 1, 0.00000, 1, 32767,0
+
+ can_rcv_add1 = scalar, S16, 502, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add2 = scalar, S16, 504, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add3 = scalar, S16, 506, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add4 = scalar, S16, 508, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add5 = scalar, S16, 510, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add6 = scalar, S16, 512, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add7 = scalar, S16, 514, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add8 = scalar, S16, 516, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add9 = scalar, S16, 518, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add10 = scalar, S16, 520, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add11 = scalar, S16, 522, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add12 = scalar, S16, 524, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add13 = scalar, S16, 526, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add14 = scalar, S16, 528, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add15 = scalar, S16, 530, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add16 = scalar, S16, 532, "", 1, 0.00000, -32767, 32767,0
+ can_bcast_user_id = scalar, U16, 534, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 536, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 537, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 538, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 539, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 540, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 541, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 542, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 543, "", 1, 0, 0, 255, 0
+
+ iobox_opta1 = bits, U08, 544, [0:0], "Off", "On"
+ iobox_opta1adv = bits, U08, 544, [1:1], "Automatic", "Advanced"
+ iobox_opta1canin = bits, U08, 544, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta1canout= bits, U08, 544, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta1canadc= bits, U08, 544, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta2 = bits, U08, 545, [0:0], "Off", "On"
+ iobox_opta2adv = bits, U08, 545, [1:1], "Automatic", "Advanced"
+ iobox_opta2canin = bits, U08, 545, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta2canout= bits, U08, 545, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta2canadc= bits, U08, 545, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta3 = bits, U08, 546, [0:0], "Off", "On"
+ iobox_opta3adv = bits, U08, 546, [1:1], "Automatic", "Advanced"
+ iobox_opta3canin = bits, U08, 546, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta3canout= bits, U08, 546, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta3canadc= bits, U08, 546, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta4 = bits, U08, 547, [0:0], "Off", "INVALID"
+ iobox_opta4adv = bits, U08, 547, [1:1], "Automatic", "Advanced"
+ iobox_opta4canin = bits, U08, 547, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta4canout= bits, U08, 547, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta4canadc= bits, U08, 547, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+
+ iobox_optb1tachrate= bits, U08, 548, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb1inrate = bits, U08, 548, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1outrate = bits, U08, 548, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1vss = bits, U08, 548, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb2tachrate= bits, U08, 549, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb2inrate = bits, U08, 549, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2outrate = bits, U08, 549, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2vss = bits, U08, 549, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb3tachrate= bits, U08, 550, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb3inrate = bits, U08, 550, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3outrate = bits, U08, 550, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3vss = bits, U08, 550, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_optb4tachrate= bits, U08, 551, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb4inrate = bits, U08, 551, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4outrate = bits, U08, 551, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4vss = bits, U08, 551, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_id1 = scalar, U16, 552, "", 1, 0.00000, 0, 2047, 0
+ iobox_id2 = scalar, U16, 554, "", 1, 0.00000, 0, 2047, 0
+ iobox_id3 = scalar, U16, 556, "", 1, 0.00000, 0, 2047, 0
+ iobox_id4 = scalar, U16, 558, "", 1, 0.00000, 0, 2047, 0
+ pitlim_opt_on = bits, U08, 560, [0:0], "Off", "On"
+ pitlim_opt_mode = bits, U08, 560, [1:1], "Fixed", "Holding"
+ pitlim_opt_retard=bits, U08, 560, [2:2], "Off", "On"
+ pitlim_opt_spkcut=bits, U08, 560, [3:3], "Off", "On"
+ pitlim_opt_fuelcut=bits,U08, 560, [4:4], "Off", "On"
+ pitlim_opt_fuelprog=bits,U08, 560, [5:5], "Off", "On"
+ pitlim_opt_vssrpm= bits,U08, 560, [6:6], "VSS", "RPM"
+ pitlim_enin = bits, U08, 561, [0:4], "Off", "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pitlim_speed = scalar, U16, 562, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ pitlim_retardmax= scalar, S16, 564, "deg", 0.1, 0.00000, 0, 30, 1
+ pitlim_sensitivity=scalar, U16, 566, "", 0.1, 0.00000, 0, 20, 0
+ pitlim_speed_range=scalar, U16, 568, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,20, 1
+ pitlim_rpm_range=scalar, U16, 570, "RPM", 1.00000, 0.00000, 200, 1000, 0
+;accel wizard mini tables
+ taeBins = array , U08, 572, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins = array , U08, 576, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates = array , S16, 580, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 588, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+;accel wizard #2
+ taeBins2 = array , U08, 596, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins2 = array , U08, 600, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates2 = array , S16, 604, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates2 = array , S16, 612, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+ accel_mapdots = array, S16, 620, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots = array, S16, 636, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts = array, S16, 652, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts = array, S16, 668, [8], "%", 0.1, 0, -500, 500, 1
+ accel_mapdots2 = array, S16, 684, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots2 = array, S16, 700, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts2 = array, S16, 716, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts2 = array, S16, 732, [8], "%", 0.1, 0, -500, 500, 1
+ dashbcast_id1 = scalar, U16, 748, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 750, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 750, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 750, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 751
+
+;768-1023 reserved
+
+ page = 19 ; 29
+
+; dome settings
+
+;progressive nitrous tables
+ n2o1_time = array, U16, 346, [10], "s", 0.001, 0, 0, 15, 2
+ n2o1_rpm = array, U16, 366, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o1_vss = array, U16, 386, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o1_duty = array, U08, 406, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o1_pw = array, S16, 416, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o1_pw = array, S16, 416, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o1_retard = array, U16, 436, [10], "deg", 0.1, 0, 0, 30, 1
+ n2o2_time = array, U16, 456, [10], "s", 0.001, 0, 0, 15, 2
+ n2o2_rpm = array, U16, 476, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o2_vss = array, U16, 496, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o2_duty = array, U08, 516, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o2_pw = array, S16, 526, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o2_pw = array, S16, 526, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o2_retard = array, U16, 546, [10], "deg", 0.1, 0, 0, 30, 1
+ alternator_fvolts = array , U16, 566, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_freqv = array , U08, 578, [ 6], "", 1, 0.00000,0, 255, 0 ; * ( 6 bytes)
+#if CELSIUS
+ alternator_temp = array, S16, 584, [ 6], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ alternator_temp = array, S16, 584, [ 6], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ alternator_targvolts = array , U08, 596, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dvolts = array , U16, 602, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dutyv = array , U08, 614, [ 6], "", 1, 0.00000,0, 255, 1 ; * ( 6 bytes)
+; next is 620
+ ; watch out for dome settings
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = hardware_spk
+ requiresPowerCycle = hardware_cam
+ requiresPowerCycle = hardware_fuel
+ requiresPowerCycle = hardware_injij
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+; requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = AfrAlgorithm
+ requiresPowerCycle = opt142_rtc
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knk_option_an
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gmtfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_campol
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = map2port
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = mapport
+ requiresPowerCycle = mapport_t
+ requiresPowerCycle = mapport_f
+ requiresPowerCycle = knkport_an
+
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tsw_pin_f
+ requiresPowerCycle = tsw_pin_s
+ requiresPowerCycle = tsw_pin_rf
+ requiresPowerCycle = tsw_pin_ob
+ requiresPowerCycle = tsw_pin_afr
+ requiresPowerCycle = tsw_pin_stoich
+ requiresPowerCycle = f5_0_tsf
+ requiresPowerCycle = f5_0_tsf_opt
+ requiresPowerCycle = f5_0_tss
+ requiresPowerCycle = f5_0_tss_opt
+
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = tacho_optvar
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = launch_opt_vss
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = pwmidle_freq_scale
+ requiresPowerCycle = boost_ctl_pins_pwm
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = boost_ctl_pwm_scale
+ requiresPowerCycle = boost_ctl_pwm
+ requiresPowerCycle = boost_ctl_settings_invert_new
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = log_style_led
+ requiresPowerCycle = log_style2_but
+ requiresPowerCycle = log_style_on2
+ requiresPowerCycle = log_style3_adc
+ requiresPowerCycle = sequential
+ requiresPowerCycle = boost_feats_tsw
+ requiresPowerCycle = launch_3step_in
+ requiresPowerCycle = maxafr_opt1_led
+ requiresPowerCycle = vss1_pos
+ requiresPowerCycle = vss2_pos
+ requiresPowerCycle = launch_var_on
+ requiresPowerCycle = reluctorteeth1
+ requiresPowerCycle = reluctorteeth2
+ requiresPowerCycle = vss_opt1
+ requiresPowerCycle = vss_opt2
+ requiresPowerCycle = vss1_an
+ requiresPowerCycle = vss2_an
+ requiresPowerCycle = vss1_can_scale
+ requiresPowerCycle = vss2_can_scale
+ requiresPowerCycle = ss_opt1
+ requiresPowerCycle = ss_opt2
+ requiresPowerCycle = wheeldia1
+ requiresPowerCycle = wheeldia2
+ requiresPowerCycle = fdratio1
+ requiresPowerCycle = vss1_can_id
+ requiresPowerCycle = vss1_can_offset
+ requiresPowerCycle = vss2_can_offset
+ requiresPowerCycle = vss3_can_offset
+ requiresPowerCycle = vss4_can_offset
+ requiresPowerCycle = vss_opt0_1
+ requiresPowerCycle = vss_opt0_2
+ requiresPowerCycle = vss_opt0_3
+ requiresPowerCycle = vss_opt0_4
+ requiresPowerCycle = ss_opt1_spd
+ requiresPowerCycle = ss1_pwmseq
+ requiresPowerCycle = ss2_pwmseq
+ requiresPowerCycle = gear_can_offset
+ requiresPowerCycle = n2o1n_pins
+ requiresPowerCycle = n2o1f_pins
+ requiresPowerCycle = n2o2n_pins
+ requiresPowerCycle = n2o2f_pins
+ requiresPowerCycle = water_freq_on
+ requiresPowerCycle = water_pins_pump
+ requiresPowerCycle = water_pins_valve
+ requiresPowerCycle = water_pins_in_shut
+ requiresPowerCycle = egt_num
+ requiresPowerCycle = accXport
+ requiresPowerCycle = accYport
+ requiresPowerCycle = accZport
+ requiresPowerCycle = egt1port
+ requiresPowerCycle = egt2port
+ requiresPowerCycle = egt3port
+ requiresPowerCycle = egt4port
+ requiresPowerCycle = egt5port
+ requiresPowerCycle = egt6port
+ requiresPowerCycle = egt7port
+ requiresPowerCycle = egt8port
+ requiresPowerCycle = egt9port
+ requiresPowerCycle = egt10port
+ requiresPowerCycle = egt11port
+ requiresPowerCycle = egt12port
+ requiresPowerCycle = egt13port
+ requiresPowerCycle = egt14port
+ requiresPowerCycle = egt15port
+ requiresPowerCycle = egt16port
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = MAFOption_t
+ requiresPowerCycle = MAFOption_f
+ requiresPowerCycle = vssout_opt
+ requiresPowerCycle = vssout_optunits
+ requiresPowerCycle = gear_method
+ requiresPowerCycle = gear_port_an
+ requiresPowerCycle = ac_idleup_io_in
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = fanctl_settings_on
+ requiresPowerCycle = fanctl_settings_pin
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = boost_ctl_settings_on2
+ requiresPowerCycle = boost_ctl_settings_cl2
+ requiresPowerCycle = boost_ctl_pins_pwm2
+ requiresPowerCycle = boost_ctl_pins2
+ requiresPowerCycle = boost_ctl_sensor2
+ requiresPowerCycle = egoport1
+ requiresPowerCycle = egoport2
+ requiresPowerCycle = egoport3
+ requiresPowerCycle = egoport4
+ requiresPowerCycle = egoport5
+ requiresPowerCycle = egoport6
+ requiresPowerCycle = egoport7
+ requiresPowerCycle = egoport8
+ requiresPowerCycle = egoport9
+ requiresPowerCycle = egoport10
+ requiresPowerCycle = egoport11
+ requiresPowerCycle = egoport12
+ requiresPowerCycle = egoport13
+ requiresPowerCycle = egoport14
+ requiresPowerCycle = egoport15
+ requiresPowerCycle = egoport16
+ requiresPowerCycle = tc_opt_on
+ requiresPowerCycle = tc_led_out
+ requiresPowerCycle = tc_opt_method
+ requiresPowerCycle = tc_enin
+ requiresPowerCycle = fueltemp1
+ requiresPowerCycle = sensor01_source
+ requiresPowerCycle = sensor02_source
+ requiresPowerCycle = sensor03_source
+ requiresPowerCycle = sensor04_source
+ requiresPowerCycle = sensor05_source
+ requiresPowerCycle = sensor06_source
+ requiresPowerCycle = sensor07_source
+ requiresPowerCycle = sensor08_source
+ requiresPowerCycle = sensor09_source
+ requiresPowerCycle = sensor10_source
+ requiresPowerCycle = sensor11_source
+ requiresPowerCycle = sensor12_source
+ requiresPowerCycle = sensor13_source
+ requiresPowerCycle = sensor14_source
+ requiresPowerCycle = sensor15_source
+ requiresPowerCycle = sensor16_source
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_gear
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = shift_cut_fuel
+ requiresPowerCycle = pwm_opt_on_a
+ requiresPowerCycle = pwm_opt_on_b
+ requiresPowerCycle = pwm_opt_on_c
+ requiresPowerCycle = pwm_opt_on_d
+ requiresPowerCycle = pwm_opt_on_e
+ requiresPowerCycle = pwm_opt_on_f
+ requiresPowerCycle = pwm_opt2_a
+ requiresPowerCycle = pwm_opt2_b
+ requiresPowerCycle = pwm_opt2_c
+ requiresPowerCycle = pwm_opt2_d
+ requiresPowerCycle = pwm_opt2_e
+ requiresPowerCycle = pwm_opt2_f
+ requiresPowerCycle = dualfuel_sw_on
+ requiresPowerCycle = dualfuel_pin
+ requiresPowerCycle = dualfuel_opt_mode
+ requiresPowerCycle = dualfuel_opt_out
+ requiresPowerCycle = dualfuel_temp_sens
+ requiresPowerCycle = dualfuel_press_sens
+
+ requiresPowerCycle = dualfuel_sw_fuel
+ requiresPowerCycle = dualfuel_sw_spk
+ requiresPowerCycle = dualfuel_sw_afr
+ requiresPowerCycle = dualfuel_sw_rf
+ requiresPowerCycle = dualfuel_sw_stoich
+ requiresPowerCycle = dualfuel_sw_wue
+ requiresPowerCycle = dualfuel_sw_ase
+ requiresPowerCycle = dualfuel_sw2_prime
+ requiresPowerCycle = dualfuel_sw2_crank
+ requiresPowerCycle = dualfuel_sw2_injp
+ requiresPowerCycle = dualfuel_sw2_smpw
+ requiresPowerCycle = dualfuel_sw2_ob
+ requiresPowerCycle = dualfuel_sw2_boosw
+ requiresPowerCycle = dualfuel_sw2_ae
+
+ requiresPowerCycle = als_opt_pwmout
+ requiresPowerCycle = als_in_pin
+ requiresPowerCycle = als_out_pin
+ requiresPowerCycle = als_pwm_opt_freq
+ requiresPowerCycle = als_pwm_opt2
+ requiresPowerCycle = vvt_opt1_on
+ requiresPowerCycle = vvt_out1
+ requiresPowerCycle = vvt_out2
+ requiresPowerCycle = vvt_out3
+ requiresPowerCycle = vvt_out4
+ requiresPowerCycle = vvt_opt2_cam1pol
+ requiresPowerCycle = vvt_opt2_cam2pol
+ requiresPowerCycle = vvt_opt2_cam3pol
+ requiresPowerCycle = vvt_opt2_cam4pol
+ requiresPowerCycle = vvt_opt3_cam2
+ requiresPowerCycle = vvt_opt3_cam3
+ requiresPowerCycle = vvt_opt3_cam4
+ requiresPowerCycle = tclu_brakepin
+ requiresPowerCycle = tclu_enablepin
+ requiresPowerCycle = tclu_outpin
+ requiresPowerCycle = vvt_opt4_decode
+ requiresPowerCycle = vvt_opt6_freq
+ requiresPowerCycle = vvt_softout1
+ requiresPowerCycle = vvt_softout2
+ requiresPowerCycle = vvt_softout3
+ requiresPowerCycle = vvt_softout4
+ requiresPowerCycle = knk_pin_out
+ requiresPowerCycle = ltt_opt_on
+ requiresPowerCycle = ltt_but_in
+ requiresPowerCycle = ltt_led_out
+ requiresPowerCycle = timedout1_in
+ requiresPowerCycle = timedout1_out
+ requiresPowerCycle = tstop_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = map_phase_thresh
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = staged_extended_opts_pw1off
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_second_param
+ requiresPowerCycle = staged_transition_on
+ requiresPowerCycle = staged_pw1_0
+ requiresPowerCycle = staged_out1
+ requiresPowerCycle = fp_opt_mode
+ requiresPowerCycle = fp_opt_inv
+ requiresPowerCycle = fp_out1
+ requiresPowerCycle = alternator_opt_mode
+ requiresPowerCycle = alternator_controlout
+ requiresPowerCycle = alternator_control_inv
+ requiresPowerCycle = alternator_freq
+ requiresPowerCycle = alternator_lampout
+ requiresPowerCycle = alternator_freq_monin
+ requiresPowerCycle = alternator_freq_moninv
+ requiresPowerCycle = alternator_freq_currin
+ requiresPowerCycle = alternator_freq_currinv
+ requiresPowerCycle = oilpress_in
+ requiresPowerCycle = oilpress_out
+ requiresPowerCycle = cel_port
+ requiresPowerCycle = generic_pid_flags_a_on
+ requiresPowerCycle = generic_pid_flags_b_on
+ requiresPowerCycle = generic_pid_flags_a_direction
+ requiresPowerCycle = generic_pid_flags_b_direction
+ requiresPowerCycle = generic_pid_pwm_opts_freq_a
+ requiresPowerCycle = generic_pid_pwm_opts_freq_b
+ requiresPowerCycle = generic_pid_pwm_outs_a
+ requiresPowerCycle = generic_pid_pwm_outs_b
+ requiresPowerCycle = can_rcv_opt_on
+ requiresPowerCycle = iobox_opta1
+ requiresPowerCycle = iobox_opta2
+ requiresPowerCycle = iobox_opta3
+ requiresPowerCycle = iobox_opta4
+ requiresPowerCycle = iobox_optb1vss
+ requiresPowerCycle = iobox_optb2vss
+ requiresPowerCycle = iobox_optb3vss
+ requiresPowerCycle = iobox_optb4vss
+ requiresPowerCycle = pitlim_opt_on
+ requiresPowerCycle = pitlim_enin
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = wue_lpg, "No"
+ defaultValue = vehigh, 255
+ defaultValue = clt_exp, 0
+ defaultValue = sensor01Alias, "Sensor 01"
+ defaultValue = sensor02Alias, "Sensor 02"
+ defaultValue = sensor03Alias, "Sensor 03"
+ defaultValue = sensor04Alias, "Sensor 04"
+ defaultValue = sensor05Alias, "Sensor 05"
+ defaultValue = sensor06Alias, "Sensor 06"
+ defaultValue = sensor07Alias, "Sensor 07"
+ defaultValue = sensor08Alias, "Sensor 08"
+ defaultValue = sensor09Alias, "Sensor 09"
+ defaultValue = sensor10Alias, "Sensor 10"
+ defaultValue = sensor11Alias, "Sensor 11"
+ defaultValue = sensor12Alias, "Sensor 12"
+ defaultValue = sensor13Alias, "Sensor 13"
+ defaultValue = sensor14Alias, "Sensor 14"
+ defaultValue = sensor15Alias, "Sensor 15"
+ defaultValue = sensor16Alias, "Sensor 16"
+ defaultValue = prefSpeedUnits, 0
+ defaultValue = prefLengthUnits, 0
+ defaultValue = scatterRuntimeEnabled, 1
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ tempTable = ""
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valve may work in the opposite direction."
+ pwmidle_freq_pin = "Output for idle valve."
+ pwmidle_freq_pin3 = "Second output for idle valve in 3-wire mode."
+ pwmidle_freq_scale = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz."
+ pwmidle_freq_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ feature3_tps = "Automatically recalibrate TPS if negative TPS values are seen. This can be useful if the zero position on your TPS varies.\n(The temporary recalibration is not saved.)"
+ baud = "This should be set to 115200."
+ baudhigh = "Optional faster baudrate for SDcard datalog readback.\nUseful options are 115200, 230400, 460800.\nUse the quickest that works reliably on your hardware. A direct USB cable is likely to work best."
+; These tips for on/off outputs do not show up in 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ hardware_injij = "Sets the outputs for the 9th and 10th injectors I/J.\nMainboard = use the two batch fire channels.\nH3+H4 = use the spare pins on the MS3X card.\n\nIn either case ensure ALL injector drivers are identical design."
+ firea = "Firing order is used for trim and per-cylinder corrections so the adjustment is applied to the correct cylinder number. Injectors and coils must still be wired in firing order sequence. i.e. InjA = cyl1, InjB = next cylinder to fire"
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+
+ hardware_fuel = "Selects whether injectors are wired to the MS3X sequential outputs or the two batch fire outputs on the lower connector."
+ sequential = "Off - disables sequential fuel and runs batch fire. Semi-sequential - fires injectors in pairs spread over a crank rotation (Requires a crank wheel.) Fully-Sequential - fires each injector in turn spread over a full engine cycle (requires a cam sensor on 4-stroke for phase information.)"
+ sequential_angle_spec = "Whether to time the injection by the start, middle or end of the pulse. End is most common and typically arranged so that injection has finished just before the inlet valve opens."
+ sequential_trim_on_off = "Whether to enable per-cylinder trim tables. This allows each cylinder to be tuned individually if you have per-cylinder widebands or EGT."
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on. Not recommended as this can easily get an incorrect reading if you are quick on the key or powercycle while the engine is running.\nTwo independent sensors = use a second dedicated barometer sensor.\n\nIt is strongly recommended to use a dedicated baro sensor if your vehicle will see altitude changes."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ mapport_t = "Selects voltage (common) or frequency (rare) type MAP sensor input.\nOff disables the MAP input. e.g. for pure Alpha-N or MAF installs."
+ mapport = "The connection to an external or internal voltage MAP sensor."
+ mapport_f = "The connection to an external or internal frequency MAP sensor."
+ map_freq0 = "The low frequency corresponding to the least MAP."
+ map_freq1 = "The high frequency corresponding to the most MAP."
+ map2port = "If fitted, the connection to a second voltage MAP sensor.\nDo not confuse this with baro sensing.\nThis is for a second sensor measuring manifold pressure. Typically this would only be used on engines with two runners or plenums and no balance tube."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier or blended fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier or blend method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadMult2 = "The same as Multiply MAP, but this setting controls the secondary blended tables VE2 and VE4 - allowing for example Speed-Density (with MAP) on VE1 to be blended with a Pure Alpha-N (without MAP) on VE2."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier or blended fuel table (Spk2)\n\nAdvanced use only."
+ loadCombineign = "Selects the modifier or blend method"
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ OvrRunC_progcut = "Allows sequential injectors to be cut progressively for a smoother activation."
+ OvrRunC_progret = "Allows sequential injectors to be returned progressively for a smoother return. Does not make sense to use this with the accel-event option."
+ OvrRunC_progign = "Allows ignition timing transition during fuel cut."
+ OvrRunC_retign = "Allow ignition timing transition during fuel return."
+
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+ fc_transition_time = "Once main fuel cut delay timer has run, this sets a transition time from normal spark advance to the advance during overrun. The timer is also used for the progressive fuel cut.\nTypically set a retarded timing for overrun with a second time for smooth activation."
+ fc_trans_time_ret = "This sets a transition time from overrun to normal conditions and is used with progressive spark return and progressive fuel return.\nIf the throttle is applied above the threshold, the fuel and timing are immediately returned cancelling this timer."
+ fc_ae_time = "The length of time that additional fuel is added after over-run ends to avoid a lean-spike."
+ fc_timing = "The ignition advance during overrun. Typically set to a low number or ATDC timing."
+ fc_ae_pct = "Fuel adder after over-run ends to avoid a lean-spike."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If full fuel cut the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored and the normal hard rev limit is used. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+ tacho_optvar = "Fixed = Use a fixed tachometer scaling of full speed or half speed.\nVariable = fully variable tachometer output.\nTypical settings are 'Fixed' and 'Normal'"
+ tacho_scale = "Percentage scaling of tachometer output, 100% means a true output. Adjust up or down to correct inaccuracies in your tachometer."
+
+ fanctl_settings_on = "Enables fan control"
+ fanctl_settings_idleup = "Whether the fan activation should also raise the idle"
+ fanctl_settings_pin = "Selects the output pin for the fan relay"
+ fanctl_idleup_delay = "How long to wait after raising idle before turning on fan"
+ fanctl_idleup_adder_duty = "PWM open-loop duty cycle to increase by"
+ fanctl_idleup_adder_steps = "Additional stepper idle steps to open"
+ fan_idleup_cl_targetadder = "Target rpm to increase by"
+ fanctl_ontemp = "Turn fan on above this temperature"
+ fanctl_offtemp = "Turn fan off below this temperature (must be lower than "on" temperature)"
+ fanctl_opt2_engineoff = "Allows fan to run in key-on, engine-off situation"
+ fan_ctl_settings_acfan = "Whether the fan should be automatically turned on to help cool the A/C radiator."
+ fan_idleup_tps_offpoint = "Disable fan above this TPS% (reduces load on engine when max power desired.)"
+ fan_idleup_tps_hyst = "Deadband of TPS% "
+ fan_idleup_vss_offpoint = "Disable fan above this vehicle speed (at high speeds airflow through radiator will be sufficient on its own.)"
+ fan_idleup_vss_hyst = "Deadband of VSS"
+
+ tclu_outpin = "Selects output port to connect to lockup solenoid "
+ tclu_enablepin = "Selects optional input port for enable switch (could be used for 4th gear pressure switch.) "
+ tclu_brakepin = "Selects optional input port for brake light switch (brake light unlocks convertor.) "
+ tclu_tpsmin = "Minimum TPS to enable lockup "
+ tclu_tpsmax = "Maximum TPS to enable lockup "
+ tclu_mapmin = "Minimum MAP to enable lockup "
+ tclu_mapmax = "Maximum MAP to enable lockup "
+ tclu_opt_vss = "Optionally allow VSS1 or VSS2 speed input as criteria "
+ tclu_vssmin = "Sets minimum speed for lockup. (Requires VSS input in speed/gear sensors.) "
+ tclu_opt_gear = "Optionally allows gear number as criteria. (Requires gear to be enable in speed/gear sensors.) "
+ tclu_gearmin = "Minimum gear to enable lockup "
+ tclu_delay = "Wait this long after conditions are met before locking up."
+ MAFOption_t = "Selects between 0-5V voltage input (e.g. most MAFs) or frequency input (e.g. GM)\nOff disables the MAF input. "
+ MAFOption = "Selects the hardware input pin where the voltage MAF is connected."
+ MAFOption_f = "Selects from four possible frequency input pins."
+ maf_freq0 = "The frequency the MAF outputs to indicate least air flow."
+ maf_freq1 = "The frequency the MAF outputs to indicate greatest air flow."
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ opentime_opt1_master = "Same = one dead-time across all injectors. Most common.\n\nIndividual = the dead time for each injector is set individually."
+ opentime_opt1 = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ injOpena = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
+ injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)"
+ opentime_opta_pwm = "Enables PWM current limiting (peak and hold) for low ohm injectors."
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ opentime_optb_own = "Enables different settings for bank 2. Only applicable if physically different injectors are on the second bank. Could be used with staged injection.\nFor most engines, this should be set to Off."
+ opentime_opta = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ smallpw_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. "
+ smallpw2_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. \n\nThis setting applies to table switched different injectors."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+
+ staged_extended_opts_pw1off = "Off = when staged, primary and secondary pulse-widths are equal.\n\nOn = when staged, primaries are shut down completely and just secondary injectors are used."
+ staged_extended_opts_use_v3 = "Whether the secondaries are connected to MS3X outputs or to the mainboard 'V3' batch fire outputs."
+ staged_extended_opts_simult = "Whether the batch fire outputs alternate during an engine cycle or fire once together."
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ staged_out1 = "Use a relay output to enable secondary injectors (GM systems) where primary and secondary injectors are wired to the same injector output."
+ staged_out2 = "Use a relay output earlier than secondary injectors (GM air-flaps)."
+ staged_out1_inv = "Allows output polarity sense to be swapped"
+ staged_out2_inv = "Allows output polarity sense to be swapped"
+ staged_out2_time = "How long the pre-output is active before the staging transition begins."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected."
+ fueltemp1 = "If used, specifies a sensor input for fuel temperature."
+ fuelFreq0 = "The low and high frequencies generated by the sensor (e.g. 50Hz, 150Hz for the GM sensor)"
+ flex_pct0 = "The ethanol percentage corresponding to the low and high frequencies."
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 163% for fully ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees. E85 burns more slowly than pure gasoline and will require more advance."
+ ff_tpw0 = "The pulsewidth from the sensor at low and high temperatures (1.0, 5.0ms for GM)"
+ ff_temp0 = "The low/high temperatures at low/high pulsewidths"
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ fuelFreq1 = ""
+ flex_pct1 = ""
+ fuelCorr1 = ""
+ fuelSpkDel1 = ""
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoAlgorithm_auth = "Enables a table of EGO authority based on RPM/load. This allows greater control over when closed-loop EGO is operational and permits variable authority. An authority of zero means there will be no correction made. Normally the RPM and load axes should be set the same as the AFR tables."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ ego_lower_bound = "Only correct above this AFR"
+ ego_upper_bound = "Only correct below this AFR"
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ egonum = "Selects the number of oxygen sensors in use."
+ egoport1 = "Selects where the sensor or controller is connected."
+ egomap1 = "Selects which oxygen sensor applies to this cylinder if multiple sensors are used. When only a single sensor is fitted, ensure all cylinders are set to EGO1."
+
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gmtfi = "GM HEI, Ford TFI and Buick C3I specific options.\nWith HEI7/8 and GM-DIS, this setting enables the 'bypass' output on spark B.\nThe C3I mode enables the 'bypass' and also quick-sync after the cam signal is received.\n Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors (where one vane is shorter than the others) for sequential fuel."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils. For 99% of installs using the MS3X spark outputs, this should be set to 'Going high'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ hardware_spk = "Either MS3X or LEDs. The MS3X outputs are ready to use logic spark outputs. The 'LED' spark outputs will typically only be used on upgrades from MS2 or without the MS3X."
+ hardware_cam = "Either MS3X or JS10 or 'MAP Sensor'. Typically set to MS3X.\nDO NOT select 'MAP Sensor' unless you know why.\n\nThe MS3X input is ready to use. JS10 requires DIY board customisation.\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl or V-twin engine. Used with 'Dual wheel with missing tooth' only. Enable 'Timed min' MAP sampling. Set the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_tach3 = "Selects where the tertiary tach input is connected"
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam or hi-res tach input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_mode3_kick = "Primarily for kick-start engines, the enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\n\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ spk_conf2_dwell = "For time-after-spark, the dwell can be varied with rpm."
+ spk_conf2_dwelltbl = "For 'standard dwell', a table of dwell values can be used. Normally a single dwell value is used."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "For Trigger Return mode only, the middle LED on the case can be used to echo the input signal from the distributor to help in setting up the base timing."
+ spk_mode3_trim = "Enables the adjustment of timing per individual cylinder."
+
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "How often are second trigger (e.g. cam) input pulses received."
+ poll_level_tooth = "Which crank tooth number to poll the cam level at. Default is 1.\nRover 4.6 try 17.\nChanging the tooth no. may also change the phase."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ map_sample_duration = "How many degrees to sample over. The starting angle is set in the curve above."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl."
+
+ fp_opt_mode = "On/Off is used for basic control where the Megasquirt controls the negative side of a relay.\nOpen-Loop PWM provides a table based duty cycle for a fuel pump controller.\nClosed-Loop PWM monitors actual rail pressure and adjusts the duty cycle output to the pump controller to maintain a set differential pressure."
+ fp_ctl_ms = "How often to run the control calculations"
+ fp_out1 = "The output used to control the fuel pump (either to the relay or to a controller.)"
+ fp_freq = "For PWM outputs, this sets the output frequency."
+ fp_opt_inv = "Set to 'Normal' for On/Off. This setting is useful for PWM outputs and should be set to 'Invert' when using one of the mid-current ECU outputs as they invert the signal. The Spark or Digital outputs do not invert the signal and 'Normal' should be used. Note that the on/off fuel pump output is always a low-side driver and connects to the negative side of the relay - changing this setting will have no impact on that."
+ fp_opt_reg = "By preference, fuel systems use a vacuum/boost referenced regulator that maintains line pressure Xbar above inlet pressure. Some GM fuel systems use a fixed fuel pressure referenced to ambient air pressure instead. The vac referenced systems give even injector flow across all inlet pressure conditions. The un-referenced systems give a varying flow and require a calculation within the ECU to compensate. Enabling 'Fixed' here turns on that automatic compensation."
+ fp_opt_safety = "Enables fuel pressure safety system.\nIf the measured fuel pressure drops too low for more than a set time, the engine is shutdown."
+ rail_pressure_psig = "The fuel rail pressure in PSI referenced to manifold pressure. Typically 43.5PSI for many installs."
+ rail_pressure_kpag = "The fuel rail pressure in kPa referenced to manifold pressure. Typically 304kPa for many installs."
+ fp_prime_duty = "The PWM duty cycle used during the priming pulse."
+ fp_off_duty = "The PWM duty cycle used when the pump should be off. Set to 0 for most applications, or 75% for Ford FPDM modules."
+ fp_min_duty = "The minimum PWM duty cycle to be used when running. Set to 0 for most applications, or 5% for Ford FPDM modules."
+ fp_max_duty = "The maximum PWM duty cycle to be used when running. Set to 100 for most applications, or 50% for Ford FPDM modules."
+ fp_press_in = "If used, specifies a Generic Sensor that is configured for fuel pressure in kPa."
+ fp_press_type = "'Gauge' sensors are referenced to atmospheric pressure - with a vac referenced regulator, the reported pressure will drop under vacuum and increase under boost.\n'Differential' sensors are referenced to manifold vacuum/boost - this pressure will typically remain static e.g. 43psi, 3bar.\n'Absolute' sensors are referenced to true vaccum and will read about 14.7psi/1bar when there is no fuel pressure."
+ fueltemp1_corr = "Enables fuel correction based on fuel temperature."
+ fp_Kp = "Closed-loop Proportional term"
+ fp_Ki = "Closed-loop Integral term"
+ fp_Kd = "Closed-loop Differential term"
+
+ hpte_opt_on = "Allows richer mixture after prolonged high power operation to cool piston crown. The richer mixture is calculated by decreasing the AFR target using the number from the curve. The 'high power timer' counts up when above the load/rpm points and counts down below those points. The relevant enrichment is applied until the counter returns to zero."
+ hpte_load = "Only enable above this fuel-load."
+ hpte_rpm = "Only enable above this RPM."
+ shiftlight_opt_pins = "Allows a specific output to be used to switch a shift light. (Do not also enable the same output in the generic on/off outputs.)"
+ shiftlight_opt_gear = "Allows per-gear limits, can be useful to set a lower limit in lower gears to avoid overshooting."
+ shiftlight_limit1 = "Light is on above this RPM."
+ ltt_opt_on = "Enables the long-term fuel trim. This is intended to automatically make minor corrections in fuelling AFTER the engine is fully tuned. It requires EGO control to be enabled and operational."
+ ltt_opt_feedback = "Reports the total %change in 'sensor15' - mainly for testing."
+
+ ltt_samp_time = "How often (in seconds) the code checks the current EGO correction."
+ ltt_agg = "How softly the trim correction is applied."
+ ltt_opt_mode = "Timed - if needed, the trim table is automatically saved to flash\nButton - an external button is used to save the trim table to flash."
+ ltt_but_in = "User operated button to burn trim table from RAM to flash so it is used at next power-on."
+ ltt_int = "Minimum time between automatic burns to flash."
+ ltt_led_out = "LED output is illuminated when RAM trim table exceeds change threshold. The user can then choose to Burn to flash."
+ ltt_thresh = "If the sum of all changes exceeds this threshold than a burn to flash is requested - either automatically or by lighting the LED for user intervention. The purpose is to only make permanent changes if there was a widespread change."
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "How long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle does not leave PID running. Avoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ IdleCtl_vss = "Controls whether the VSS activates closed-loop idle."
+ idleminvss = "Closed-loop idle is disabled above this VSS."
+ pwmidle_tps_threshold = "The TPS value below which the other factors for entering closed-loop idle are considered."
+ pwmidle_rpmdot_threshold = "The value RPMdot must be below before closed-loop idle can be activated."
+ pwmidle_decelload_threshold = "The value load must be above before closed-loop idle can be activated."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_pwm = "Controls the frequency range allowed on the boost control output(s). Mid allows 12-1021 Hz. Slow allows 11.1-78Hz. Most installs use Slow."
+ boost_ctl_pwm_scale = "Frequencies available with Mid solenoid frequency range. Frequency is shared with other pins in the same PWM group.\rPWM group A : Nitrous1/2, Inj1/2\rPWM group B : Boost, Idle, FIDLE, VVT"
+ boost_ctl_pins_pwm = "Output pins available when using the Mid frequency range."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range.\nThe 'Off' setting is only useful when using CAN broadcasting to send the turbo vane position."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_clt_threshold = "Coolant temperature must be above this value before boost control will work."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_flags = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_flags2 = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostKpa = "Maximum desired MAP reading (absolute) before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ tsw_pin_ob = "Allows an input pin to toggle maximum boost to an alternate value."
+ OverBoostKpa2 = "The alternate maximum desired MAP reading (absolute) before overboost protection cuts fuel/spark."
+; overboostcutx = "When using spark cut, controls the number of sparks to cut."
+; overboostcuty = "When using spark cut, controls the number of potential spark events from which to cut spark."
+ boost_feats_tsw = "Allow boost tables to be switched when an input is toggled on/off."
+ boost_gear_switch = "Selects which gear to switch tables on when gear-based boost table switching is enabled."
+ boost_feats_timed = "Launch control must be enabled to use this feature. Times the amount of boost from launch."
+ boost_feats_launch = "Allow a specific target (closed-loop) or duty (open loop) to be specified when launch control is active."
+ boost_launch_duty = "Duty to use when launch is active."
+ boost_launch_target = "Target to use when launch is active."
+ boost_vss = "Requires VSS to be enabled. Allows boost target to be controlled based on vehicle speed or detected gear."
+ boost_vss_tps = "TPS must be above this value for the VSS target boost to be used."
+ boost_geartarg1 = "Boost target for each gear.\n\nTo use these settings you need:\n Boost = On\nClosed-Loop Boost\nGear detection\n Boost vs speed/gear = Gear."
+ boost_ctl_settings_on2 = "Controls whether the second channel of boost control is enabled."
+ boost_ctl_pins_pwm2 = "Output for solenoid."
+ boost_ctl_pins2 = "Output for solenoid."
+ boost_ctl_closeduty2 = "The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty2 = "The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_lowerlimit2 = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl2 = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp2 = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki2 = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd2 = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_sensor2 = "MAP sensor input to monitor."
+
+ alternator_opt_mode = "Control mode for alternator.\nOff = disabled\nOn-Off = most basic control, typically on the 'L' lamp terminal\nOpen-loop frequency = Frequency applied sets target voltage (Ford)\nOpen-loop duty = Duty cycle applied sets target voltage (GM)\nClosed-loop field control = MS3 uses a closed-loop algorithm to control the alternator field to target a voltage (Chrysler)\nHigh-speed feedback field switching = MS3 monitors the voltage at 20kHz and switches the field on or off to match the monitored voltage to the target voltage. (99-05 Miata)"
+ alternator_ctl_ms = "How often to run the control calculations"
+ alternator_controlout = "Output connection to the alternator"
+ alternator_control_inv = "Whether a positive or negative active edge is used"
+ alternator_freq = "Frequency used for control output signal"
+ alternator_lampout = "Output for charge/warning light"
+ alternator_freq_currin = "PWM digital input used for monitoring battery current. (Display only.)"
+ alternator_diff = "Light warning lamp if actual voltage is too far away from target."
+ alternator_freq_monin = "PWM digital input from alternator as load sense - often the 'F' terminal."
+ alternator_freq_moninv = "Whether a positive or negative capture edge is used"
+ alternator_maxload = "Light warning lamp if sensed load is above this limit."
+ alternator_Kp = "Closed-loop Proportional term"
+ alternator_Ki = "Closed-loop Integral term"
+ alternator_Kd = "Closed-loop Differential term"
+ alternator_sensitivity = "Overall sensitivity"
+ alternator_freq_currinv = "Whether a positive or negative capture edge is used"
+ alternator_startdelay = "How long after start before alternator control is enabled. Allows engine to stabilise before alternator load is applied."
+ alternator_ramptime = "Time to ramp up to target voltage"
+ alternator_tempin = "If used, specifies a Generic Sensor that is configured for battery temperature. The temperature is then used to lookup a target charging voltage from the upper curve."
+ alternator_targv = "Target voltage when in 'Charge' mode"
+ alternator_chargetime = "How long after start is considered 'Charge' before transitioning to 'Run' mode."
+ alternator_targvr = "Target voltage during 'Run' mode."
+ alternator_wot = "TPS% to trigger Wide Open Throttle (WOT) mode"
+ alternator_wotv = "Target voltage when in WOT mode, typically set lower than normal to free up some engine power."
+ alternator_wottimeout = "Timeout before WOT mode ends and target voltage returns to charge or run mode."
+ alternator_overrv = "Target voltage when over-run fuel cut is active. Setting a slightly higher voltage here will give a minor 'regenerative braking' effect."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ vehigh = "The maximum for VE values."
+ wue_lpg = "For most installs, setting warmup enrichment (WUE) to below 100% indicates a serious tuning mistake and the code will flag up a 'Configuration Error' to alert the user. In rare conditions such as using LPG (propane) for fuel, it can be valid. This setting disables the Config Error warning message."
+ prefSpeedUnits = "Chooses the speed units - either Mile-per-hour or Kilometres-per-hour\nClose the page and re-open after changing."
+ prefLengthUnits = "Chooses the size units - either metres or inches\nClose the page and re-open after changing."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+ maxafr_opt1_on = "Enables the AFR safety system"
+ maxafr_opt1_led = "Sets an on/off warning output"
+ maxafr_opt1_load = "Selects the load axis on the AFR difference table"
+ maxafr_en_load = "Only check above this TPS/kPa"
+
+ maxafr_en_rpm = "Only check above this RPM"
+ maxafr_en_time = "Specifies a wait time before taking action, to prevent transients from tripping."
+ maxafr_spkcut_time = "Cuts spark as the first stage in the system for this long."
+ maxafr_ret_tps = "throttle is below this limit."
+ maxafr_ret_map = "Fuel and spark remain cut until MAP (boost) is below this limit."
+ maxafr_ret_rpm = "Fuel and spark remain cut until RPM is below this limit."
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ dlyct = "Sets the CPU hardware based noise filter. Typically a small number or zero."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ feature7_batchcrank = "Allows fuel to be fired on each tach event in a batch-fire mode on a sequential install. Can be useful in cold climates to allow large cranking fuel flow."
+ feature7_cranktaper = "Allows a taper curve on crank pulsewidth, either to reduce pulsewidth over time, or to allow an initial large shot of fuel."
+ feature7_crtpunits = "Selects units of ignition events or 0.1 seconds."
+ alternate_blend = "Enables a blend curve between cranking curves."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ feature3_aseunit = "Selects whether After Start Enrichment (ASE) uses Seconds or Ignition Events as the timer."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_auto = "Whether the system operates from a pushbutton or automatically."
+ shift_cut_fuel = "Whether to also cut fuel."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_gear = "Option to add additional spark cut time per gear."
+ shift_cut_add12 = "Additional time to cut spark for this shift."
+ shift_cut_add23 = "Additional time to cut spark for this shift."
+ shift_cut_add34 = "Additional time to cut spark for this shift."
+ shift_cut_add45 = "Additional time to cut spark for this shift."
+ shift_cut_add56 = "Additional time to cut spark for this shift."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+ shift_cut_rpm12 = "Shift at this rpm."
+ shift_cut_rpm23 = "Shift at this rpm."
+ shift_cut_rpm34 = "Shift at this rpm."
+ shift_cut_rpm45 = "Shift at this rpm."
+ shift_cut_rpm56 = "Shift at this rpm."
+
+ ac_idleup_settings = "Enables the A/C idle-up feature."
+ ac_idleup_settings_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Normal' settings should be used. In certain installations with appropriate wiring, the 'Inverted' setting can be required."
+ ac_idleup_io_out = "Output to engage compressor."
+ ac_idleup_io_in = "Switch input."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps= "Additional idle steps to add when A/C is active."
+ ac_idleup_cl_targetadder= "Bump up RPM by this much when A/C is active."
+ ac_idleup_cl_lockout_mapadder = "When A/C is active the engine load will increase. Set this number so that the additional load doesn't kick you out of closed-loop idle."
+ ac_idleup_tps_offpoint = "Disable A/C when TPS is above this. (Reduces load on engine when driver demands full power.)"
+ ac_idleup_tps_hyst = "Deadband in TPS to prevent bouncing on/off."
+ ac_idleup_vss_offpoint = "Disable A/C above this speed."
+ ac_idleup_vss_hyst = "Deadband in VSS to prevent bouncing on/off."
+ ac_idleup_max_rpm = "Maximum allowed RPM for AC."
+
+ idleadvance_on = "Enables Idle-advance feature"
+ idle_special_ops_timing_assist = "Enables additional advance curve linked to closed-loop idle target. This allows you to use timing control to assist with idle speed regulation."
+ idleveadv_to_pid_idleadv = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ idleve_on = "Enables Idle-VE feature"
+ idleveadv_to_pid_idleve = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleve_tps = "Only activate below this TPS."
+ idleve_rpm = "Only activate below this RPM."
+ idleve_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleve_clt = "Only activate above this coolant temperature. (Typically idle-VE does not work too well during warmup.)"
+ idleve_vsson = "Selects whether VSS1 must be zero before idle-VE is activated."
+ idleve_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level\nInternal: internal knock module."
+ knkport = "Input for knock on/off signal"
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied. When using the suggested Datalog/Tableswitch/Launch input pin set to 'None'"
+ knkport_an = "Input for knock analogue signal"
+ knk_option_wind = "Either read single analogue value at end knock window or peak detect."
+ knk_pin_out = "Optional digital output for knock window signal."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_step_adv = "The ignition advance step size after knock has stopped."
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+ knock_bpass = "This should be adjusted to suit the resonant frequency of you engine."
+ knock_int = "How long the signal is sampled for."
+ knock_conf_num = "How many knock sensors (1 or 2)"
+ knock_conf_launch = "Knock detection can be disabled when launch/flatshift are active to prevent false detection."
+ knock_conf_percyl = "Enables linking of knock signal to cylinder number. This only works if coil-on-plug or sequential fuel are enabled."
+ knock_conf_percylact = "Enables per-cylinder timing adjustment for knock.\nRequires a knock feedback system such as the internal one that reports knock per-cylinder."
+ knock_conf_debug = "Debug option to record per-cylinder knock retards into 'sensors' variables."
+ knock_gain01 = "Compensate for sensor sensitivity and distance between cylinder and sensor."
+ knock_sens01 = "Pick which sensor to use for each cylinder."
+ AE_options = "Selects between time-based accel enrichment or pump-style enrichment."
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value."
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ feature7_aeevents = "Length of enrichment pulse is measured in ignition events or seconds.\n(Primary and secondary fuel.)"
+ tpsasync_events = "Length of enrichment pulse."
+ tpsasync2_events = "Length of enrichment taper."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value."
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+
+ mapThresh2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ aeEndPW2 = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested.\n(Second fuel.)"
+ taeTime_events2 = "Length of enrichment pulse.\n(Second fuel.)"
+ aeTaperTime_events2 = "Length of enrichment taper.\n(Second fuel.)"
+ taeTime2 = "Length of main enrichment pulse.\n(Second fuel.)"
+ aeTaperTime2 = "Length of 'taper' time after main enrichment pulse.\n0 is suggested.\n(Second fuel.)"
+ tpsThresh2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ tdePct2 = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested.\n(Second fuel.)"
+ taeColdA2 = "At full cold (-40C/F), add this amount to the enrichment.\n(Second fuel.)"
+ taeColdM2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+
+ accel_mapdot_threshold = "Trigger enrichment above this MAPdot value."
+ accel_tpsdot_threshold = "Trigger enrichment above this TPSdot value."
+ accel_CLT_multiplier = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ accel_blend_percent = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+ accel_mapdot_threshold2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ accel_tpsdot_threshold2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ accel_CLT_multiplier2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ accel_blend_percent2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+ als_in_pin = "Enables the Anti-Lag system and selects the Enable input."
+ als_maxtps = "Disable ALS above this TPS%."
+ als_minrpm = "Disable ALS below this RPM."
+ als_maxrpm = "Disable ALS above this RPM."
+ als_maxmat = "Disable ALS above this manifold temperature."
+ als_maxtime = "Only allow ALS to be active for this long to reduce temperature build-up."
+ als_pausetime = "Enforce a minimum time between activations to reduce temperature build-up."
+ als_minclt = "Disable ALS below this coolant temperature."
+ als_maxclt = "Disable ALS above this coolant temperature."
+ als_opt_fc = "Whether cyclic fuel cut should be used. ONLY for use with sequential fuel."
+ als_opt_sc = "Whether cyclic spark cut should be used."
+ als_opt_ri = "Whether roving idle fuel cut should be used."
+ als_opt_idle = "Enables the idle valve in ALS mode."
+ als_iac_duty = "What valve duty should be used to give the extra air needed for ALS."
+ als_iac_steps = "What valve steps should be used to give the extra air needed for ALS."
+ als_out_pin = "Enables an additional output in ALS mode for extra-air valve."
+ als_opt_pwmout = "Enables an additional pulsed output in ALS mode."
+ als_pwm_opt2 = "Pulsed output."
+ als_pwm_duty = "Duty cycle on pulsed output when ALS is active."
+ als_pwm_opt_freq = "Frequency on pulsed output."
+
+ vvt_opt1_on = "Enables VVT control and selects number of cams to control."
+ vvt_opt1_filter = "Enables a filter on the VVT teeth to reject false triggers."
+ vvt_opt4_decode = "Enables a special decoder if applicable.\n\nThe BMW S54 decoder also supports S62. Wire main VVT outputs to opening solenoids 1, wire the complementary outputs to closing solenoids 2. Use 20Hz."
+ vvt_opt6_freq = "VVT solenoid PWM frequency."
+ vvt_opt2_pid2 = "Chooses between basic on/off mode or variable position control."
+ vvt_opt5_add1 = "Whether to adjust injection timing based on cam position and which cam."
+ vvt_opt5_add2 = "If injector timing is being adjusted, whether to adjust it based on target or actual current position."
+ vvt_onoff_ang = "Angle to advance injector timing by when VVT is active."
+ vvt_opt7_yaxis = "The load unit used for the Y-axis on the lookup tables."
+ vvt_opt1_int = "How often to run the calculations.\nSynced to cam is most typical meaning that the calculations are run as soon as new cam tooth passes the sensor."
+ vvt_ctl_ms = "Specifies a fixed calculation interval."
+ vvt_opt5_err = "Whether error checking should be applied to the measured cam angles."
+ vvt_opt1_tst = "Selects a cam output to test."
+ vvt_test_duty = "What duty cycle to output to the VVT solenoid."
+ vvt_opt2_use_hold_intake = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty = "Specific hold duty."
+ vvt_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt2_use_hold_exhaust = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty_exh = "Specific hold duty."
+ vvt_ctl_Kp_exh = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki_exh = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd_exh = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt1_dir_exhaust = "Whether the exhaust cam table is a table of advances (old method) or a table of retards (matches most exhaust VVTs.)"
+ vvt_opt3_cam1 = "Cam1 is always the main cam input."
+ vvt_opt2_cam1pol = "Cam1 capture polarity is defined on the Ignition Options page."
+ vvt_tth1 = "The number of teeth on the cam1 trigger wheel."
+ vvt_out1 = "VVT1 solenoid output"
+ vvt_min_ang1 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang1 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt1 = "Whether this is an intake or exhaust cam."
+ vvt_cam1tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam1tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out1_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam2 = "The input for cam2."
+ vvt_opt2_cam2pol = "The capture polarity for cam2.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth2 = "The number of teeth on the cam2 trigger wheel."
+ vvt_out2 = "VVT2 solenoid output"
+ vvt_min_ang2 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang2 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt2 = "Whether this is an intake or exhaust cam."
+ vvt_cam2tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam2tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out2_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam3 = "The input for cam3."
+ vvt_opt2_cam3pol = "The capture polarity for cam3.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth3 = "The number of teeth on the cam3 trigger wheel."
+ vvt_out3 = "VVT3 solenoid output"
+ vvt_min_ang3 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang3 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt3 = "Whether this is an intake or exhaust cam."
+ vvt_cam3tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam3tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out3_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam4 = "The input for cam4."
+ vvt_opt2_cam4pol = "The capture polarity for cam4.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth4 = "The number of teeth on the cam4 trigger wheel."
+ vvt_out4 = "VVT4 solenoid output"
+ vvt_min_ang4 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang4 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt4 = "Whether this is an intake or exhaust cam."
+ vvt_cam4tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam4tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out4_dir = "What direction the cam moves with output duty."
+ vvt_minclt = "VVT only operates when coolant is above this temperature."
+ vvt_minduty1 = "Minimum duty cycle for VVT solenoids"
+ vvt_maxduty1 = "Maximum duty cycle for VVT solenoids"
+ vvt_slew = "Limits rate of change of VVT target to minimise overshoot caused by rapid target changes or low oil pressure at low rpms.\nDefault is 2.0deg per cam event."
+ vvt_softout1 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout2 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout3 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout4 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+
+ f5_0_tsf = "Enables fuel table switching."
+ f5_0_tsf_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_f = "Table switch input."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "kPa threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching."
+ f5_0_tss_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_s = "Table switch input."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "kPa threshold."
+ tss_tps = "TPS threshold."
+ tsw_pin_rf = "Enables ReqFuel switch input."
+ ReqFuel_alt = "ReqFuel to use when switched."
+ tsw_pin_afr = "Enables AFR table switch input."
+ tsw_pin_stoich = "Enables Stoich switch input."
+ stoich_alt = "Stoich to use when switched."
+ dualfuel_sw_on = "Enables Dual Fuel support (e.g. LPG or secondary race fuel on a different system.)"
+ dualfuel_opt_mode = "Switching = swaps from fuel 1 to fuel 2.\nDual Table = parallel fuel tables allowing simultaneous control of both fuels. e.g. mapped methanol under boost.\nFlex Blend = ethanol %age from flex fuel sensor is used to blend between two sets of tables."
+ dualfuel_opt_out = "Shared outputs = used when two sets of injectors share one set of control wires from the ECU and have a relay to switch +12V.\nDifferent outputs = where each main and secondary injectors are wired to different outputs."
+ dualfuel_pin = "Input for Dual Fuel switching."
+ dualfuel_sw_fuel = "Whether to switch fuel tables."
+ dualfuel_sw_spk = "Whether to switch spark tables."
+ dualfuel_sw_afr = "Whether to switch AFR tables."
+ dualfuel_sw_rf = "Whether to switch ReqFuel."
+ dualfuel_sw_stoich = "Whether to switch Stoich."
+ dualfuel_sw_wue = "Whether to switch warmup curves."
+ dualfuel_sw_ase = "Whether to switch afterstart curves."
+ dualfuel_sw2_prime = "Whether to switch priming curves."
+ dualfuel_sw2_crank = "Whether to switch cranking pulse curves."
+ dualfuel_sw2_injp = "Whether to switch injector parameters."
+ dualfuel_sw2_smpw = "Whether to switch small pulsewidth curves."
+ dualfuel_sw2_ob = "Whether to switch overboost limits."
+ dualfuel_sw2_boosw = "Whether to switch boost tables."
+ dualfuel_sw2_ae = "Whether to switch accel enrich settings and curves."
+ dualfuel_opt_temp = "Enable secondary fuel temperature adjustment."
+ dualfuel_temp_sens = "Secondary fuel temperature input."
+ dualfuel_opt_press = "Enable secondary fuel pressure adjustment."
+ dualfuel_press_sens = "Secondary fuel pressure input."
+ dualfuel_press_type = "Sensor type: Gauge, Absolute, Differential"
+
+ vss_opt0_1 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss1_an = "Input for analogue 0-5V speed sensor."
+ vss1_an_max = "Speed at 5V input."
+ vss_opt1 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia1 = "Overall diameter of wheel and tyre."
+ vss1_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth1 = "Number of teeth on speed pickup reluctor."
+ vss1_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss1_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_2 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss2_an = "Input for analogue 0-5V speed sensor."
+ vss2_an_max = "Speed at 5V input."
+ vss_opt2 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia2 = "Overall diameter of wheel and tyre."
+ vss2_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth2 = "Number of teeth on speed pickup reluctor."
+ vss2_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss2_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_3 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss3_an = "Input for analogue 0-5V speed sensor."
+ vss_opt3 = "Selects digital pulse input or input via CAN from expansion board."
+ vss3_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss_opt0_4 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss4_an = "Input for analogue 0-5V speed sensor."
+ vss_opt4 = "Selects digital pulse input or input via CAN from expansion board."
+ vss4_pwmseq = "CAN PWM port for capturing from expansion board."
+ vssout_opt = "Digital pulsed output to drive a speedometer."
+ vssout_optunits = "Type of output conversion."
+ vssout_scale = "Scaling factor."
+ vssdot_int = "How often to calculate VSSdot (acceleration.)"
+ vssdotLF = "Smoothing factor on VSSdot. 100% = no smoothing, 15% = maximum smoothing."
+ fdratio1 = "Final drive gear ratio."
+ gear_method = "How to determine gear no.\nVSS/RPM - compares the vehicle speed with RPM and the gear ratio table.\nAnalogue - uses a 0-5V analogue gear-position-sensor input.\nCAN gear# - fetches a gear number from an expansion board over CAN."
+ gear_no = "How many gears."
+ gear1ratio = "Ratio of each gear."
+ gear_port_an = "Analogue input for gear-position-sensor."
+ gear0v = "Nominal voltage in each position."
+ vss_samp_int = "How often to sample/accumulate VSS teeth. Normally 50ms is ok and gives smoothing.\nHard accelerating vehicles will need to lower this number for improved zero-speed response."
+
+ ss_opt1 = "Selects digital pulse input."
+ reluctorteeth3 = "Number of pickup teeth on reluctor."
+ ss_opt1_spd = "Where possible, configures this as a high-speed input."
+ ss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ ss_opt2 = "Selects digital pulse input."
+ reluctorteeth4 = "Number of pickup teeth on reluctor."
+ ss_opt2_spd = "Where possible, configures this as a high-speed input."
+ ss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ accXport = "Analogue 0-5V input for X-axis."
+ accYport = "Analogue 0-5V input for Y-axis."
+ accZport = "Analogue 0-5V input for Z-axis."
+ accXcal1 = "Calibration value when X is -1g. See the manual."
+ accXcal2 = "Calibration value when X is +1g. See the manual."
+ accYcal1 = "Calibration value when Y is -1g. See the manual."
+ accYcal2 = "Calibration value when Y is +1g. See the manual."
+ accZcal1 = "Calibration value when Z is -1g. See the manual."
+ accZcal2 = "Calibration value when Z is +1g. See the manual."
+ accxyzLF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ log_style_on2 = "Enables SDcard datalogging.\nAlways - log always.\nButton - use a button to start and stop logs.\nTrigger - start logs when trigger condition is met."
+ log_style2_but = "Digital switch input."
+ log_style4_opt = "Type of trigger to start logging."
+ log_trig_rpm = "Start logging above this RPM."
+ log_trig_tps = "Start logging above this TPS or MAP kPa"
+ log_trig_map = "Start logging above this MAP"
+ sdpulse_out = "Typically used to synchronise a video camera recording, sends a low pulse at the start of a datalog."
+
+ log_style_led = "Output for LED or indicator lamp."
+ log_style_block = "Type of datalog to record.\n64byte = regular SDcard datalog.\n64byte+stream = datalog plus simulataneous audio soundtrack."
+ log_style2_samp = "Timed = suitable for all installs.\nCycle/tooth = for developer use."
+ log_int = "How often to record data.\nLower limit for most cards is 3ms."
+ log_length = "How long each datalog file should be. After this time a new logfile is started."
+ log_style3_adc = "Optional analogue (sound) stream input."
+ log_style_ledspd = "Unless advised otherwise, use 'Normal'"
+ log_style_gps = "Enables the recording of interleaved GPS data.\n\nRequires a CAN connected GPS module."
+
+ egt_num = "Number of EGT channels to enable."
+ egtcal_temp0 = "Temperature at 0V."
+ egtcal_tempmax = "Temperature at 5V - depends on interface design."
+ egt_conf_action = "EGT over-temperature reactions"
+ egt_warn = "Turn on warning output above this temperature."
+ egt_addfuel = "Bump up pulsewidth on over-temperature."
+ egt_conf_bank = "Most installs should use 'Both' Bank1,2 only apply to Staged primary and secondaries."
+ egt_conf_shutdown = "Enables engine shutdown if above max temperature or too long above warning limit."
+ egt_conf_percyl = "For sequential fuel ONLY, allows fuel to be added per cylinder.\nRequires that EGT1 = #1, EGT2 = #2 etc."
+ egt_time = "Shutdown if above warning temperature for this long."
+ egt_max = "Shutdown if temperature exceeds this maximum (even for a split second.)"
+ egt1port = "Analogue 0-5V input from thermocouple. (Note that an interface circuit is required.)"
+
+ sensor01_source = "Analogue 0-5V input."
+ sensor01Alias = "User defined name assigned to this sensor input. e.g. pre-intercooler air temperature."
+ sensor01_trans = "Type of transformation from raw input to useful numbers.\nRaw = raw 0-1023 ADC count\nLinear = useful for many ratiometric sensors with a linear scale.\nSame as XXX applies the same transform as other sensors on your ECU.\nGM calibration = same transform as GM air/coolant thermistor sensors."
+ sensor01_val0 = "The number you want to see when 0V is applied"
+ sensor01_max = "The number you want to see when 5V is applied"
+ sensor01LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ opt142_gs_share = "Normally each input can only be used by one feature. This setting allows inputs to be shared between generic sensors and other features. (Obviously you can still only connect one sensor to each input!)"
+ sensor_temp = "Selects degF/degC for temperature units when using CLT/MAT calibrations. This is set on the Generic Sensors page."
+
+ tc_opt_on = "Enables traction control"
+ tc_led_out = "Light output when traction is active."
+ tc_opt_method = "Traction control method:\nPerfect Run = a drag race strategy for a single pass comparing actual VSS against best possible.\nVSS %slip = compares VSS1 to VSS2 and detects slip%.\nPerfect Run RPM = similar to perfect run but without VSS for classes where that is not allowed.\nSwitch input = for use with an external slip detector."
+ tc_enin = "Optional digital switch input"
+ tc_mintps = "Only enable traction control above this TPS%"
+ tc_minmap = "Only enable traction control above this MAP"
+ tc_minvss = "Only enable traction control above this VSS"
+ tc_opt_slipcurve = "Whether to use a fixed slip% limit or an adjustable curve."
+ tc_slipthresh = "Fixed slip% limit."
+ tc_opt_n2o = "Only on/off control is presently supported."
+ tc_opt_bank = "Which bank of injectors to add fuel to.\nNormally select 'Both'\nWhen staging bank 1 = primary, bank 2 = secondary"
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_vss = "Enables wheel speed based launch instead of switch input. Select the wheel-speed sensor for a non-driven wheel."
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_opt_bank = "Allows fuelling to be changed while the launch limiter is on."
+ launch_addfuel = "The raw millisecond pulsewidth change to make (+/-)"
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ launchlimopt_adv = "Basic = limiter type is automatically set\nAdvanced = Choice of hard limiter type and spark cut zone.\n\nApplies to launch and flat-shift."
+ launchlimopt_cut = "Selects the spark cut limiter type.\nRandom Progressive = random cut that increases linearly across the spark cut zone.\nRandom Ramped = random cut that ramps up across the spark cut zone.\nFixed 5/7 = non-progressive rotational cut. 5 missed sparks, 2 actual sparks, repeat.\nFixed 4/5 = non-progressive rotational cut. 4 missed sparks, 1 actual spark, repeat."
+ launchvsstime = "Once you have been moving for this number of seconds, VSS based launch control is locked out until next stop.\nSet to zero to make it permanently active (no timeout.)"
+ launch_fcut_rpm = "During the flat-shift up-shift and the revs are falling, the fuel is cut off until the revs have fallen below this set point to reduce exhaust explosions."
+ launch_maxvss = "Prevents launch from activating once you are rolling."
+ launchvss_minvss = "Below this speed the wheel speed launch is re-armed.\n\nTypically set to a very low number."
+ launch_opt_vssgear = "Enables/disables checking of gear no.\n\n(Requires gear detection to be enabled.)"
+ launchvss_maxgear = "Wheel speed launch is applied up to this gear number.\n\ne.g. 2 means launch can be used in 1st and 2nd."
+ launchcutzone = "The RPM band below the hard limit where spark cutting begins.\nCan be set to 0 to apply spark cutting only at the hard limit when using the fixed limiter types.\nThe random cuts need an RPM band to operate across 200+ RPM suggested."
+ launchcuttiming = "The ignition timing during the cut zone and at the hard limit.\nOnly applies to launch - not flat-shift."
+ flats_minvss = "Prevents flat-shift from activating at low speeds e.g. just after launch"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+ launch_opt_retard = "Enables feature to feed in timing after launch."
+ launch_var_on = "Input for 0-5V potentiometer used to vary launch RPM."
+ launch_var_low = "With a 0V input, the launch hard limit is set to this RPM."
+ launch_var_up = "With a 5V input, the launch hard limit is set to this RPM."
+ launch_3step_in = "Input for 3-step switch. Could be used as burnout limiter."
+ launch_sft_deg3 = "The timing is retarded to this angle when the 3-step is on."
+ launch_hrd_lim3 = "Sets the hard limit RPM when the 3-step is on."
+ timedout1_in = "Input for transbrake button."
+ timedout1_out = "Output for transbrake solenoid."
+ timedout1_offdelay = "Delay between button release and transbrake release."
+ tcs_in = "Input for Turbo Staging control"
+ tcs_offtime = "How long to release trans-brake for on each move step. This should be set long enough to move the car a little without gaining any speed."
+ tcs_ontime = "How long the trans-brake should be re-activated for between each step. This should be set long enough to fully grab again."
+ tcs_moves = "How many moves (trans-brake release steps) on the first press of the button. Each subsequent press of the button gives a single move."
+ tstop_out = "Output for throttle-stop solenoid."
+ tstop_delay = "Delay after launch before solenoid is activated."
+ tstop_hold = "How long to keep solenoid on for."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt2_prog = "Selects between On/Off or Progressive control mode."
+ N2Oopt2_prog_time = "Chooses between Time, RPM or VSS as control factor."
+ N2Oopt2_prog_freq = "Selects solenoid frequency. Typically around 13Hz."
+ N2Oopt2_prog_freqf = "Allows a different fuel solenoid frequency if different fuel and nitrous outputs are used. Typically around 13Hz."
+ N2Oopt_4 = "Allows optional AFR safety system to use alternate AFR targets when nitrous is active."
+ N2Oopt_5 = "Allows nitrous stage 1 during launch (2-step)."
+ N2Olaunchmaxmap = "Maximimum MAP when nitrous is used during launch to build boost."
+ n2o1n_pins = "Output for stage 1 nitrous solenoid."
+ n2o1f_pins = "Output for stage 1 fuel solenoid."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a 12V signal.)"
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ n2o2n_pins = "Output for stage 2 nitrous solenoid."
+ n2o2f_pins = "Output for stage 2 fuel solenoid."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ water_freq_on = "Enables the feature."
+ water_pins_pump = "Output to pump relay."
+ water_freq_type = "'Off' - no valve output (used fixed nozzle)\n'Slow' - slow speed valve output with chosen PWM duty cycle\n'Fast' - valve switches at injector speed with chosen PWM duty cycle."
+ water_freq = "Valve operating frequency."
+ water_pins_valve = "Output for valve."
+ water_tps = "Only enable above this TPS%."
+ water_rpm = "Only enable above this RPM."
+ water_map = "Only enable above this MAP."
+ water_mat = "Only enable above this MAT."
+ water_pins_in_shut = "Allows a low fluid level sensor switch input.\n\nThe switch must be wired so that the input is grounded when the level is ok and no connection is made in low or fault conditions.\n\nIf fluid reserve is low when water injection is required, for safety the engine will be shutdown using the parameters in the AFR Safety System."
+
+ oilpress_in = "Sensor channel used for oil pressure input."
+ oilpress_out = "Output for warning lamp."
+
+ fp_drop_load = "Only check for low pressure above this engine load (e.g. MAP, TPS, MAFload)"
+ fp_drop_rpm = "Only check for low pressure above this RPM."
+ fp_drop_psig = "Allowed drop in pressure below target."
+ fp_drop_kpag = "Allowed drop in pressure below target."
+ fp_drop_time = "If fuel pressure stays too low for more than this time, the engine is shutdown using the AFR safety settings."
+
+ pwm_opt_on_a = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_a = "Output for relay/solenoid."
+ pwm_opt_freq_a = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_a = "Output is on when the table/curve is above this number."
+ pwm_offbelow_a = "Output is off when the table/curve is below this number."
+ pwm_opt_load_a = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_a = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_b = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_b = "Output for relay/solenoid."
+ pwm_opt_freq_b = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_b = "Output is on when the table/curve is above this number."
+ pwm_offbelow_b = "Output is off when the table/curve is below this number."
+ pwm_opt_load_b = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_b = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_c = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_c = "Output for relay/solenoid."
+ pwm_opt_freq_c = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_c = "Output is on when the table/curve is above this number."
+ pwm_offbelow_c = "Output is off when the table/curve is below this number."
+ pwm_opt_load_c = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_c = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_d = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_d = "Output for relay/solenoid."
+ pwm_opt_freq_d = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_d = "Output is on when the table/curve is above this number."
+ pwm_offbelow_d = "Output is off when the table/curve is below this number."
+ pwm_opt_load_d = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_d = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_e = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_e = "Output for relay/solenoid."
+ pwm_opt_freq_e = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_e = "Output is on when the table/curve is above this number."
+ pwm_offbelow_e = "Output is off when the table/curve is below this number."
+ pwm_opt_load_e = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_e = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_f = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_f = "Output for relay/solenoid."
+ pwm_opt_freq_f = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_f = "Output is on when the table/curve is above this number."
+ pwm_offbelow_f = "Output is off when the table/curve is below this number."
+ pwm_opt_load_f = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_f = "Chooses between a 3D mapped table or a 2D curve."
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll_id = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ canpwm_clk = "Clock frequency on expansion board. See documentation."
+ canpwm_pre = "Prescaler on expansion board. See documentation."
+ canpwm_div = "Divider on expansion board. See documentation."
+ enable_pollADC= "Enables capturing analogue inputs from expansion board."
+ canadc_opt1 = "Enables this group of analogue inputs."
+ canadc_id1 = "CANid of expansion board."
+ canadc_tab1 = "Table number on expansion board."
+ canadc_off1 = "Data offset on expansion board."
+ can_poll_id_ports = "CANid of expansion board for digital inputs/outputs."
+ poll_tableports = "Table number on expansion board."
+ enable_pollports_digin = "Enables using digital inputs from expansion board."
+ can_poll_digin_offset = "Data offset on expansion board."
+ enable_pollports_digout = "Enables using on/off outputs on expansion board."
+ can_poll_digout_offset = "Data offset on expansion board."
+ enable_pwmout = "Enables sending PWM/pulsed outputs to expansion board."
+ enable_pwmout255 = "Forces PWM duty cycle to 0-255 range.\ne.g. generic PWMs operate on a 0-100 scale, but your remote device might require a 0-255 scale."
+ can_pwmout_id = "CANid of expansion board."
+ can_pwmout_tab = "Table number on expansion board."
+ can_pwmout_offset = "Data offset on expansion board."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+; can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+
+ can_enable_on = "Master enable/disable for all CAN polling and broadcasting."
+ vss1_can_id = "CANid of expansion board."
+ vss1_can_table = "Table number on expansion board."
+ vss1_can_offset = "Data offset on expansion board."
+ vss1_can_size = "How the data is stored on the expansion board. See documentation."
+ vss2_can_offset = "Data offset on expansion board."
+ vss2_can_size = "How the data is stored on the expansion board. See documentation."
+ gear_can_offset = "Data offset on expansion board."
+ vss3_can_offset = "Data offset on expansion board. Uses same size as VSS1"
+ vss4_can_offset = "Data offset on expansion board. Uses same size as VSS2"
+
+ opt142_rtc = "Enables the optional on-board real time clock or selects a clock on an expansion board via CAN."
+ rtc_trim = "Applies a trim to correct for slow/fast running clock."
+ can_poll_id_rtc = "CANid of expansion board."
+ poll_table_rtc = "Table number on expansion board."
+ poll_offset_rtc = "Data offset on expansion board."
+
+ can_poll2_ego2 = "Enables collecting EGO/AFR from innovate widebands on expansion board."
+ can_poll2_egolag = "Enables or disables the 'lag factor' smoothing for EGO data collected from a CAN device. Typically set to Off."
+ can_ego_id = "CANid of expansion board."
+ can_ego_table = "Table number on expansion board."
+ can_ego_offset = "Data offset on expansion board."
+ can_poll2_gps = "Whether to enable CAN polling for GPS data."
+ can_gps_id = "CANid of expansion board."
+ can_gps_table = "Table number on expansion board."
+ can_gps_offset = "Data offset on expansion board."
+ can_poll2_vss = "How VSS data is captured:\nPoll = use polling\nListen = CAN receiving will be configured to listen for messages."
+
+ cel_opt_on = "Enables sensor checking feature."
+ cel_port = "Output for warning lamp.\nIt is STRONGLY SUGGESTED that a lamp be connected when the CEL feature is used."
+ cel_opt_flash = "Selects whether CEL lights up solidly or flashes codes to aid diagnostics.\n\nNumber of flashes and fault:\n2=MAP 3=MAT 4=CLT 5=TPS 6=BATT 7=AFR0 8=SYNC 9=EGT 10=FLEX 11=MAF 12=KNOCK 13=CAM 14=OIL 15=FUELPRESS 16=EGTSHUT 17=AFRSHUT"
+ cel_opt_when = "Do you want the light on when the engine is off?"
+ cel_runtime = "Period after-start before sensors are checked."
+ cel_opt2_map = "Enables checking of the MAP sensor."
+ map_minadc = "Minimum raw ADC 0-1023 input allowed."
+ map_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ map_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ map_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_mat = "Enables checking of the MAT sensor."
+ mat_minadc = "Minimum raw ADC 0-1023 input allowed."
+ mat_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ mat_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_clt = "Enables checking of the CLT sensor."
+ clt_minadc = "Minimum raw ADC 0-1023 input allowed."
+ clt_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ clt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_tps = "Enables checking of the TP sensor."
+ tps_minadc = "Minimum raw ADC 0-1023 input allowed."
+ tps_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ tps_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+
+ cel_opt2_batt = "Enables checking of the battery voltage input."
+ batt_minv = "Minimum voltage allowed."
+ batt_maxv = "Maximum voltage allowed."
+ batt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_afr0 = "Enables checking of the EGO/AFR input."
+ afr_min = "Minimum AFR allowed."
+ afr_max = "Maximum AFR allowed."
+ afr_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ afr_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_sync = "Enables checking for sync-losses."
+ cel_synctol = "Set CEL above this many sync-losses."
+ cel_opt2_egt = "Enables checking of the EGT input."
+ egt_minvalid = "Minimum EGT allowed."
+ egt_maxvalid = "Maximum EGT allowed."
+ egt_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ egt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt3_flex = "Enables checking of the Flex-fuel sensor input."
+ cel_opt_adc = "Sets gauge 'status5' to record 'fluctuations' number or raw ADC count for the chosen sensor input."
+ cel_opt_stat = "Selects input for 'status5' value. Observe the dash gauge and examine datalogs to determine sensible min/max fluctuation limits and ADC counts for each sensor input in turn."
+ cel_action1_map = "Whether an invalid MAP reading will trigger limp mode."
+ cel_action1_map_an = "Whether an invalid MAP reading will enable the fallback MAP table."
+
+ cel_action1_mat = "Whether an invalid MAT reading will trigger limp mode."
+ cel_mat_default = "If MAT fails, assume MAT is this temperature."
+ cel_action1_clt = "Whether an invalid CLT reading will trigger limp mode."
+ cel_clt_cold = "If CLT fails, start engine using this assumed temperature."
+ cel_clt_warm = "If CLT fails, assume this is the warmed up engine temperature."
+ cel_warmtime = "If CLT fails, assume engine takes this long to warmup."
+ cel_action1_tps = "Whether an invalid TPS reading will trigger limp mode."
+ cel_action1_batt = "Whether an invalid battery voltage reading will trigger limp mode."
+ cel_action1_ego = "Whether an invalid AFR/EGO reading will trigger limp mode."
+ cel_action2_flex = "Whether an invalid Flex-fuel reading will trigger limp mode."
+ cel_action2_egt = "Whether an invalid EGT reading will trigger limp mode."
+ cel_revlim = "Rev limiter when in limp mode."
+ cel_overboost = "Maximum boost when in limp mode. Typically 102kPa for no boost."
+ cel_boost_duty = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_boost_duty2 = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_retard = "Retard timing by this amount when in limp mode."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Whether to test a single coil output or operate in sequence."
+ testsel_coil = "Whether to test a single coil output or operate in sequence."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Whether to test a single injector output or operate in sequence."
+ testsel_inj = "Whether to test a single injector output or operate in sequence."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+ testop_pwm = "Allows testing of different PWM current limiting parameters."
+ testinjPwmP = "The PWM duty cycle."
+ testinjPwmT = "The full-current time at the beginning of each pulse."
+ testinjPwmPd = "The PWM period aka. frequency."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ feature3_pw4x = "Only used on low-revving large engines for extra-long pulsewidths. MUST also set PW4X in Project Properties."
+ feature3_n2oin = "Normally this should be on so that the input responds to a +12V signal. Ensure the JP8 is NOT installed on the MS3X card."
+ u08_debug38_1 = "Experimental feature to log trigger times to sensors9-16. This could be used to monitor cylinder contribution."
+ fuelcalctime = "How often to perform fuel consumption calculations."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+;curves help text
+ oil_press_min = "For each RPM setting, set the min and max oil pressures allowed at that RPM.\nOutside of the limits the warning light will be illuminated.\nIt is suggested that the first row be 0 RPM. Set the Min and Max limits above 0 so that the oil warning light is tested on each start."
+ hpte_afrs = "The curve specifies AFR decrease (richer) vs. time.\nIt is normal for the first row to be 0, 0.\nThe second row typically specifies when the enrichment should begin. e.g. 7, 0. This means that there is no change from 0-7 seconds as both are set to a 0 decrease in AFR.\nThe third row onwards specify the richening."
+ fp_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ fp_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ dualfuel_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ dualfuel_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ fpd_duty = "The values in the table specify the duty cycle percent of the control output to the pump or controller based on the RPM/load axes."
+ alt_dutyout = "This allows for non-linear control within alternators. It also allows you to restrict the output duty range."
+ alternator_targvolts = "Specifies the target charge voltage related to the battery temperature.\nOnly works if you have a battery temperature sensor."
+ alternator_dutyv = "Specifies the control duty to achieve the desired voltage."
+ alternator_freqv = "Specifies the control frequency to achieve the desired voltage."
+ pwm_duties_a = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_b = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_c = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_d = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_e = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_f = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_yaxis_a = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_b = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_c = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_d = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_e = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_f = "Specifies the output duty or frequency based on the input 'load' value."
+ tcslipy = "Sets the desired slip% threshold at different knob settings 0-100%"
+ tc_knob = "This enables a link to a Generic Sensor input to enable you to set the slip threshold. Configure the Generic Sensor to give 0-100 as the linear output."
+ blendy1 = "Sets a percentage blend from VE1 (0%) to VE2 (100%) based on the input X axis value."
+ blendy2 = "Sets a percentage blend from Spk1 (0%) to Spk2 (100%) based on the input X axis value."
+ blendy3 = "Sets a percentage blend from the combined VE1+2 (0%) to VE3+4 (100%) based on the input X axis value."
+ blendy4 = "Sets a percentage blend from the combined Spk1+2 (0%) to Spk3+4 (100%) based on the input X axis value."
+ blendy5 = "Sets a percentage blend from AFR1 (0%) to AFR2 (100%) based on the input X axis value."
+ blendy6 = "Sets a percentage blend from Boost1 (0%) to Boost2 (100%) based on the input X axis value."
+ blendy7 = "Sets a percentage blend from Cranking Pulse1 (0%) to Cranking Pulse2 (100%) based on the input X axis value."
+ blendy8 = "Sets a percentage blend from Tables1 (0%) to Tables2 (100%) based on the Flex fuel percentage value.\ne.g. set 0% table for 10% flex and 100% table for 85% flex."
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ launch_retard = "The curve sets the degrees of ignition subtracted from the normal timing (i.e. retarding it) against time after launch.\nThis can be used to launch at higher RPMs without blowing the tyres away and then feeding the timing back in.\nBe sure to end the curve with zero degrees of retard to use normal timing for the rest of the run."
+ cl_idle_timing_advance_deltas = "Uses timing to assist closed-loop idle control.\nThe X axis of the curve is RPMs +/- the target. i.e. if the target was 800, then -75 in the curve means 800-75 = 725RPM\nThe Y axis of the curve is timing +/-. i.e. + means add timing, - means subtract timing.\nTypically, use positive (advanced) timing when RPMs are below target and negative (retarded) timing when RPMs are above target."
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ accel_mapdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ accel_tpsdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ maeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ taeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_mapdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_tpsdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ knock_starts = "Set the crank angle (for each cylinder) when the knock system starts 'listening' for knock.\nKnock usually occurs in the time after TDC."
+ knock_durations = "Set the number of crank degrees that the knock system 'listens' for knock."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ knock_upscale = "Allows the threshold to be scaled up on a cold engine. Frequently a cold engine is noiser and may cause false alarms without a raised threshold."
+ tc_perfect_vss = "The perfect run traction control sets a curve of the 'best' speed (VSS) that you can run for each time-point after launch.\nIf your VSS is reporting a higher number than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy is typically applied early in a run only.\nNote that VSS based traction control is outlawed in some race classes."
+ tc_perfect_rpm = "The perfect run traction control sets a curve of the 'best' RPM that you can run for each time-point after launch.\nIf your RPM is higher than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy only makes sense in first gear. Set the final row in the table to just earlier than the time when you expect to shift with an RPM higher than your maximum RPM."
+ tc_retard = "Sets the number of degrees of timing retard to apply based on the amount of wheelspin multiplied by how long."
+ tc_spkcut = "Sets the amount of spark cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_nitrous = "Sets the amount of nitrous cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_boost = "Sets the amount to reduce the boost target by based on the amount of wheelspin multiplied by how long."
+ tc_boost_duty_delta = "Sets the amount to change the boost duty by based on the amount of wheelspin multiplied by how long."
+ tc_addfuel = "Sets the amount of fuel to add based on the amount of wheelspin multiplied by how long."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ primePWTable2 = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ crankPctTable2 = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ asePctTable2 = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ aseCntTable2 = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ wueBins2 = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ dwellrpm_dwell = "For Saab Trionic ignition, this allows the dwell time to be varied with RPM."
+ boostvss_duty = "For open-loop boost control, this specifies a solenoid duty based on the wheel speed on VSS1 or VSS2."
+ boostvss_target = "For closed-loop boost control, this specifies a target boost level based on the wheel speed on VSS1 or VSS2.\nThis can be used to limit boost in lower gears to reduce the change of wheelspin or loss of control."
+ n2o1_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o2_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o1_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o2_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o1_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ n2o2_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ smallpw0 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw1 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw2 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw3 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ opentimepct0 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct1 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct2 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct3 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ boost_timed_pct = "Allows boost to be feathered in after launching.\n100% means use normal boost settings."
+ map_sample_timing = "When timed MAP sampling is enabled, this specifies the angle BTDC for each cylinder when MAP sampling should begin.\nExperimentation and use of the Diagnostics-MAP logger will be required to determine the best settings."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC2 = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC2 = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ XAcc = "This is the percentage of the fuel (0-100%) that goes into the wall puddle while accelerating (fuel pulse width increasing), with the remainder of the squirt going directly into the cylinder to be burned."
+ XDec = "This is the percentage of fuel (0-100%) going into the wall puddle while decelerating (fuel pulse width decreasing),"
+ TauAcc = "This is the time factor vs. RPM used during acceleration."
+ TauDec = "This is the time factor vs. RPM used during deceleration."
+ XClt = "Coolant temperature (CLT) correction to the puddling factor X."
+ TauClt = "Coolant temperature (CLT) correction to the time factor Tau."
+ MapThreshXTD = "X-Tau accel tables are used when MAPdot is positive or less negative than this start transition threshold. In-between a blend is used."
+ MapThreshXTD2 = "X-Tau Decel tables are used when MAPdot is more negative than this finish transition threshold. In-between a blend is used."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load when Idle-Advance is active. Typically the curve will ramp from low advance at low load to more advance at higher loads to stabilise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_mappoint = "Above this MAP value, tuning switches from MAP based to TPS based. Default is 90% and works for most engines."
+ ITB_load_idletpsthresh = "A minimum TPS value that must be met to allow the switch to TPS based tuning to occur. This is sometimes useful in idle tuning."
+; tables
+ ego_auth_table = "Specifies the EGO authority limit across the range of engine operation condition. Setting zero means there will be no change in fuel based on the lambda sensor i.e. open-loop mode. "
+ ltt_table1 = "This read-only table shows the long-term-terim values the ECU has calculated based on lambda sensor feedback."
+ alphaMAPtable = "The best-guess MAP value from an alpha-N (TPS vs. RPM) lookup table. This is primarily used as a fallback in case of MAP sensor failure."
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ vvt_timing1 = "Desired VVT (relative) timing vs RPM/load"
+ vvt_timing2 = "Desired VVT (relative) timing vs RPM/load"
+ als_rifuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag idle mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_fuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_sparkcut = "The spark-cut percentage vs. RPM/load when in anti-lag mode.\nThis drops sparks in a round-robin manner."
+ als_timing = "The ignition advance vs. RPM/load when in anti-lag mode.\nTypically this will be -20 to -50 for ATDC timing."
+ als_addfuel = "The percentage of fuel to be added vs. RPM/load when in anti-lag mode."
+ waterinj_duty = "The duty cycle of the output vs RPM/load"
+ maxafr1_diff = "The maximum AFR difference allowed on the leaner side. This compares the AFR target table and the wideband lambda sensor reading.\nTypically a larger allowance is allowed under low load and low RPMs. High load and into boost require tight control to guard against engine-damaging lean conditions."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate main fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable4 = "The alternate secondary fuel table (4). Can be used as a blended and switched table from no.1+2. Larger VE values mean more fuel, smaller mean less fuel."
+ idleve_table1 = "Sets the VE values when 'idle-VE' is active."
+ idleve_table2 = "Sets the VE values when 'idle-VE' is active."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate main ignition advance table (3). Can be used as a switched table from no.1"
+ advanceTable4 = "The alternate secondary ignition advance table (4). Can be used as a blended and switched table from no.1+2."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ boost_ctl_pwm_targets2 = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_cl_pwm_targs2 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_load_targets2 = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ inj_trima = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimb = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimc = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimd = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trime = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimf = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimg = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimh = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimi = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimj = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimk = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_triml = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimm = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimn = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimo = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimp = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_timing = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ inj_timing_sec = "The injector timing (for secondary staged injectors) in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ spk_trima = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimb = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimc = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimd = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trime = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimf = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimg = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimh = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimi = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimj = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimk = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_triml = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimm = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimn = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimo = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimp = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ narrowband_tgts = "The target narrowband lamba sensor voltage vs. load/RPM"
+ vsslaunch_rpm = "RPM specifies the hard limiter RPM for given wheel speed.\nRetard is the retard to ignition advance for given wheel speed.\nWhen wheel speed exceeds maximum speed on curve, the launch control is disabled until speed drops below the re-arm setting."
+ fuelcut_fuelon_upper_rpmdot = "When revs are falling more quickly than this RPMdot value the initial RPM is used for fuel return.\nIn-between upper and lower RPMdot values, the return RPM is interpolated. This number must be larger than the 'lower' RPMdot setting.\nTypically 1000."
+ fuelcut_fuelon_lower_rpmdot = "When revs are falling more slowly than this RPMdot value the lower RPM is used for fuel return. This will happen when coasting down.\nIf revs are falling more quickly then any return transitions will be cancelled and the return RPM will be raised.\n\nSet this so that clutch-in during fuel cut does not stall.\nTypically 500.\n\n(The RPMdot shows negative in datalogs when revs are falling, so a setting of 500 means less negative than -500)"
+ egoAlgorithm_delay_table = "Specifies whether to use IGN events or delay table to determine how often EGO runs"
+ ego_delay_table = "Table which specifies the delay between runs of the EGO algorithm in ms"
+ ego_delay_rpms = "RPM (x) axis of the EGO delay table."
+ ego_delay_loads = "Load (y) axis of the EGO delay table."
+ ego_sensor_delay = "Static value representing O2 sensor response time"
+ generic_pid_flags_a_on = "Generic Closed-Loop channel A on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_a_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_a_direction = "Output polarity for PID output"
+ generic_pid_flags_a_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_a_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_flags_b_on = "Generic Closed-Loop channel B on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_b_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_b_direction = "Output polarity for output"
+ generic_pid_flags_b_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_b_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_pwm_opts_freq_a = "Frequency to use for PWM output"
+ generic_pid_pwm_opts_freq_b = "Frequency to use for PWM output"
+ generic_pid_pwm_outs_a = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_pwm_outs_b = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_upper_inputlim_a = "Maximum value for feedback input (PV)"
+ generic_pid_upper_inputlim_b = "Maximum value for feedback input (PV)"
+ generic_pid_lower_inputlim_a = "Minimum value for feedback input (PV)"
+ generic_pid_lower_inputlim_b = "Minimum value for feedback input (PV)"
+ generic_pid_output_upperlim_a = "Maximum output duty"
+ generic_pid_output_upperlim_b = "Maximum output duty"
+ generic_pid_output_lowerlim_a = "Minimum output duty"
+ generic_pid_output_lowerlim_b = "Minimum output duty"
+ generic_pid_rpms_a = "RPM axis bins for lookup table"
+ generic_pid_rpms_b = "RPM axis bins for lookup table"
+ generic_pid_loadvals_a = "Load axis bins for lookup table"
+ generic_pid_loadvals_b = "Load axis bins for lookup table"
+ generic_pid_targets_a = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_targets_b = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_control_interval_a = "Time in milliseconds between each run of PID control loop"
+ generic_pid_control_interval_b = "Time in milliseconds between each run of PID control loop"
+ generic_pid_P_a = "Proportional gain"
+ generic_pid_P_b = "Proportional gain"
+ generic_pid_I_a = "Integral gain"
+ generic_pid_I_b = "Integral gain"
+ generic_pid_D_a = "Derivative gain"
+ generic_pid_D_b = "Derivative gain"
+ generic_pid_load_offset_a = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_a = "Variable used as feedback input (PV)"
+ generic_pid_load_offset_b = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_b = "Variable used as feedback input (PV)"
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+
+ dwell_table_values = "Specifies the base dwell time in milliseconds based on RPM/load.\nThis can be used to reduce dwell where possible to increase spark-plug life.\nAreas in the tune of very rich or very dilute mixture will need most spark energy.\n(Battery voltage correction is applied afterwards.)"
+ spkadj_max = "Sets a limit on the maximum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a positive number, meaning advance."
+ spkadj_min = "Sets a limit on the minimum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a negative number, meaning retard."
+
+ cranktaper_pct = "Allows cranking fuel to be tapered down during extended cranking to reduce flooding.\n100% means normal cranking pulsewidth."
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ scatterRuntimeEnabled = "On = Enables a faster method of collecting realtime data from MS3. Off = use previous slower method for realtime data."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp16 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp32 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp48 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ can_rcv_opt_on = "Master enable for CAN receiving."
+ can_rcv_id1 = "11bit CAN identifier to listen for. (See also Offset)"
+ can_rcv_var1 = "ECU variable to store resulting data to.\nThis can then be used by other subsystems.\n\nBe sure to enable the master enable above once all options are set."
+ can_rcv_off1 = "Offset of data within each 8-byte CAN message.\nFor systems sending sequential messages, you need to calculate the actual identifier and offset.\ne.g. Take the offset and divide by 8. e.g. offset = 19. Divide by 8 gives 2 remainder 3. Add 2 to the identifier and the offset is 3."
+ can_rcv_size1 = "Endianism, data size and sign.\nB = Big endian\n (Motorola, high byte first)\nL = Little endian\n (Intel, low byte first)\n# = # bytes\nU = Unsigned\nS = Signed"
+ can_rcv_mult1 = "Result = ((raw_data * mult) / divide) + add"
+ pwm_opt_load_a_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_b_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_c_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_d_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_e_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_f_offset = "This selects the 'load' axis on the table or curve."
+ iobox_opta1 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id1 = "Base CAN identifier used by IO-box."
+ iobox_optb1vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta1adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta1canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta1canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta1canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb1tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb1inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb1outrate = "Rate to send outputs to IO-box."
+ iobox_opta2 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id2 = "Base CAN identifier used by IO-box."
+ iobox_optb2vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta2adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta2canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta2canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta2canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb2tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb2inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb2outrate = "Rate to send outputs to IO-box."
+ iobox_opta3 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id3 = "Base CAN identifier used by IO-box."
+ iobox_optb3vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta3adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta3canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta3canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta3canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb3tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb3inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb3outrate = "Rate to send outputs to IO-box."
+ iobox_opta4 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id4 = "Base CAN identifier used by IO-box."
+ iobox_optb4vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta4adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta4canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta4canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta4canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb4tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb4inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb4outrate = "Rate to send outputs to IO-box."
+ pitlim_opt_on = "Enables Pit Lane Limiter"
+ pitlim_opt_mode = "Fixed = one fixed limiter speed\nHolding = takes speed when button pressed as limiter and holds it."
+ pitlim_opt_retard = "Whether to use spark retard."
+ pitlim_opt_spkcut = "Whether to use spark cut. (Can cause backfires and exhaust damage.)"
+ pitlim_opt_fuelcut = "Whether to use fuel cut."
+ pitlim_opt_fuelprog = "Whether to use a progressive fuel cut (sequential only.)"
+ pitlim_opt_vssrpm = "Whether VSS or RPM is used as the hold target."
+ pitlim_enin = "Switch input."
+ pitlim_speed = "Fixed speed limit."
+ pitlim_retardmax = "Maximum allowed spark retard."
+ pitlim_sensitivity = "Adjust tracking sensitivity to adjust limiter window. Initially the 0% fuel/spark cut is applied at the limit and full cut is applied at the limit+range. If the speed is above the limit, the lower limiting point is lowered slowly."
+ pitlim_speed_range = "Control range of speed to apply limiters across. 5mph recommended as a starting point. Setting the range too small will cause oscillation."
+ pitlim_rpm_range = "Control range of RPM to apply limiters across. Setting the range too small will cause oscillation."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+ llstg_in = "The ground-switch button input to arm the line-lock staging system."
+ llstg_out = "The relay output to control the line-lock."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+ u08_debug38_1 = "This enables an experimental feature to record engine trigger times to sensors9-16 to monitor per-cylinder effort. Only for developers."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = shiftlight, "Shift Light"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = fan_control, "Fan Control"
+ subMenu = tcluparams, "Torque Convertor Lockup"
+ subMenu = alternator, "Alternator Control"
+ subMenu = std_separator
+ subMenu = barometerCorr, "Barometric Correction",0, {baroCorr}
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable, "MAF Flow Curve", 0, {!feature7_mafcalib && MAFOption_t < 2 }
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {feature7_mafmat && ((algorithm == 5) || (algorithm2 == 4) || (algorithm2 == 5))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = iopinlist, "Feature List Showing I/O pins"
+ subMenu = pinusage, "I/O pins List Showing Usage"
+ subMenu = pinusagecan, "Expansion I/O pins List/Usage"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injsettings, "Injector Dead-Time/PWM"
+#if CYL_12_16_SUPPORT
+ subMenu = injsettingsb, "Injector Dead-Time/PWM (9-16)"
+#endif
+ subMenu = smallpw, "Injector Small Pulsewidths"
+#if CYL_12_16_SUPPORT
+ subMenu = smallpwb, "Injector Small Pulsewidths (9-16)"
+#endif
+ subMenu = inj_timing_tbl, "Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_tbl, "Secondary Injector Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "AFR/&EGO Control"
+#if CYL_12_16_SUPPORT
+ subMenu = egocont9_16, "AFR/EGO (9-16)"
+#endif
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { (!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr) || ( N2Oopt_2 && N2Oopt_4) }
+ subMenu = ego_auth_Tbl, "EGO Authority Table", 0, {egoType && egoAlgorithm_auth }
+ subMenu = ego_delay_Tbl, "EGO Delay Table", 0, {egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ subMenu = narrowband_tgts_tbl, "Narrowband EGO targets", 0, { egoType == 1 }
+ subMenu = maxafr, "AFR safety system"
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { (algorithm2 != 0) }
+ subMenu = veTable3Tbl, "Fuel VE Table 3", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = veTable4Tbl, "Fuel VE Table 4", 0, { (algorithm2 != 0) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = std_separator
+ subMenu = inj_trim1Tbl, "Injector 1 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
+ subMenu = inj_trim2Tbl, "Injector 2 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
+ subMenu = inj_trimad, "Cyl 1-4 Trims", 7, { hardware_fuel && sequential_trim_on_off }
+ subMenu = inj_trimeh, "Cyl 5-8 Trims", 7, { hardware_fuel && (nInjectors > 4) && sequential_trim_on_off }
+
+#if CYL_12_16_SUPPORT
+ subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off }
+ subMenu = inj_trimmp, "Cyl 13-16 Trims", 7, { hardware_fuel && (nInjectors > 12) && sequential_trim_on_off }
+#endif
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { sequential == 0 }
+ subMenu = std_separator
+ subMenu = fuelpump, "Fuel Pump and Pressure"
+ subMenu = fp_temp_curve, "Temperature Adjustment", 0, {fueltemp1 && fueltemp1_corr}
+ subMenu = fp_press_curve, "Pressure Adjustment", 0, {(fp_opt_mode != 2) && fp_press_in && (fp_opt_reg == 2)}
+ subMenu = fp_safety, "Fuel Pressure Safety", 0, {fp_press_in}
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options/Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = dwellrpm_curve, "Dwell vs RPM", 0, {spk_mode0 > 1 && dwellmode == 2 && spk_conf2_dwell}
+ subMenu = dwell_tbl, "Dwell Table", 0, {(spk_mode0 > 1) && (dwellmode == 0) && spk_conf2_dwelltbl}
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = noisefiltering2, "Noise Filtering", 0
+ subMenu = std_separator
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = knockSettings4, "Knock Sensor Parameters", 0, {knk_option && (knk_option_an == 3)}
+ subMenu = knockSettings2, "Knock Window Settings", 0, {knk_option}
+ subMenu = knockupscale_curve, "Knock Coolant Scaling", 0, {knk_option}
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, { (spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk) }
+ subMenu = ignitionTbl4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = spk_trimad, "Cyl 1-4 Trims", 8, { spk_mode3_trim }
+ subMenu = spk_trimeh, "Cyl 5-8 Trims", 8, { spk_mode3_trim && (nCylinders > 4)}
+#if CYL_12_16_SUPPORT
+ subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)}
+
+ subMenu = spk_trimmp, "Cyl 13-16 Trims", 8, { spk_mode3_trim && (nCylinders > 12)}
+#endif
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking/Startup Settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse", 0
+ subMenu = cranktaper_curvet, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 0}
+ subMenu = cranktaper_curvee, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 1}
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = primingPW2, "Priming Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_prime) }
+ subMenu = crankingPW2, "Cranking Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_crank) || alternate_blend }
+ subMenu = nestedasePct2, "AfterStart Enrichment (ASE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = aseTaper2, "AfterStart Enrichment (ASE) Taper 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = nestedwarmup_curve2, "Warmup Enrichment (WUE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_wue) }
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {IdleCtl && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target Curve", 0, { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up", 0
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = cl_idle_timing_curve, "Idle RPM Timing Correction Curve", 0, { idle_special_ops_timing_assist }
+ subMenu = idleVe, "Idle VE Settings"
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel",0, { !(AE_options & 0x1) }
+ subMenu = AEpump_settings, "Accel-Pump Accel Enrichment Settings",0, { AE_options & 0x1 }
+ subMenu = AEtime_settings2, "Time-Based Accel 2",0, { !(AE_options & 0x1) && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = AEpump_settings2, "Accel-Pump Accel Enrichment Settings 2",0, { AE_options & 0x1 && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = tpswot_curve, "TPS WOT Curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEcombi1, "EAE Sucked/Adhered Coefficients", 0, { EAEOption == 1 }
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = std_separator
+ subMenu = XAccTable, "Puddling Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XDecTable, "Puddling Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauAccTable, "Time Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauDecTable, "Time Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { EAEOption == 4 }
+ subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { EAEOption == 4 }
+
+ menu = "Boost/VVT"
+ subMenu = boost, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl)}
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Bias Duty Table 1", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boost_timed_curve, "Boost Delay (Timed From Launch)",0, { boost_ctl_settings_on && launch_opt_on && boost_feats_timed }
+ subMenu = boostvss_curve, "Boost Control vs Speed", 0, { (boost_ctl_settings_on) && ((boost_vss == 1) || (boost_vss == 2))}
+ subMenu = std_separator
+ subMenu = boostctlSettings2, "Boost Control Settings 2", 0 , {boost_ctl_settings_on}
+ subMenu = boostctlDutys2, "Boost Control Duty Table 2", 0, { boost_ctl_settings_on && (((!boost_ctl_settings_cl) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && !boost_ctl_settings_cl2)) }
+ subMenu = boostctlTargs2, "Boost Control Target Table 2", 0, { boost_ctl_settings_on && ((boost_ctl_settings_cl && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && boost_ctl_settings_cl2)) }
+ subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 }
+ subMenu = std_separator
+ subMenu = antilag, "Turbo Anti-lag (ALS)"
+ subMenu = antilagtables, "Turbo Anti-lag Tables", 0, {als_in_pin}
+ subMenu = als_rifuelcut_tbl, "Turbo Anti-lag Roving Idle", 0, {als_in_pin && als_opt_ri && hardware_fuel && sequential}
+ subMenu = std_separator
+ subMenu = vvtparams, "VVT Settings"
+ subMenu = vvt_timing1_tbl, "VVT Intake Table", 0, {vvt_opt1_on && vvt_opt2_pid2}
+ subMenu = vvt_timing2_tbl, "VVT Exhaust Table", 0, {vvt_opt1_on && vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2)}
+ subMenu = pwm_duties_Tbl_vvt, "VVT On/Off Table", 0, {vvt_opt1_on && !vvt_opt2_pid2}
+
+ menu = "Table choices"
+ subMenu = tablesw, "Table Switch/Dual Fuel"
+ subMenu = dualfuel_temp_curve, "Temperature Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_temp) }
+ subMenu = dualfuel_press_curve, "Pressure Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_press) }
+ subMenu = injsettings2, "Alt. Injector Dead-time/PWM 2", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+#if CYL_12_16_SUPPORT
+ subMenu = injsettingsb2, "Alt. Injector Dead-time/PWM 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+#endif
+ subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+#if CYL_12_16_SUPPORT
+ subMenu = smallpw2b, "Alt. Injector Small Pulsewidths 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+#endif
+ subMenu = std_separator
+ subMenu = blend1menu, "Blend Curve (1) VE1->2", 0, {algorithm2 && (loadCombine == 2)}
+ subMenu = blend2menu, "Blend Curve (2) Spk1->2", 0, {IgnAlgorithm2 && (loadCombineign == 1)}
+ subMenu = blend3menu, "Blend Curve (3) VE1+2->3+4", 0, {f5_0_tsf && (f5_0_tsf_opt == 0) && (tsw_pin_f == 14)}
+ subMenu = blend4menu, "Blend Curve (4) Spk1+2->3+4", 0, {f5_0_tss && (f5_0_tss_opt == 0) && (tsw_pin_s == 14)}
+ subMenu = blend5menu, "Blend Curve (5) AFR1->2", 0, {tsw_pin_afr == 14}
+ subMenu = blend6menu, "Blend Curve (6) Boost1->2", 0, {(boost_feats_tsw == 14) && boost_ctl_settings_on}
+ subMenu = blend7menu, "Blend Curve (7) Crank%1->2", 0, {alternate_blend}
+ subMenu = blend8menu, "Blend Curve (8) Flex Blending", 0, { dualfuel_sw_on && (dualfuel_opt_mode == 2) }
+
+ menu = "Advanced Engine"
+ subMenu = speedsensors, "Speed and Gear Sensors"
+ subMenu = ss, "Shaft Speed Sensors"
+ subMenu = egt, "EGT/Thermocouple Settings"
+ subMenu = sensors, "Generic Sensor Inputs"
+ subMenu = accelerometer, "Accelerometer Parameters"
+ subMenu = tcsettings, "Traction Control Settings"
+ subMenu = tc_perfect_curve, "Traction Control - Perfect Run VSS", 0, {tc_opt_on && (tc_opt_method == 0)}
+ subMenu = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM", 0, {tc_opt_on && (tc_opt_method == 2)}
+ subMenu = tcslip_menu, "Traction Control - External Slip% Input", 0, {tc_opt_on && (tc_opt_method == 1) && tc_opt_slipcurve}
+ subMenu = tc_curves, "Traction Control Reactions", 0, {tc_opt_on}
+ subMenu = std_separator
+ subMenu = launch, "Launch / 2-step / 3-step / T-brake"
+ subMenu = launch_retard_time, "Timed Retard After Launch", 0, {launch_opt_on && launch_opt_retard}
+ subMenu = vsslaunch, "Speed-based Launch Control"
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = nitrous, "&Nitrous System"
+ subMenu = nitrous_curves_time, "Nitrous - Time-Based Progressive",0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) }
+ subMenu = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 0)}
+ subMenu = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 2)}
+ subMenu = waterinj, "Water Injection"
+ subMenu = hpte, "High Power Time Enrichment"
+ subMenu = oilpress, "Oil Pressure"
+ subMenu = pitlimiter, "Pit Lane Limiter"
+ subMenu = std_separator
+ subMenu = ms3_port_edit_wrap, "Programmable On/Off Outputs"
+ subMenu = gen_pwm_a, "Generic PWM output A"
+ subMenu = gen_pwm_b, "Generic PWM output B"
+ subMenu = gen_pwm_c, "Generic PWM output C"
+ subMenu = gen_pwm_d, "Generic PWM output D"
+ subMenu = gen_pwm_e, "Generic PWM output E", 0, {!(vvt_opt1_on)}
+ subMenu = gen_pwm_f, "Generic PWM output F"
+ subMenu = std_separator
+ subMenu = generic_pid_a, "Generic Closed-Loop A"
+ subMenu = generic_pid_b, "Generic Closed-Loop B"
+
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+ subMenu = veTable1Map, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { (algorithm2 != 0) && (algorithm2 != 5) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode) }
+ subMenu = veTable4Map, "Fuel VE Table &4", 0, { ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) && (algorithm2 != 0) }
+
+ subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType > 1 }
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { (egoType > 1) && ((!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr)) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "Ignition Table 2", 0, { (IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_fuel) }
+ subMenu = ignitionMap4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = boostctlDtyMap2, "Boost Control Duty Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap2, "Boost Control Target Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator
+ subMenu = inj_timing_map, "Sequential Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_map, "Sequential Injector Secondary Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+
+ menu = "CAN-bus/ Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting",0, {can_enable_on}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_enable_on && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_enable_on}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_3,"CAN Realtime Data Broadcasting 3", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_4,"CAN Realtime Data Broadcasting 4", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_rcv, "CAN Receiving", 0, {can_enable_on}
+ subMenu = canvss, "CAN VSS, Gear",0, {can_enable_on}
+ subMenu = canego, "CAN EGO, GPS",0, {can_enable_on}
+ subMenu = realtimeclock, "Real Time Clock"
+ subMenu = iobox, "IO-Box Settings"
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = checkengine, "Check Engine Light"
+ subMenu = limpmode, "Limp Mode", 0, {cel_opt_on}
+ subMenu = alphaMAPTbl, "Fallback MAP Table", 0, {cel_opt_on && cel_opt2_map && cel_action1_map && cel_action1_map_an}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = outputtest_io2, "Output Test Mode - I/O 2"
+ subMenu = outputtest_io3, "Output Test Mode - CAN I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+ subMenu = injseqtest, "Injector Sequential Testing"
+ subMenu = injspkonoff, "Inj/Spk Disabling Test Mode"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = special, "Special Options"
+ subMenu = std_separator
+ subMenu = lttrim, "Long Term Trim Settings"
+ subMenu = ltt_Table1Tbl, "Long Term Trim Table &1", 0
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+#endif
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Data Logging"
+ subMenu = sdcard_datalog, "SD Card Datalogging"
+ subMenu = std_ms3SdConsole, "Browse / Import SD Card",0, {log_style_on2 && (tsLocalCanId == tsCanId) }
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate", 0
+
+ menu = "Help"
+ subMenu = helpGeneral, "Megasquirt 3 Info"
+;-------------------------------------------------------------------------------
+
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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.
+
+;The offsets here must match the actual offsets in 'datax1' and include the 0x200 offset.
+cmdStopTestmode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x07"
+cmdtestiacoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0a"
+
+cmdskipinjoff= "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0b"
+cmdskipinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0c"
+cmdskipspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0d"
+
+cmdtestinjnorm = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x10"
+cmdtestinjbat = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x11"
+cmdtestinjsem = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x12"
+cmdtestinjseq = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x13"
+
+cmdtestiaccycle = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x18"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x92"
+
+cmdtest14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9f"
+
+cmdtesta0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa0"
+cmdtesta0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa2"
+cmdtesta0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa3"
+
+cmdtesta1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa4"
+cmdtesta1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa6"
+cmdtesta1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa7"
+
+cmdtesta2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa8"
+cmdtesta2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaa"
+cmdtesta2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xab"
+
+cmdtesta3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xac"
+cmdtesta3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xae"
+cmdtesta3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaf"
+
+cmdtesta4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb0"
+cmdtesta4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb2"
+cmdtesta4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb3"
+
+cmdtesta5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb4"
+cmdtesta5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb6"
+cmdtesta5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb7"
+
+cmdtesta6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb8"
+cmdtesta6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xba"
+cmdtesta6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbb"
+
+cmdtesta7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbc"
+cmdtesta7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbe"
+cmdtesta7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbf"
+
+cmdtestb0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc0"
+cmdtestb0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc2"
+cmdtestb0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc3"
+
+cmdtestb1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc4"
+cmdtestb1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc6"
+cmdtestb1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc7"
+
+cmdtestb2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc8"
+cmdtestb2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xca"
+cmdtestb2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcb"
+
+cmdtestb3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcc"
+cmdtestb3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xce"
+cmdtestb3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcf"
+
+cmdtestb4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd0"
+cmdtestb4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd2"
+cmdtestb4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd3"
+
+cmdtestb5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd4"
+cmdtestb5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd6"
+cmdtestb5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd7"
+
+cmdtestb6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd8"
+cmdtestb6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xda"
+cmdtestb6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdb"
+
+cmdtestb7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdc"
+cmdtestb7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xde"
+cmdtestb7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdf"
+
+cmdteste0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe0"
+cmdteste0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe2"
+cmdteste0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe3"
+
+cmdteste4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe4"
+cmdteste4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe6"
+cmdteste4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe7"
+
+cmdteste8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe8"
+cmdteste8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xea"
+cmdteste8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xeb"
+
+cmdtestecoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xec"
+cmdtestecpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xee"
+cmdtestecon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xef"
+
+cmdtestf0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf0"
+cmdtestf0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf2"
+cmdtestf0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf3"
+
+cmdtestf4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf4"
+cmdtestf4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf6"
+cmdtestf4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf7"
+
+cmdtestf8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf8"
+cmdtestf8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfa"
+cmdtestf8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfb"
+
+cmdtestfcoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfc"
+cmdtestfcpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfe"
+cmdtestfcon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xff"
+; CAN outs
+cmdtestcano0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x80"
+cmdtestcano0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x82"
+cmdtestcano0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x83"
+
+cmdtestcano1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x84"
+cmdtestcano1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x86"
+cmdtestcano1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x87"
+
+cmdtestcano2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x88"
+cmdtestcano2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8a"
+cmdtestcano2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8b"
+
+cmdtestcano3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8c"
+cmdtestcano3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8e"
+cmdtestcano3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8f"
+
+cmdtestcano4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x90"
+cmdtestcano4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x92"
+cmdtestcano4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x93"
+
+cmdtestcano5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x94"
+cmdtestcano5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x96"
+cmdtestcano5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x97"
+
+cmdtestcano6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x98"
+cmdtestcano6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9a"
+cmdtestcano6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9b"
+
+cmdtestcano7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9c"
+cmdtestcano7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9e"
+cmdtestcano7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9f"
+
+cmdtestcano8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa0"
+cmdtestcano8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa2"
+cmdtestcano8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa3"
+
+cmdtestcano9off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa4"
+cmdtestcano9pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa6"
+cmdtestcano9on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa7"
+
+cmdtestcano10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa8"
+cmdtestcano10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaa"
+cmdtestcano10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xab"
+
+cmdtestcano11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xac"
+cmdtestcano11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xae"
+cmdtestcano11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaf"
+
+cmdtestcano12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb0"
+cmdtestcano12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb2"
+cmdtestcano12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb3"
+
+cmdtestcano13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb4"
+cmdtestcano13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb6"
+cmdtestcano13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb7"
+
+cmdtestcano14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb8"
+cmdtestcano14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xba"
+cmdtestcano14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbb"
+
+cmdtestcano15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbc"
+cmdtestcano15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbe"
+cmdtestcano15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbf"
+
+cmdlttr1 = "w\$tsCanId\x07\x02\x9a\x00\x01\x41"
+cmdlttr2 = "w\$tsCanId\x07\x02\x9a\x00\x01\x42"
+cmdlttw = "w\$tsCanId\x07\x02\x9a\x00\x01\x51"
+cmdlttz = "w\$tsCanId\x07\x02\x9a\x00\x01\x61"
+
+cmdinjspk1 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x20"
+cmdinjspk2 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x21"
+cmdinjspk3 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x22"
+cmdinjspk4 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x23"
+cmdinjspk5 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x24"
+cmdinjspk6 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x25"
+cmdinjspk7 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x26"
+cmdinjspk8 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x27"
+cmdinjspk9 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x28"
+cmdinjspk10 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x29"
+cmdinjspk11 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2a"
+cmdinjspk12 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2b"
+cmdinjspk13 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2c"
+cmdinjspk14 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2d"
+cmdinjspk15 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2e"
+cmdinjspk16 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2f"
+
+cmdnull = ""
+
+[UserDefined]
+ dialog = pitlimiter, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pitlim"
+ field = "Pit Limiter Enable", pitlim_opt_on
+ field = "Input", pitlim_enin, pitlim_opt_on
+ field = "Mode", pitlim_opt_mode, { pitlim_opt_on && pitlim_enin }
+ field = "Use VSS or RPM target", pitlim_opt_vssrpm, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) }
+ field = "Speed", pitlim_speed, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 0) }
+ field = "Speed control range", pitlim_speed_range, { pitlim_opt_on && pitlim_enin && ((pitlim_opt_mode == 0) || (pitlim_opt_vssrpm == 0)) }
+ field = "RPM control range", pitlim_rpm_range, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) && pitlim_opt_vssrpm }
+ slider = "Tracking Sensitivity", pitlim_sensitivity, horizontal, { pitlim_opt_on && pitlim_enin}
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", pitlim_opt_retard, { pitlim_opt_on && pitlim_enin}
+ field = "Maximum Retard", pitlim_retardmax, { pitlim_opt_on && pitlim_enin&& (pitlim_opt_retard == 1) }
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", pitlim_opt_spkcut, { pitlim_opt_on && pitlim_enin}
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", pitlim_opt_fuelcut, { pitlim_opt_on && pitlim_enin}
+ field = "Progressive Fuel Cut", pitlim_opt_fuelprog, { pitlim_opt_on && pitlim_enin && pitlim_opt_fuelcut }
+
+ dialog = iobox1, "IO box 1", yAxis
+ field = "IO-Box #1 Enable", iobox_opta1
+ field = "VSS setting", iobox_optb1vss, {iobox_opta1}
+ field = "Configuration", iobox_opta1adv, {iobox_opta1}
+ field = "Base CAN identifier", iobox_id1, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANIN", iobox_opta1canin, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANOUT", iobox_opta1canout , {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANADC", iobox_opta1canadc, {iobox_opta1 && iobox_opta1adv }
+ field = "Tach transmit rate", iobox_optb1tachrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Inputs transmit rate", iobox_optb1inrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Outputs transmit rate", iobox_optb1outrate, {iobox_opta1 && iobox_opta1adv }
+
+ dialog = iobox2, "IO box 2", yAxis
+ field = "IO-Box #2 Enable", iobox_opta2
+ field = "VSS setting", iobox_optb2vss, {iobox_opta2}
+ field = "Configuration", iobox_opta2adv, {iobox_opta2}
+ field = "Base CAN identifier", iobox_id2, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANIN", iobox_opta2canin, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANOUT", iobox_opta2canout , {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANADC", iobox_opta2canadc, {iobox_opta2 && iobox_opta2adv }
+ field = "Tach transmit rate", iobox_optb2tachrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Inputs transmit rate", iobox_optb2inrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Outputs transmit rate", iobox_optb2outrate, {iobox_opta2 && iobox_opta2adv }
+
+ dialog = iobox3, "IO box 3", yAxis
+ field = "IO-Box #3 Enable", iobox_opta3
+ field = "VSS setting", iobox_optb3vss, {iobox_opta3}
+ field = "Configuration", iobox_opta3adv, {iobox_opta3}
+ field = "Base CAN identifier", iobox_id3, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANIN", iobox_opta3canin, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANOUT", iobox_opta3canout , {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANADC", iobox_opta3canadc, {iobox_opta3 && iobox_opta3adv }
+ field = "Tach transmit rate", iobox_optb3tachrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Inputs transmit rate", iobox_optb3inrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Outputs transmit rate", iobox_optb3outrate, {iobox_opta3 && iobox_opta3adv }
+
+ dialog = iobox4, "IO box 4", yAxis
+ field = "IO-Box #4 Enable", iobox_opta4
+ field = "VSS setting", iobox_optb4vss, {iobox_opta4}
+ field = "Configuration", iobox_opta4adv, {iobox_opta4}
+ field = "Base CAN identifier", iobox_id4, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANIN", iobox_opta4canin, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANOUT", iobox_opta4canout , {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANADC", iobox_opta4canadc, {iobox_opta4 && iobox_opta4adv }
+ field = "Tach transmit rate", iobox_optb4tachrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Inputs transmit rate", iobox_optb4inrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Outputs transmit rate", iobox_optb4outrate, {iobox_opta4 && iobox_opta4adv }
+
+ dialog = ioboxtop, "", xAxis
+ panel = iobox1, West
+ panel = iobox2, East
+
+ dialog = ioboxbot, "", xAxis
+ panel = iobox3, West
+ panel = iobox4, East, {0}
+
+ dialog = iobox, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iobox"
+ panel = ioboxtop, North
+ panel = ioboxbot, South
+
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_rcv2, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var1
+ field = "", can_rcv_var2
+ field = "", can_rcv_var3
+ field = "", can_rcv_var4
+ field = "", can_rcv_var5
+ field = "", can_rcv_var6
+ field = "", can_rcv_var7
+ field = "", can_rcv_var8
+
+ dialog = can_rcv2b, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var9
+ field = "", can_rcv_var10
+ field = "", can_rcv_var11
+ field = "", can_rcv_var12
+ field = "", can_rcv_var13
+ field = "", can_rcv_var14
+ field = "", can_rcv_var15
+ field = "", can_rcv_var16
+
+ dialog = can_rcv3, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id1
+ field = "", can_rcv_id2
+ field = "", can_rcv_id3
+ field = "", can_rcv_id4
+ field = "", can_rcv_id5
+ field = "", can_rcv_id6
+ field = "", can_rcv_id7
+ field = "", can_rcv_id8
+
+ dialog = can_rcv3b, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id9
+ field = "", can_rcv_id10
+ field = "", can_rcv_id11
+ field = "", can_rcv_id12
+ field = "", can_rcv_id13
+ field = "", can_rcv_id14
+ field = "", can_rcv_id15
+ field = "", can_rcv_id16
+
+ dialog = can_rcv4, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off1
+ field = "", can_rcv_off2
+ field = "", can_rcv_off3
+ field = "", can_rcv_off4
+ field = "", can_rcv_off5
+ field = "", can_rcv_off6
+ field = "", can_rcv_off7
+ field = "", can_rcv_off8
+
+ dialog = can_rcv4b, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off9
+ field = "", can_rcv_off10
+ field = "", can_rcv_off11
+ field = "", can_rcv_off12
+ field = "", can_rcv_off13
+ field = "", can_rcv_off14
+ field = "", can_rcv_off15
+ field = "", can_rcv_off16
+
+ dialog = can_rcv5, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size1
+ field = "", can_rcv_size2
+ field = "", can_rcv_size3
+ field = "", can_rcv_size4
+ field = "", can_rcv_size5
+ field = "", can_rcv_size6
+ field = "", can_rcv_size7
+ field = "", can_rcv_size8
+
+ dialog = can_rcv5b, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size9
+ field = "", can_rcv_size10
+ field = "", can_rcv_size11
+ field = "", can_rcv_size12
+ field = "", can_rcv_size13
+ field = "", can_rcv_size14
+ field = "", can_rcv_size15
+ field = "", can_rcv_size16
+
+ dialog = can_rcv6, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult1
+ field = "", can_rcv_mult2
+ field = "", can_rcv_mult3
+ field = "", can_rcv_mult4
+ field = "", can_rcv_mult5
+ field = "", can_rcv_mult6
+ field = "", can_rcv_mult7
+ field = "", can_rcv_mult8
+
+ dialog = can_rcv6b, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult9
+ field = "", can_rcv_mult10
+ field = "", can_rcv_mult11
+ field = "", can_rcv_mult12
+ field = "", can_rcv_mult13
+ field = "", can_rcv_mult14
+ field = "", can_rcv_mult15
+ field = "", can_rcv_mult16
+
+ dialog = can_rcv7, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div1
+ field = "", can_rcv_div2
+ field = "", can_rcv_div3
+ field = "", can_rcv_div4
+ field = "", can_rcv_div5
+ field = "", can_rcv_div6
+ field = "", can_rcv_div7
+ field = "", can_rcv_div8
+
+ dialog = can_rcv7b, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div9
+ field = "", can_rcv_div10
+ field = "", can_rcv_div11
+ field = "", can_rcv_div12
+ field = "", can_rcv_div13
+ field = "", can_rcv_div14
+ field = "", can_rcv_div15
+ field = "", can_rcv_div16
+
+ dialog = can_rcv8, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add1
+ field = "", can_rcv_add2
+ field = "", can_rcv_add3
+ field = "", can_rcv_add4
+ field = "", can_rcv_add5
+ field = "", can_rcv_add6
+ field = "", can_rcv_add7
+ field = "", can_rcv_add8
+
+ dialog = can_rcv8b, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add9
+ field = "", can_rcv_add10
+ field = "", can_rcv_add11
+ field = "", can_rcv_add12
+ field = "", can_rcv_add13
+ field = "", can_rcv_add14
+ field = "", can_rcv_add15
+ field = "", can_rcv_add16
+
+ dialog = can_rcv1, "", xAxis
+ panel = can_rcv2
+ panel = can_rcv3
+ panel = can_rcv4
+ panel = can_rcv5
+ panel = can_rcv6
+ panel = can_rcv7
+ panel = can_rcv8
+
+ dialog = can_rcv1b, "", xAxis
+ panel = can_rcv2b
+ panel = can_rcv3b
+ panel = can_rcv4b
+ panel = can_rcv5b
+ panel = can_rcv6b
+ panel = can_rcv7b
+ panel = can_rcv8b
+
+ dialog = can_rcv0, "", xAxis
+ field = "Enable receiving CAN data", can_rcv_opt_on
+ field = ""
+ field = ""
+
+ dialog = can_rcv, "CAN receiving", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrcv"
+ panel = can_rcv0, North
+ panel = can_rcv1, Center;, {can_rcv_opt_on} ; ungreying does not work
+ panel = can_rcv1b, South;, {can_rcv_opt_on}
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5,6,7", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: sensors1,2,3,4", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: sensors5,6,7,8", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: sensors9,10,11,12", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "16: sensors13,14,15,16", can_outpc_gp16
+ field = "17: boost_targ1,2,boostduty1,2,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "19: PWseq5,6,7,8", can_outpc_gp19
+ field = "20: PWseq9,10,11,12", can_outpc_gp20
+ field = "21: PWseq13,14,15,16", can_outpc_gp21
+ field = "22: EGT1,2,3,4", can_outpc_gp22
+ field = "23: EGT5,6,7,8", can_outpc_gp23
+ field = "24: EGT9,10,11,12", can_outpc_gp24
+ field = "25: EGT13,14,15,16", can_outpc_gp25
+ field = "26: nitrous:duty1,2,timer,addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2,VSS1dot,VSS2dot", can_outpc_gp29
+ field = "30: AccelX,Y,Z,streamlvl,waterduty", can_outpc_gp30
+ field = "31: AFR0,1,2,3,4,5,6,7,8", can_outpc_gp31
+
+ dialog = can_outpc_bcast_3, "CAN Realtime Data Broadcasting 3", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "32: AFR9,10,11,12,13,14,15,16", can_outpc_gp32
+ field = "33: PWMduty1,2,3,4,5,6,gear,timingerr", can_outpc_gp33
+ field = "34: EGOv1,2,3,4", can_outpc_gp34
+ field = "35: EGOv5,6,7,8", can_outpc_gp35
+ field = "36: EGOv9,10,11,12", can_outpc_gp36
+ field = "37: EGOv13,14,15,16", can_outpc_gp37
+ field = "38: EGOcor1,2,3,4", can_outpc_gp38
+ field = "39: EGOcor5,6,7,8", can_outpc_gp39
+ field = "40: EGOcor9,10,11,12", can_outpc_gp40
+ field = "41: EGOcor13,14,15,16", can_outpc_gp41
+ field = "42: VSS1,2,3,4", can_outpc_gp42
+ field = "43: synccnt,reason,SD:file#,err,phase,stat,timing_err", can_outpc_gp43
+ field = "44: VVTang1,2,3,4", can_outpc_gp44
+ field = "45: VVTtarg1,2,3,4", can_outpc_gp45
+ field = "46: VVTduty1,2,3,4,injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%,tpsacc,SS1,2", can_outpc_gp47
+
+ dialog = can_outpc_bcast_4, "CAN Realtime Data Broadcasting 4", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "48: knock_cyl1,2,3,4,5,6,7,8", can_outpc_gp48
+ field = "49: knock_cyl9,10,11,12,13,14,15,16", can_outpc_gp49
+ field = "50: MAPacc,totalacc,launch:timer,retard", can_outpc_gp50
+ field = "51: PORTa,b,eh,k,mj,p,t,cel_err", can_outpc_gp51
+ field = "52: CANin,CANout,knockretard,fuelflow,cons", can_outpc_gp52
+ field = "53: Fuel:press1,2,temp1,2", can_outpc_gp53
+ field = "54: battcurr,CLidletarg,FPduty,ALTduty,loadduty,ALTtarg", can_outpc_gp54
+ field = "55: looptime,fueltempcor,fuelprescor,lttcor", can_outpc_gp55
+ field = "56: Retards:TC,CEL,FCut,ext", can_outpc_gp56
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3,4", can_outpc_gp58
+ field = "59: Revlimretard,ALSadv,ext_advance,deadtime", can_outpc_gp59
+ field = "60: Launchadv,3stepadv,VSSlaunchretard,celstat2", can_outpc_gp60
+ field = "61: GPS", can_outpc_gp61
+ field = "62: GPS", can_outpc_gp62
+ field = "63: Gen CL duty1,2", can_outpc_gp63
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupgauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = fuelcorr
+ gauge = afr1targetGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = nitrous_addfuel
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = fueltemp_cor
+ gauge = fuelpress_cor
+ gauge = ltt_cor
+ gauge = als_addfuel
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+; gauge = pulseWidth3Gauge
+; gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see the Setting Up Manual."
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = adv4Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retard
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = tc_retardGauge
+ gauge = cel_retardGauge
+ gauge = fc_retardGauge
+ gauge = als_timingGauge
+
+ dialog = sparkcalc_gauges5, "", xAxis
+ gauge = launch_timingGauge
+ gauge = step3_timingGauge
+ gauge = launchvss_retardGauge
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+ panel = sparkcalc_gauges5
+
+ dialog = buts_injspk_label, "", yAxis
+ field = "Enabled -->>"
+ field = "Disabled ->>"
+
+ dialog = buts_injspk1, "", yAxis
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && ((status5 & 1) == 0)}
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && (status5 & 1)}
+ dialog = buts_injspk2, "", yAxis
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && ((status5 & 2) == 0)}
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && (status5 & 2)}
+ dialog = buts_injspk3, "", yAxis
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && ((status5 & 4) == 0)}
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && (status5 & 4)}
+ dialog = buts_injspk4, "", yAxis
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && ((status5 & 8) == 0)}
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && (status5 & 8)}
+ dialog = buts_injspk5, "", yAxis
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && ((status5 & 16) == 0)}
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && (status5 & 16)}
+ dialog = buts_injspk6, "", yAxis
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && ((status5 & 32) == 0)}
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && (status5 & 32)}
+ dialog = buts_injspk7, "", yAxis
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && ((status5 & 64) == 0)}
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && (status5 & 64)}
+ dialog = buts_injspk8, "", yAxis
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && ((status5 & 128) == 0)}
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && (status5 & 128)}
+
+ dialog = buts_injspk9, "", yAxis
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && ((status5 & 0x100) == 0)}
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && (status5 & 0x100)}
+ dialog = buts_injspk10, "", yAxis
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && ((status5 & 0x200) == 0)}
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && (status5 & 0x200)}
+ dialog = buts_injspk11, "", yAxis
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && ((status5 & 0x400) == 0)}
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && (status5 & 0x400)}
+ dialog = buts_injspk12, "", yAxis
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && ((status5 & 0x800) == 0)}
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && (status5 & 0x800)}
+ dialog = buts_injspk13, "", yAxis
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && ((status5 & 0x1000) == 0)}
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && (status5 & 0x1000)}
+ dialog = buts_injspk14, "", yAxis
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && ((status5 & 0x2000) == 0)}
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && (status5 & 0x2000)}
+ dialog = buts_injspk15, "", yAxis
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && ((status5 & 0x4000) == 0)}
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && (status5 & 0x4000)}
+ dialog = buts_injspk16, "", yAxis
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && ((status5 & 0x8000) == 0)}
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && (status5 & 0x8000)}
+
+ dialog = injspkonoffmaster, "", xAxis
+ commandButton = "Off", cmdskipinjoff, {status8 & 0x03}, clickOnCloseIfEnabled
+ commandButton = "Injectors", cmdskipinjon, {(status8 & 0x03) == 0}
+ commandButton = "Coils", cmdskipspkon, {(status8 & 0x03) == 0}
+
+ dialog = injspkonoffchans, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk1
+ panel = buts_injspk2
+ panel = buts_injspk3
+ panel = buts_injspk4
+ panel = buts_injspk5
+ panel = buts_injspk6
+ panel = buts_injspk7
+ panel = buts_injspk8
+
+#ifdef CYL_12_16_SUPPORT
+ dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk9
+ panel = buts_injspk10
+ panel = buts_injspk11
+ panel = buts_injspk12
+ panel = buts_injspk13
+ panel = buts_injspk14
+ panel = buts_injspk15
+ panel = buts_injspk16
+#endif
+
+ dialog = injspkonofftype, "", yAxis
+ displayOnlyField = "Off", dummyfield, {(status8 & 0x03) == 0}
+ displayOnlyField = "Injector disabling test.", dummyfield, {(status8 & 0x03) == 1}
+ displayOnlyField = "Coil disabling test - beware of plug fouling.", dummyfield, {(status8 & 0x03) == 2}
+ field = "Will not run as expected if running:"
+ field = " - semi-sequential fuel"
+ field = " - wasted spark and only a crank wheel"
+ field = " - a simple distributor input."
+
+ dialog = injspkonoff, "Inj/Spk Disabling Test Mode", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injspkonoff"
+ panel = injspkonoffmaster, North
+ panel = injspkonofftype, Center
+ panel = injspkonoffchans, South;, {status8 & 0x03} ; <--- this isn't ungreying
+#ifdef CYL_12_16_SUPPORT
+ panel = injspkonoffchans2, South;, {status8 & 0x03} ; <--- this isn't ungreying
+#endif
+
+ dialog = fp_safety, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsafety"
+ field = "Fuel pressure monitoring must be enabled."
+ field = "Enable Fuel Pressure Safety", fp_opt_safety, {fp_press_in}
+ field = "(Target fuel pressure are set on fuel pressure page.)"
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_psig
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_kpag
+ field = "Check Above Load", fp_drop_load, {fp_opt_safety && fp_press_in}
+ field = "Check Above RPM", fp_drop_rpm, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_psig, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_kpag, {fp_opt_safety && fp_press_in}
+ field = "Time Allowed At Low Pressure", fp_drop_time, {fp_opt_safety && fp_press_in}
+ field = "See AFR safety for shutdown options"
+
+ dialog = oilpress_set, ""
+ field = "Oil Pressure Input", oilpress_in
+ field = "Oil Pressure Warning", oilpress_out, {oilpress_in}
+ field = "Set the zero rpm pressures above zero"
+ field = "to ensure lamp is tested on each start."
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = oilpress, "Oil Pressure", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#oil"
+ panel = oilpress_set
+ panel = oil_curve, {oilpress_in}
+
+ dialog = shiftlight, "Shift Light"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shiftlight"
+ field = "Shift Light Output", shiftlight_opt_pins
+ field = "Per Gear Limits", shiftlight_opt_gear, {shiftlight_opt_pins}
+ field = "Limit", shiftlight_limit1, {shiftlight_opt_pins && (shiftlight_opt_gear == 0)}
+ field = "1st Gear Limit", shiftlight_limit1, {shiftlight_opt_pins && shiftlight_opt_gear}
+ field = "2nd Gear Limit", shiftlight_limit2, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 1)}
+ field = "3rd Gear Limit", shiftlight_limit3, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 2)}
+ field = "4th Gear Limit", shiftlight_limit4, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 3)}
+ field = "5th Gear Limit", shiftlight_limit5, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 4)}
+ field = "6th Gear Limit", shiftlight_limit6, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 5)}
+
+ dialog = hpte1, ""
+ field = "This feature requires Incorporate AFR be enabled"
+ field = "High Power Time Enrichment", hpte_opt_on, {loadStoich}
+ field = "Above Load", hpte_load, {hpte_opt_on && loadStoich}
+ field = "Above RPM", hpte_rpm, {hpte_opt_on && loadStoich}
+
+ dialog = hpte, "High Power Time Enrichment"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#hpte"
+ panel = hpte1
+ panel = hpte_curve, {hpte_opt_on && loadStoich}
+
+ dialog = MAFtable, "MAF Flow Curve", card
+ panel = MAFtable1, Center, { MAFOption_t == 0 }
+ panel = MAFtable1f, Center, { MAFOption_t == 1 }
+
+ dialog = alt_load, ""
+ field = "Warn on Voltage Difference >", alternator_diff, {alternator_opt_mode && alternator_lampout}
+ field = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ field = "Capture Polarity", alternator_freq_moninv, {alternator_opt_mode && (alternator_opt_mode < 4) && alternator_freq_monin}
+ field = "Warn On Load >", alternator_maxload, {alternator_lampout && ((alternator_opt_mode && alternator_freq_monin) || (alternator_opt_mode == 4) || (alternator_opt_mode == 5))}
+ field = ""
+ field = ""
+
+ dialog = alt_pids, ""
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", alternator_Kp, {alternator_opt_mode == 4}
+ field = "Integral Gain", alternator_Ki, {alternator_opt_mode == 4}
+ field = "Derivative Gain", alternator_Kd, {alternator_opt_mode == 4}
+ slider = "Sensitivity", alternator_sensitivity, horizontal, {alternator_opt_mode == 4}
+
+ dialog = alt_pidorload, "", card
+ panel = alt_load, Center, {alternator_opt_mode != 4}
+ panel = alt_pids, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_settings_t, ""
+ field = "Control Mode", alternator_opt_mode
+ field = "Control Interval", alternator_ctl_ms, {alternator_opt_mode}
+ field = "Control Output", alternator_controlout, {alternator_opt_mode}
+ field = "Output Polarity", alternator_control_inv, {alternator_opt_mode}
+ field = "Control Frequency", alternator_freq, {(alternator_opt_mode == 3) || (alternator_opt_mode == 4)}
+ field = "Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+
+ dialog = alt_settings_b, ""
+ field = "Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ field = "Capture Polarity", alternator_freq_currinv, {alternator_opt_mode && alternator_freq_currin}
+ field = "Start Delay", alternator_startdelay, {alternator_opt_mode}
+ field = "Ramp Up Time", alternator_ramptime, {alternator_opt_mode > 1}
+ field = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ field = "Charge Mode Target Voltage", alternator_targv, {(alternator_tempin == 0) && alternator_opt_mode}
+ field = "Charge Time", alternator_chargetime, {alternator_opt_mode > 1}
+ field = "Run Mode Target Voltage", alternator_targvr, {alternator_opt_mode > 1}
+ field = "WOT TPS%", alternator_wot, {alternator_opt_mode > 1}
+ field = "WOT Target Voltage", alternator_wotv, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "WOT Timeout", alternator_wottimeout, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "Over-Run Target Voltage", alternator_overrv, {alternator_opt_mode > 1}
+
+ dialog = alt_settings, ""
+ panel = alt_settings_t
+ panel = alt_pidorload
+ panel = alt_settings_b
+
+ dialog = alt_outcurve, "", card
+ panel = alternator_outfreq, Center, {alternator_opt_mode == 2}
+ panel = alternator_outduty, Center, {alternator_opt_mode == 3}
+ panel = alternator_linearise, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_curves, "", yAxis
+ panel = alternator_tempcurve, North, {alternator_opt_mode && alternator_tempin}
+ panel = alt_outcurve
+
+ dialog = alternator, "Alternator Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#altctl"
+ panel = alt_settings, West
+ panel = alt_curves, Center
+
+ dialog = eaecombi1top, "", xAxis
+ panel = EAEBSOCcurve
+ panel = EAEBAWCcurve
+
+ dialog = eaecombi1bot, "", yAxis
+ liveGraph = eaeGraph, "AE Graph", North
+ graphLine = EAEFuelCorr1
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+
+ dialog = EAEcombi1, "EAE Sucked/Adhered Coefficients", border
+ panel = eaecombi1top, Center
+ panel = eaecombi1bot, South
+
+ dialog = ms3_pe_t, ""
+ field = "Do not try to enable an output port that is already in use for another function."
+
+ dialog = ms3_port_edit_wrap, "", yAxis
+ panel = ms3_port_edit, North
+ panel = ms3_pe_t
+
+ dialog = fuelpump_set, ""
+ field = "Fuel Pump Mode", fp_opt_mode
+ field = "Control Interval", fp_ctl_ms
+ field = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ field = "Output Frequency", fp_freq, {fp_opt_mode}
+ field = "Fuel Pump Output Polarity", fp_opt_inv, {fp_opt_mode}
+ field = "Pressure Regulation/Correction", fp_opt_reg, {fp_opt_mode == 0}
+ field = "'Fixed' automatically adjusts fuel PW."
+ field = "Static/Target Rail Differential Pressure", rail_pressure_psig
+ field = "Static/Target Rail Differential Pressure", rail_pressure_kpag
+ field = "Priming Duty", fp_prime_duty, {fp_opt_mode}
+ field = "Off Duty", fp_off_duty, {fp_opt_mode}
+ field = "Minimum Duty", fp_min_duty, {fp_opt_mode}
+ field = "Maximum Duty", fp_max_duty, {fp_opt_mode}
+ field = "Pressure Sensor Input (kPa)", fp_press_in
+ field = "Sensor Type", fp_press_type, {fp_press_in}
+ field = "Temperature Sensor Input", fueltemp1
+ field = "Temperature Correction", fueltemp1_corr, {fueltemp1}
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", fp_Kp, {fp_opt_mode == 2}
+ field = "Integral Gain", fp_Ki, {fp_opt_mode == 2}
+ field = "Derivative Gain", fp_Kd, {fp_opt_mode == 2}
+
+ dialog = fuelpump, "Fuel Pump and Pressure Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpump"
+ panel = fuelpump_set, West
+ panel = fp_dutyTbl, Center, {fp_opt_mode == 1}
+
+ dialog = boostvss_curve, "", card
+ panel = boostvss_duty_curve, Center, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) && ((boost_vss == 1) || (boost_vss == 2))}
+ panel = boostvss_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl)&& ((boost_vss == 1) || (boost_vss == 2))}
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = tcslip_set, "", yAxis
+ field = "0-5V knob Input", tc_knob
+
+ dialog = tcslip_menu, "Traction Control - External Slip% Input", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionslip"
+ panel = tc_slip_curve
+ panel = tcslip_set
+
+ dialog = blend1_set, "", yAxis
+ field = "X Axis Parameter", blend_opt1
+ field = "%VE2. 0% = Fully VE1. 100% = Fully VE2."
+ dialog = blend1menu, "Blend Curve (1)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend1"
+ panel = blend1_curve
+ panel = blend1_set
+
+ dialog = blend2_set
+ field = "X Axis Parameter", blend_opt2
+ field = "%Spk2. 0% = Fully Spk1. 100% = Fully Spk2."
+ dialog = blend2menu, "Blend Curve (2)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend2"
+ panel = blend2_curve
+ panel = blend2_set
+
+ dialog = blend3_set
+ field = "X Axis Parameter", blend_opt3
+ field = "%VE3/4. 0% = Fully VE1/2. 100% = Fully VE3/4."
+ dialog = blend3menu, "Blend Curve (3)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend3"
+ panel = blend3_curve
+ panel = blend3_set
+
+ dialog = blend4_set
+ field = "X Axis Parameter", blend_opt4
+ field = "%Spk3/4. 0% = Fully Spk1/2. 100% = Fully Spk3/4."
+ dialog = blend4menu, "Blend Curve (4)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend4"
+ panel = blend4_curve
+ panel = blend4_set
+
+ dialog = blend5_set
+ field = "X Axis Parameter", blend_opt5
+ field = "%AFR2. 0% = Fully AFR1. 100% = Fully AFR2."
+ dialog = blend5menu, "Blend Curve (5)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend5"
+ panel = blend5_curve
+ panel = blend5_set
+
+ dialog = blend6_set
+ field = "X Axis Parameter", blend_opt6
+ field = "%Boost2. 0% = Fully Boost1. 100% = Fully Boost2."
+ dialog = blend6menu, "Blend Curve (6)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend6"
+ panel = blend6_curve
+ panel = blend6_set
+
+ dialog = blend7_set
+ field = "X Axis Parameter", blend_opt7
+ field = "%Crank%2. 0% = Fully Cranking curve1. 100% = Fully Cranking curve2."
+ dialog = blend7menu, "Blend Curve (7)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend7_curve
+ panel = blend7_set
+
+ dialog = blend8_set
+ field = "Flex blend%. 0% = Fully Tables1. 100% = Fully Tables2."
+ dialog = blend8menu, "Blend Curve (8)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend8_curve
+ panel = blend8_set
+
+ dialog = airden_words
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ field = "Firmwares 1.1.x and earlier used an embedded curve and a correction curve on top."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = checkengine_l, "Sensor Validation"
+ field = "Sensor Checking", cel_opt_on
+ field = "Light Output", cel_port, {cel_opt_on}
+ field = "CEL Solid/Flash Codes", cel_opt_flash, {cel_opt_on}
+ field = "Light When Not Running", cel_opt_when, {cel_opt_on && cel_port}
+ field = "Ignore Fluctuations For First", cel_runtime, {cel_opt_on}
+ field = "#MAP Sensor Check", cel_opt2_map, {cel_opt_on}
+ field = "Minimum ADC", map_minadc, {cel_opt_on}
+ field = "Maximum ADC", map_maxadc, {cel_opt_on}
+ field = "Minimum Fluctuation", map_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", map_var_upper, {cel_opt_on}
+ field = "#MAT Sensor Check", cel_opt2_mat, {cel_opt_on}
+ field = "Minimum ADC", mat_minadc, {cel_opt_on}
+ field = "Maximum ADC", mat_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", mat_var_upper, {cel_opt_on}
+ field = "#CLT Sensor Check", cel_opt2_clt, {cel_opt_on}
+ field = "Minimum ADC", clt_minadc, {cel_opt_on}
+ field = "Maximum ADC", clt_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", clt_var_upper, {cel_opt_on}
+ field = "#TPS Check", cel_opt2_tps, {cel_opt_on}
+ field = "Minimum ADC", tps_minadc, {cel_opt_on}
+ field = "Maximum ADC", tps_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", tps_var_upper, {cel_opt_on}
+
+ dialog = checkengine_r, ""
+ field = "#Battery Check", cel_opt2_batt, {cel_opt_on}
+ field = "Minimum Voltage", batt_minv, {cel_opt_on}
+ field = "Maximum Voltage", batt_maxv, {cel_opt_on}
+ field = "Maximum Fluctuation", batt_var_upper, {cel_opt_on}
+ field = "#EGO1 Sensor Check", cel_opt2_afr0, {cel_opt_on}
+ field = "Minimum AFR", afr_min, {cel_opt_on}
+ field = "Maximum AFR", afr_max, {cel_opt_on}
+ field = "Minimum Fluctuation", afr_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", afr_var_upper, {cel_opt_on}
+ field = "#Sync-Loss Check", cel_opt2_sync, {cel_opt_on}
+ field = "No. Sync Losses Allowed", cel_synctol, {cel_opt_on}
+ field = "#EGT Sensor Check", cel_opt2_egt, {cel_opt_on}
+ field = "Minimum EGT", egt_minvalid, {cel_opt_on}
+ field = "Maximum EGT", egt_maxvalid, {cel_opt_on}
+ field = "Minimum Fluctuation", egt_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", egt_var_upper, {cel_opt_on}
+ field = "#Flex Sensor Check", cel_opt3_flex, {cel_opt_on && flexFuel}
+ field = "AFR safety, oil pressure set CEL."
+ field = ""
+ field = "status5 Input", cel_opt_stat, {cel_opt_on}
+ field = "status5 Shows", cel_opt_adc, {cel_opt_on && cel_opt_stat}
+
+ dialog = limpmode, "Limp Mode"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#limp"
+ field = "MAP Triggers Limp Mode", cel_action1_map, {cel_opt_on && cel_opt2_map}
+ field = "Use Fallback MAP Table", cel_action1_map_an, {cel_opt_on && cel_opt2_map && cel_action1_map}
+ field = "MAT Triggers Limp Mode", cel_action1_mat, {cel_opt_on && cel_opt2_mat}
+ field = "Fallback MAT", cel_mat_default, {cel_opt_on && cel_opt2_mat && cel_action1_mat}
+ field = "CLT Triggers Limp Mode", cel_action1_clt, {cel_opt_on && cel_opt2_clt}
+ field = "Fallback Cold CLT", cel_clt_cold, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Fallback Warmed Up CLT", cel_clt_warm, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Time To Warmup Engine", cel_warmtime, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "TPS Triggers Limp Mode", cel_action1_tps, {cel_opt_on && cel_opt2_tps}
+ field = "TPS-accel is disabled in fault conditions"
+ field = "Batt Triggers Limp Mode", cel_action1_batt, {cel_opt_on && cel_opt2_batt}
+ field = "EGO Triggers Limp Mode", cel_action1_ego, {cel_opt_on && cel_opt2_afr0}
+ field = "Flex Triggers Limp Mode", cel_action2_flex, {cel_opt_on && cel_opt3_flex}
+ field = "EGT Triggers Limp Mode", cel_action2_egt, {cel_opt_on && cel_opt2_egt}
+ field = "The following apply in limp mode:"
+ field = "Limp Rev Limit", cel_revlim
+ field = "Limp Boost Limit", cel_overboost
+ field = "Limp Boost Valve Duty", cel_boost_duty
+ field = "Limp Boost Valve2 Duty", cel_boost_duty2
+ field = "Limp Retard Timing By", cel_retard
+
+ dialog = checkengine, "Check Engine Light", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#cel"
+ panel = checkengine_l
+ panel = checkengine_r
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn level", rpmwarn
+ field = "RPM - Danger level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "VE Value - Max", vehigh
+ field = "Allow WUE Below 100% (only for LPG)", wue_lpg
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+ field = "Air-Cooled Expanded CLT Range", clt_exp
+
+; list of features and what pins they use
+ dialog = iopinlist1, ".", yAxis
+ displayOnlyField = "Main Fuel Outputs", hardware_fuel
+ displayOnlyField = "Inj1, Inj2", hardware_fuel, {hardware_fuel== 0}
+ displayOnlyField = "MS3X InjA, InjB etc.", hardware_fuel, {hardware_fuel}
+ displayOnlyField = "Spark Hardware In Use", hardware_spk
+ displayOnlyField = "LED D14, D16, D15, JS11 etc.", hardware_spk, {hardware_spk== 0}
+ displayOnlyField = "MS3X SpkA, SpkB etc.", hardware_spk, {hardware_spk}
+ displayOnlyField = "Cam Input (If Used)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ displayOnlyField = "Programmable On/Off Output: PM3 - Injection LED D14", psEnabled[0], {psEnabled[0]}
+ displayOnlyField = "Programmable On/Off Output: PM4 - Accel LED D16", psEnabled[1], {psEnabled[1]}
+ displayOnlyField = "Programmable On/Off Output: PM5 - Warmup LED D15", psEnabled[2], {psEnabled[2]}
+ displayOnlyField = "Programmable On/Off Output: PJ0 - IAC2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: PJ1 - IAC1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PJ7 - JS11", psEnabled[5], {psEnabled[5]}
+ displayOnlyField = "Programmable On/Off Output: PP2 - Idle", psEnabled[6], {psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: PP3 - Boost", psEnabled[7], {psEnabled[7]}
+ displayOnlyField = "Programmable On/Off Output: PP4 - Nitrous 1", psEnabled[8], {psEnabled[8]}
+ displayOnlyField = "Programmable On/Off Output: PP5 - Nitrous 2", psEnabled[9], {psEnabled[9]}
+ displayOnlyField = "Programmable On/Off Output: PP6 - VVT", psEnabled[10], {psEnabled[10]}
+ displayOnlyField = "Programmable On/Off Output: PP7 - Fidle", psEnabled[11], {psEnabled[11]}
+ displayOnlyField = "Programmable On/Off Output: PT1 - V3 Inj 1", psEnabled[12], {psEnabled[12]}
+ displayOnlyField = "Programmable On/Off Output: PT3 - V3 Inj 2", psEnabled[13], {psEnabled[13]}
+ displayOnlyField = "Programmable On/Off Output: PT5 - JS10", psEnabled[14], {psEnabled[14]}
+ displayOnlyField = "Programmable On/Off Output: PK0 - Tacho", psEnabled[15], {psEnabled[15]}
+ displayOnlyField = "Programmable On/Off Output: PA0 - Inj A", psEnabled[16], {psEnabled[16]}
+ displayOnlyField = "Programmable On/Off Output: PA1 - Inj B", psEnabled[17], {psEnabled[17]}
+ displayOnlyField = "Programmable On/Off Output: PA2 - Inj C", psEnabled[18], {psEnabled[18]}
+ displayOnlyField = "Programmable On/Off Output: PA3 - Inj D", psEnabled[19], {psEnabled[19]}
+ displayOnlyField = "Programmable On/Off Output: PA4 - Inj E", psEnabled[20], {psEnabled[20]}
+ displayOnlyField = "Programmable On/Off Output: PA5 - Inj F", psEnabled[21], {psEnabled[21]}
+ displayOnlyField = "Programmable On/Off Output: PA6 - Inj G", psEnabled[22], {psEnabled[22]}
+ displayOnlyField = "Programmable On/Off Output: PA7 - Inj H", psEnabled[23], {psEnabled[23]}
+ displayOnlyField = "Programmable On/Off Output: PB0 - Spk A", psEnabled[24], {psEnabled[24]}
+ displayOnlyField = "Programmable On/Off Output: PB1 - Spk B", psEnabled[25], {psEnabled[25]}
+ displayOnlyField = "Programmable On/Off Output: PB2 - Spk C", psEnabled[26], {psEnabled[26]}
+ displayOnlyField = "Programmable On/Off Output: PB3 - Spk D", psEnabled[27], {psEnabled[27]}
+ displayOnlyField = "Programmable On/Off Output: PB4 - Spk E", psEnabled[28], {psEnabled[28]}
+ displayOnlyField = "Programmable On/Off Output: PB5 - Spk F", psEnabled[29], {psEnabled[29]}
+ displayOnlyField = "Programmable On/Off Output: PB6 - Spk G", psEnabled[30], {psEnabled[30]}
+ displayOnlyField = "Programmable On/Off Output: PB7 - Spk H", psEnabled[31], {psEnabled[31]}
+
+
+ displayOnlyField = "Programmable On/Off Output: CANout01", psEnabled[32], {psEnabled[32]}
+ displayOnlyField = "Programmable On/Off Output: CANout02", psEnabled[33], {psEnabled[33]}
+ displayOnlyField = "Programmable On/Off Output: CANout03", psEnabled[34], {psEnabled[34]}
+ displayOnlyField = "Programmable On/Off Output: CANout04", psEnabled[35], {psEnabled[35]}
+ displayOnlyField = "Programmable On/Off Output: CANout05", psEnabled[36], {psEnabled[36]}
+ displayOnlyField = "Programmable On/Off Output: CANout06", psEnabled[37], {psEnabled[37]}
+ displayOnlyField = "Programmable On/Off Output: CANout07", psEnabled[38], {psEnabled[38]}
+ displayOnlyField = "Programmable On/Off Output: CANout08", psEnabled[39], {psEnabled[39]}
+ displayOnlyField = "Programmable On/Off Output: CANout09", psEnabled[40], {psEnabled[40]}
+ displayOnlyField = "Programmable On/Off Output: CANout10", psEnabled[41], {psEnabled[41]}
+ displayOnlyField = "Programmable On/Off Output: CANout11", psEnabled[42], {psEnabled[42]}
+ displayOnlyField = "Programmable On/Off Output: CANout12", psEnabled[43], {psEnabled[43]}
+ displayOnlyField = "Programmable On/Off Output: CANout13", psEnabled[44], {psEnabled[44]}
+ displayOnlyField = "Programmable On/Off Output: CANout14", psEnabled[45], {psEnabled[45]}
+ displayOnlyField = "Programmable On/Off Output: CANout15", psEnabled[46], {psEnabled[46]}
+ displayOnlyField = "Programmable On/Off Output: CANout16", psEnabled[47], {psEnabled[47]}
+ displayOnlyField = "Programmable On/Off Output: Loop 1", psEnabled[48], {psEnabled[48]}
+ displayOnlyField = "Programmable On/Off Output: Loop 2", psEnabled[49], {psEnabled[49]}
+ displayOnlyField = "Programmable On/Off Output: Loop 3", psEnabled[50], {psEnabled[50]}
+
+ displayOnlyField = "EGO 1 Port", egoport1
+ displayOnlyField = "EGO 2 Port", egoport2, {egonum > 1}
+ displayOnlyField = "EGO 3 Port", egoport3, {egonum > 2}
+ displayOnlyField = "EGO 4 Port", egoport4, {egonum > 3}
+ displayOnlyField = "EGO 5 Port", egoport5, {egonum > 4}
+ displayOnlyField = "EGO 6 Port", egoport6, {egonum > 5}
+ displayOnlyField = "EGO 7 Port", egoport7, {egonum > 6}
+ displayOnlyField = "EGO 8 Port", egoport8, {egonum > 7}
+#ifdef CYL_12_16_SUPPORT
+ displayOnlyField = "EGO 9 Port", egoport9, {egonum > 8}
+ displayOnlyField = "EGO 10 Port", egoport10, {egonum > 9}
+ displayOnlyField = "EGO 11 Port", egoport11, {egonum > 10}
+ displayOnlyField = "EGO 12 Port", egoport12, {egonum > 11}
+ displayOnlyField = "EGO 13 Port", egoport13, {egonum > 12}
+ displayOnlyField = "EGO 14 Port", egoport14, {egonum > 13}
+ displayOnlyField = "EGO 15 Port", egoport15, {egonum > 14}
+ displayOnlyField = "EGO 16 Port", egoport16, {egonum > 15}
+#endif
+ displayOnlyField = "Generic Sensor 01 Input", sensor01_source, {sensor01_source}
+ displayOnlyField = "Generic Sensor 02 Input", sensor02_source, {sensor02_source}
+ displayOnlyField = "Generic Sensor 03 Input", sensor03_source, {sensor03_source}
+ displayOnlyField = "Generic Sensor 04 Input", sensor04_source, {sensor04_source}
+ displayOnlyField = "Generic Sensor 05 Input", sensor05_source, {sensor05_source}
+ displayOnlyField = "Generic Sensor 06 Input", sensor06_source, {sensor06_source}
+ displayOnlyField = "Generic Sensor 07 Input", sensor07_source, {sensor07_source}
+ displayOnlyField = "Generic Sensor 08 Input", sensor08_source, {sensor08_source}
+ displayOnlyField = "Generic Sensor 09 Input", sensor09_source, {sensor09_source}
+ displayOnlyField = "Generic Sensor 10 Input", sensor10_source, {sensor10_source}
+ displayOnlyField = "Generic Sensor 11 Input", sensor11_source, {sensor11_source}
+ displayOnlyField = "Generic Sensor 12 Input", sensor12_source, {sensor12_source}
+ displayOnlyField = "Generic Sensor 13 Input", sensor13_source, {sensor13_source}
+ displayOnlyField = "Generic Sensor 14 Input", sensor14_source, {sensor14_source}
+ displayOnlyField = "Generic Sensor 15 Input", sensor15_source, {sensor15_source}
+ displayOnlyField = "Generic Sensor 16 Input", sensor16_source, {sensor16_source}
+ displayOnlyField = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ displayOnlyField = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ displayOnlyField = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ displayOnlyField = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ displayOnlyField = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ displayOnlyField = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ displayOnlyField = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ displayOnlyField = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ displayOnlyField = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ displayOnlyField = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ displayOnlyField = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ displayOnlyField = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ displayOnlyField = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ displayOnlyField = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ displayOnlyField = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ displayOnlyField = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ displayOnlyField = "Internal Knock Module Uses D14,D15,D16,JS11,PM2", knk_option_an, {(knk_option_an == 2)}
+
+ dialog = iopinlist2, ".", yAxis
+ displayOnlyField = "PWM Idle Output", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "PWM Idle 3 Wire Mode", pwmidle_freq_pin3, { (IdleCtl == 2) && pwmidle_freq_pin3 }
+ displayOnlyField = "Fan Control Output", fanctl_settings_pin, { fanctl_settings_on }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && ac_idleup_io_out }
+ displayOnlyField = "AC Idle-up Input", ac_idleup_io_in, { ac_idleup_settings }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport_t == 0}
+ displayOnlyField = "MAP Frequency Input", mapport_f, {mapport_t == 1}
+ displayOnlyField = "MAP 2nd Port", map2port, {(mapport_t == 0) && (mapport != 7) && map2port}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {(MAFOption_t == 0)}
+ displayOnlyField = "MAF Frequency Input", MAFOption_f, {(MAFOption_t == 1)}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Flex Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+ displayOnlyField = "VVT1 Output", vvt_out1, {vvt_opt1_on}
+ displayOnlyField = "VVT2 Output", vvt_out2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Output", vvt_out3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Output", vvt_out4, {vvt_opt1_on > 3}
+ displayOnlyField = "VVT1 Output (complementary)", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT2 Output (complementary)", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT3 Output (complementary)", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT4 Output (complementary)", vvt_softout4, {(vvt_opt1_on > 3) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT1 Input", vvt_opt3_cam1, {0}
+ displayOnlyField = "VVT2 Input", vvt_opt3_cam2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Input", vvt_opt3_cam3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Input", vvt_opt3_cam4, {vvt_opt1_on > 3}
+ displayOnlyField = "Fuel Table Switching Input", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ displayOnlyField = "Spark Table Switching Input", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ displayOnlyField = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ displayOnlyField = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ displayOnlyField = "Dual Fuel Input", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ displayOnlyField = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ displayOnlyField = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ displayOnlyField = "Boost Control Output (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control Output (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Boost Control2 Output (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control2 Output (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Gen PWM A Output", pwm_opt2_a, {pwm_opt_on_a}
+ displayOnlyField = "Gen PWM B Output", pwm_opt2_b, {pwm_opt_on_b}
+ displayOnlyField = "Gen PWM C Output", pwm_opt2_c, {pwm_opt_on_c}
+ displayOnlyField = "Gen PWM D Output", pwm_opt2_d, {pwm_opt_on_d}
+ displayOnlyField = "Gen PWM E Output", pwm_opt2_e, {pwm_opt_on_e}
+ displayOnlyField = "Gen PWM F Output", pwm_opt2_f, {pwm_opt_on_f}
+ displayOnlyField = "Generic Closed-Loop A Output", generic_pid_pwm_outs_a, {generic_pid_flags_a_on}
+ displayOnlyField = "Generic Closed-Loop B Output", generic_pid_pwm_outs_b, {generic_pid_flags_b_on}
+
+ displayOnlyField = "WI Pump Output", water_pins_pump, {water_freq_on}
+ displayOnlyField = "WI Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ displayOnlyField = "VSS1 Analogue sensor", vss1_an, {vss_opt0_1 == 2}
+ displayOnlyField = "VSS1 Digi Input", vss_opt1, {vss_opt0_1 == 1}
+ displayOnlyField = "VSS1 CAN PWM Port", vss1_pwmseq, {vss_opt1 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "VSS2 Analogue Sensor", vss2_an, {vss_opt0_2 == 2}
+ displayOnlyField = "VSS2 Digi Input", vss_opt2, {vss_opt0_2 == 1}
+ displayOnlyField = "VSS2 CAN PWM Port", vss2_pwmseq, {vss_opt2 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "Shaft Sensor 1", ss_opt1, {ss_opt1}
+ displayOnlyField = "Shaft Sensor 2", ss_opt2, {ss_opt2}
+ displayOnlyField = "VSS Output", vssout_opt, {vssout_opt}
+ displayOnlyField = "Gear Pos. Input", gear_port_an, { (gear_method == 2) }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+ displayOnlyField = "Accelerometer X Input", accXport, {accXport}
+ displayOnlyField = "Accelerometer Y Input", accYport, {accYport}
+ displayOnlyField = "Accelerometer Z Input", accZport, {accZport}
+ displayOnlyField = "SDcard Datalog button", log_style2_but, {log_style_on2 == 2}
+ displayOnlyField = "SDcard LED indicator", log_style_led, {log_style_on2}
+ displayOnlyField = "SDcard Stream Input", log_style3_adc, {log_style_block == 1}
+ displayOnlyField = "SDcard trigger output", sdpulse_out, {log_style_on2 >= 2}
+ displayOnlyField = "Nitrous Stage 1 output - nitrous", n2o1n_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 1 output - fuel", n2o1f_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable input on:", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 2 output - nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "Nitrous Stage 2 output - fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "AFR safety Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action }
+ displayOnlyField = "Internal RTC uses PM1 and PM3", opt142_rtc, {opt142_rtc == 1}
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Variable launch Input", launch_var_on, { launch_opt_on >0 }
+ displayOnlyField = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ displayOnlyField = "Anti-Lag Enable Input", als_in_pin, {als_in_pin}
+ displayOnlyField = "ALS On/off Output", als_out_pin, {als_in_pin}
+ displayOnlyField = "ALS PWM Output", als_opt_pwmout, {als_in_pin}
+ displayOnlyField = "ALS Output", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ displayOnlyField = "Traction Control Enable Input", tc_enin, {tc_opt_on}
+ displayOnlyField = "Traction Control Light output", tc_led_out, {tc_opt_on}
+ displayOnlyField = "Torque Convertor Lockup", tclu_outpin, {tclu_outpin}
+ displayOnlyField = "TCLU Enable Input", tclu_enablepin, {tclu_outpin}
+ displayOnlyField = "TCLU Brake switch", tclu_brakepin, {tclu_outpin}
+ displayOnlyField = "Staged Injection Relay Output 1", staged_out1, { staged_first_param }
+ displayOnlyField = "Staged Injection Relay Output 2", staged_out2, { staged_first_param }
+ displayOnlyField = "Alternator Control Output", alternator_controlout, {alternator_opt_mode}
+ displayOnlyField = "Alternator Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+ displayOnlyField = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ displayOnlyField = "Battery Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ displayOnlyField = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ displayOnlyField = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ displayOnlyField = "Primary Pressure Input", fp_press_in, {fp_press_in}
+ displayOnlyField = "Primary Fuel Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Secondary Fuel Pressure Input", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press}
+ displayOnlyField = "Secondary Fuel Temperature Input", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp}
+
+ dialog = iopinlist, "Feature List Showing I/O pins", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iopins"
+ panel = iopinlist1, West
+ panel = iopinlist2, East
+
+; now list of pins and what features they are assigned to.
+ dialog = pinusage1, ".", yAxis
+ displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) }
+ displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) }
+ displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) }
+ displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) }
+ displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) }
+ displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) }
+ displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) }
+ displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) }
+
+ displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) }
+ displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) }
+ displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) }
+ displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) }
+ displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) }
+ displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) }
+ displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) }
+ displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) }
+
+ displayOnlyField = "Hardware PWM A", { bitStringValue( portLabels , portusage_pwmscl[1] ) }
+ displayOnlyField = "Hardware PWM B", { bitStringValue( portLabels , portusage_pwmscl[3] ) }
+
+ dialog = pinusage2, ".", yAxis
+ displayOnlyField = "PE0", { bitStringValue( portLabels , portusage_e[0] ) }
+ displayOnlyField = "PE1", { bitStringValue( portLabels , portusage_e[1] ) }
+ displayOnlyField = "Flex", { bitStringValue( portLabels , portusage_e[2] ) }
+
+ displayOnlyField = "FP", { bitStringValue( portLabels , portusage_e[4] ) }
+
+ displayOnlyField = "Tableswitch in", { bitStringValue( portLabels , portusage_h[6] ) }
+ displayOnlyField = "Nitrous in", { bitStringValue( portLabels , portusage_h[7] ) }
+
+ displayOnlyField = "IAC1", { bitStringValue( portLabels , portusage_j[0] ) }
+ displayOnlyField = "IAC2", { bitStringValue( portLabels , portusage_j[1] ) }
+
+ displayOnlyField = "JS11", { bitStringValue( portLabels , portusage_j[7] ) }
+ displayOnlyField = "Tacho Out", { bitStringValue( portLabels , portusage_k[0] ) }
+ displayOnlyField = "(PK1)", { bitStringValue( portLabels , portusage_k[1] ) }
+ displayOnlyField = "Launch In", { bitStringValue( portLabels , portusage_k[2] ) }
+ displayOnlyField = "(PK3)", { bitStringValue( portLabels , portusage_k[3] ) }
+ displayOnlyField = "(PK7)", { bitStringValue( portLabels , portusage_k[7] ) }
+ displayOnlyField = "(PM2)", { bitStringValue( portLabels , portusage_m[2] ) }
+ displayOnlyField = "Inject LED", { bitStringValue( portLabels , portusage_m[3] ) }
+ displayOnlyField = "Accel LED", { bitStringValue( portLabels , portusage_m[4] ) }
+ displayOnlyField = "Warmup LED", { bitStringValue( portLabels , portusage_m[5] ) }
+
+
+ dialog = pinusage3, ".", yAxis
+ displayOnlyField = "Idle", { bitStringValue( portLabels , portusage_p[2] ) }
+ displayOnlyField = "Boost", { bitStringValue( portLabels , portusage_p[3] ) }
+ displayOnlyField = "Nitrous 1", { bitStringValue( portLabels , portusage_p[4] ) }
+ displayOnlyField = "Nitrous 2", { bitStringValue( portLabels , portusage_p[5] ) }
+ displayOnlyField = "VVT", { bitStringValue( portLabels , portusage_p[6] ) }
+ displayOnlyField = "FIDLE", { bitStringValue( portLabels , portusage_p[7] ) }
+
+; displayOnlyField = "Primary tach", { bitStringValue( portLabels , portusage_t[0] ) }
+ displayOnlyField = "Inj Bank 1", { bitStringValue( portLabels , portusage_t[1] ) }
+ displayOnlyField = "MS3X Cam", { bitStringValue( portLabels , portusage_t[2] ) }
+ displayOnlyField = "Inj Bank 2", { bitStringValue( portLabels , portusage_t[3] ) }
+ displayOnlyField = "PT4", { bitStringValue( portLabels , portusage_t[4] ) }
+ displayOnlyField = "PT5/JS10", { bitStringValue( portLabels , portusage_t[5] ) }
+ displayOnlyField = "Datalog In", { bitStringValue( portLabels , portusage_t[6] ) }
+
+; displayOnlyField = "PT7", { bitStringValue( portLabels , portusage_t[7] ) }
+
+ displayOnlyField = "EXT_MAP (ADC11)", { bitStringValue( portLabels , portusage_ad0h[3] ) }
+ displayOnlyField = "EGO2 (ADC12)", { bitStringValue( portLabels , portusage_ad0h[4] ) }
+ displayOnlyField = "SPAREADC (ADC13)", { bitStringValue( portLabels , portusage_ad0h[5] ) }
+
+ displayOnlyField = "MAP (ADC0)", { bitStringValue( portLabels , portusage_ad0l[0] ) }
+; displayOnlyField = "ADC1", { bitStringValue( portLabels , portusage_ad0l[1] ) }
+; displayOnlyField = "ADC2", { bitStringValue( portLabels , portusage_ad0l[2] ) }
+; displayOnlyField = "ADC3", { bitStringValue( portLabels , portusage_ad0l[3] ) }
+; displayOnlyField = "ADC4", { bitStringValue( portLabels , portusage_ad0l[4] ) }
+; displayOnlyField = "ADC5", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ displayOnlyField = "JS5 (ADC6)", { bitStringValue( portLabels , portusage_ad0l[6] ) }
+ displayOnlyField = "JS4 (ADC7)", { bitStringValue( portLabels , portusage_ad0l[7] ) }
+
+
+ dialog = pinusage4, ".", yAxis
+ displayOnlyField = "CANIN 1", { bitStringValue( portLabels , portusage_canin[0] ) }
+ displayOnlyField = "CANIN 2", { bitStringValue( portLabels , portusage_canin[1] ) }
+ displayOnlyField = "CANIN 3", { bitStringValue( portLabels , portusage_canin[2] ) }
+ displayOnlyField = "CANIN 4", { bitStringValue( portLabels , portusage_canin[3] ) }
+ displayOnlyField = "CANIN 5", { bitStringValue( portLabels , portusage_canin[4] ) }
+ displayOnlyField = "CANIN 6", { bitStringValue( portLabels , portusage_canin[5] ) }
+ displayOnlyField = "CANIN 7", { bitStringValue( portLabels , portusage_canin[6] ) }
+ displayOnlyField = "CANIN 8", { bitStringValue( portLabels , portusage_canin[7] ) }
+
+ displayOnlyField = "CANPWM 1", { bitStringValue( portLabels , portusage_canpwm[0] ) }
+ displayOnlyField = "CANPWM 2", { bitStringValue( portLabels , portusage_canpwm[1] ) }
+ displayOnlyField = "CANPWM 3", { bitStringValue( portLabels , portusage_canpwm[2] ) }
+ displayOnlyField = "CANPWM 4", { bitStringValue( portLabels , portusage_canpwm[3] ) }
+ displayOnlyField = "CANPWM 5", { bitStringValue( portLabels , portusage_canpwm[4] ) }
+ displayOnlyField = "CANPWM 6", { bitStringValue( portLabels , portusage_canpwm[5] ) }
+ displayOnlyField = "CANPWM 7", { bitStringValue( portLabels , portusage_canpwm[6] ) }
+ displayOnlyField = "CANPWM 8", { bitStringValue( portLabels , portusage_canpwm[7] ) }
+
+ dialog = pinusage5, ".", yAxis
+ displayOnlyField = "CANOUT 1", { bitStringValue( portLabels , portusage_canout[0] ) }
+ displayOnlyField = "CANOUT 2", { bitStringValue( portLabels , portusage_canout[1] ) }
+ displayOnlyField = "CANOUT 3", { bitStringValue( portLabels , portusage_canout[2] ) }
+ displayOnlyField = "CANOUT 4", { bitStringValue( portLabels , portusage_canout[3] ) }
+ displayOnlyField = "CANOUT 5", { bitStringValue( portLabels , portusage_canout[4] ) }
+ displayOnlyField = "CANOUT 6", { bitStringValue( portLabels , portusage_canout[5] ) }
+ displayOnlyField = "CANOUT 7", { bitStringValue( portLabels , portusage_canout[6] ) }
+ displayOnlyField = "CANOUT 8", { bitStringValue( portLabels , portusage_canout[7] ) }
+ displayOnlyField = "CANOUT 9", { bitStringValue( portLabels , portusage_canout[8] ) }
+ displayOnlyField = "CANOUT 10", { bitStringValue( portLabels , portusage_canout[9] ) }
+ displayOnlyField = "CANOUT 11", { bitStringValue( portLabels , portusage_canout[10] ) }
+ displayOnlyField = "CANOUT 12", { bitStringValue( portLabels , portusage_canout[11] ) }
+ displayOnlyField = "CANOUT 13", { bitStringValue( portLabels , portusage_canout[12] ) }
+ displayOnlyField = "CANOUT 14", { bitStringValue( portLabels , portusage_canout[13] ) }
+ displayOnlyField = "CANOUT 15", { bitStringValue( portLabels , portusage_canout[14] ) }
+ displayOnlyField = "CANOUT 16", { bitStringValue( portLabels , portusage_canout[15] ) }
+
+ dialog = pinusage6, ".", yAxis
+ displayOnlyField = "Loop 1", { bitStringValue( portLabels , portusage_loop[0] ) }
+ displayOnlyField = "Loop 2", { bitStringValue( portLabels , portusage_loop[1] ) }
+ displayOnlyField = "Loop 3", { bitStringValue( portLabels , portusage_loop[2] ) }
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pinusage7, ".", yAxis
+ displayOnlyField = "CANADC 1", { bitStringValue( portLabels , portusage_canadc[0] ) }
+ displayOnlyField = "CANADC 2", { bitStringValue( portLabels , portusage_canadc[1] ) }
+ displayOnlyField = "CANADC 3", { bitStringValue( portLabels , portusage_canadc[2] ) }
+ displayOnlyField = "CANADC 4", { bitStringValue( portLabels , portusage_canadc[3] ) }
+ displayOnlyField = "CANADC 5", { bitStringValue( portLabels , portusage_canadc[4] ) }
+ displayOnlyField = "CANADC 6", { bitStringValue( portLabels , portusage_canadc[5] ) }
+ displayOnlyField = "CANADC 7", { bitStringValue( portLabels , portusage_canadc[6] ) }
+ displayOnlyField = "CANADC 8", { bitStringValue( portLabels , portusage_canadc[7] ) }
+
+ dialog = pinusage8, ".", yAxis
+ displayOnlyField = "CANADC 9", { bitStringValue( portLabels , portusage_canadc[8] ) }
+ displayOnlyField = "CANADC 10", { bitStringValue( portLabels , portusage_canadc[9] ) }
+ displayOnlyField = "CANADC 11", { bitStringValue( portLabels , portusage_canadc[10] ) }
+ displayOnlyField = "CANADC 12", { bitStringValue( portLabels , portusage_canadc[11] ) }
+ displayOnlyField = "CANADC 13", { bitStringValue( portLabels , portusage_canadc[12] ) }
+ displayOnlyField = "CANADC 14", { bitStringValue( portLabels , portusage_canadc[13] ) }
+ displayOnlyField = "CANADC 15", { bitStringValue( portLabels , portusage_canadc[14] ) }
+ displayOnlyField = "CANADC 16", { bitStringValue( portLabels , portusage_canadc[15] ) }
+
+ dialog = pinusage9, ".", yAxis
+ displayOnlyField = "CANADC 17", { bitStringValue( portLabels , portusage_canadc[16] ) }
+ displayOnlyField = "CANADC 18", { bitStringValue( portLabels , portusage_canadc[17] ) }
+ displayOnlyField = "CANADC 19", { bitStringValue( portLabels , portusage_canadc[18] ) }
+ displayOnlyField = "CANADC 20", { bitStringValue( portLabels , portusage_canadc[19] ) }
+ displayOnlyField = "CANADC 21", { bitStringValue( portLabels , portusage_canadc[20] ) }
+ displayOnlyField = "CANADC 22", { bitStringValue( portLabels , portusage_canadc[21] ) }
+ displayOnlyField = "CANADC 23", { bitStringValue( portLabels , portusage_canadc[22] ) }
+ displayOnlyField = "CANADC 24", { bitStringValue( portLabels , portusage_canadc[23] ) }
+
+ dialog = pinusage, "I/O Pins List Showing Usage - only works when online", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusage"
+ panel = pinusage1, West
+ panel = pinusage2, Center
+ panel = pinusage3, East
+
+ dialog = pinusagem, "", xAxis
+ panel = pinusage4, West
+ panel = pinusage5, Center
+ panel = pinusage6, East
+
+ dialog = pinusageb, "", xAxis
+ panel = pinusage7, West
+ panel = pinusage8, Center
+ panel = pinusage9, East
+
+ dialog = pinusagecan, "Expansion I/O Pins List/Usage - only works when online", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusagecan"
+ panel = pinusagem, North
+ panel = pinusageb, South
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "Afterstart Enrichment (ASE) - Percent Adder"
+ panel = asePct
+ panel = ase_note
+
+ dialog = nestedasePct2, "Afterstart Enrichment (ASE) - Percent Adder 2"
+ panel = asePct2
+ panel = ase_note
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = nestedwarmup_curve2, "Warmup Enrichment (WUE) - Percent Multiplier 2"
+ panel = warmup_curve2
+ panel = wc_note
+
+ dialog = tcsettings, "Traction Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#traction"
+ field = "Traction Control", tc_opt_on
+ field = "Method", tc_opt_method, {tc_opt_on}
+ field = "Enable Input", tc_enin, {tc_opt_on}
+ field = "Light output", tc_led_out, {tc_opt_on}
+ field = "Minimum TPS", tc_mintps, {tc_opt_on}
+ field = "Minimum MAP", tc_minmap, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Minimum VSS", tc_minvss, {tc_opt_on && (tc_opt_method != 2) && (tc_opt_method != 3) }
+ field = "VSS1 = driven, VSS2 = undriven wheels"
+; field = "Maximum VSS", tc_maxvss, {tc_opt_on }
+ field = "Slip % Setting", tc_opt_slipcurve, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Slip Threshold", tc_slipthresh, {tc_opt_on && (tc_opt_method == 1) && !tc_opt_slipcurve}
+ field = "Nitrous Control", tc_opt_n2o, {tc_opt_on }
+ field = "Add Fuel To:", tc_opt_bank, {tc_opt_on }
+ field = "When staging bank 1 = primary, bank 2 = secondary"
+
+ dialog = tc_top, "", xAxis
+ panel = tc_retard_curve, West
+ panel = tc_spkcut_curve, East, {spk_mode0 > 1}
+
+ dialog = tc_mid, "", xAxis
+ panel = tc_addfuel_curve, West
+ panel = tc_nitrous_curve, East, {N2Oopt_2}
+
+ dialog = tc_btm, "", xAxis
+
+ panel = tc_boost_curve, West, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ panel = tc_boost_duty_delta_curve, East, {boost_ctl_settings_on && (boost_ctl_settings_cl != 1)}
+
+ dialog = tc_curves, "Traction Control Reactions", yAxis
+ panel = tc_top, North
+ panel = tc_mid, Center
+ panel = tc_btm, South
+
+ dialog = tcluparams, "Torque Convertor Lockup"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tclu"
+ field = "Output Pin", tclu_outpin
+ field = "Enable Input", tclu_enablepin, {tclu_outpin}
+ field = "Brake Switch", tclu_brakepin, {tclu_outpin}
+ field = "Minimum TPS", tclu_tpsmin, {tclu_outpin}
+ field = "Maximum TPS", tclu_tpsmax, {tclu_outpin}
+ field = "Minimum MAP", tclu_mapmin, {tclu_outpin}
+ field = "Maximum MAP", tclu_mapmax, {tclu_outpin}
+ field = "Use VSS", tclu_opt_vss, {tclu_outpin}
+ field = "Minimum Speed", tclu_vssmin, {tclu_outpin && tclu_opt_vss}
+ field = "Use Gear Value", tclu_opt_gear, {tclu_outpin}
+ field = "Minimum Gear", tclu_gearmin, {tclu_outpin && tclu_opt_gear}
+ field = "Activation Delay", tclu_delay, {tclu_outpin}
+
+ dialog = vvtct, ""
+ field = "."
+ field = "Input"
+ field = "Polarity"
+ field = "No. Teeth"
+ field = "Output"
+ field = "Minimum"
+ field = "Maximum"
+ field = "Int./Exh."
+ field = "Tooth 1"
+ field = "Tooth 2"
+ field = "More Duty Means"
+ field = "Output (2)"
+
+ dialog = vvtc1, ""
+ field = "#CAM1"
+ field = "", vvt_opt3_cam1, {vvt_opt1_on}
+ field = "", vvt_opt2_cam1pol,{vvt_opt1_on && ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3) && (vvt_opt4_decode ==0 )}
+ field = "", vvt_tth1, {(vvt_opt1_on > 0) && (spk_mode0 == 4)}
+ field = "", vvt_out1, {vvt_opt1_on}
+ field = "", vvt_min_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_max_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_cam1tth1, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam1tth2, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_out1_dir, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc2, ""
+ field = "#CAM2"
+ field = "", vvt_opt3_cam2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam2pol,{(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_tth2, {(vvt_opt1_on > 1) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_min_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_max_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_cam2tth1, {0}
+ field = "", vvt_cam2tth2, {0}
+ field = "", vvt_out2_dir, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc3, ""
+ field = "#CAM3"
+ field = "", vvt_opt3_cam3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam3pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth3, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam3tth1, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam3tth2, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_out3_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc4, ""
+ field = "#CAM4"
+ field = "", vvt_opt3_cam4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam4pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth4, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam4tth1, {0}
+ field = "", vvt_cam4tth2, {0}
+ field = "", vvt_out4_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtcams, "Cam Settings", xAxis
+ panel = vvtct
+ panel = vvtc1
+ panel = vvtc2
+ panel = vvtc3
+ panel = vvtc4
+
+ dialog = vvtinext, ""
+ field = "."
+ field = "Use Hold Duty"
+ field = "Hold/Neutral Duty"
+ field = "Proportional Gain"
+ field = "Integral Gain"
+ field = "Differential Gain"
+ field = "Table is Advance/Retard"
+
+ dialog = vvtinexi, ""
+ field = "#Intake"
+ field = "", vvt_opt2_use_hold_intake, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_hold_duty, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt2_use_hold_intake}
+ field = "", vvt_ctl_Kp, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Ki, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Kd, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Advance"
+
+ dialog = vvtinexe, ""
+ field = "#Exhaust"
+ field = "", vvt_opt2_use_hold_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_hold_duty_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) && vvt_opt2_use_hold_exhaust }
+ field = "", vvt_ctl_Kp_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Ki_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Kd_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_opt1_dir_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+
+ dialog = vvtinex, "PID Parameters", xAxis
+ panel = vvtinext
+ panel = vvtinexi
+ panel = vvtinexe
+
+ dialog = vvt_test, "Test", xAxis
+ field = "Cam", vvt_opt1_tst, {vvt_opt1_on}
+ field = "Duty", vvt_test_duty, {vvt_opt1_on && vvt_opt1_tst}
+
+ dialog = vvtl, ""
+ field = "No. VVTs", vvt_opt1_on
+ field = "Cam Decoder", vvt_opt4_decode,{vvt_opt1_on && (spk_mode0 == 4)}
+ field = "Frequency", vvt_opt6_freq, {vvt_opt1_on && vvt_out1}
+ field = "On/off or Variable (PID)", vvt_opt2_pid2, {vvt_opt1_on}
+ field = "Adjust Inj. Timing Based On", vvt_opt5_add1, {vvt_opt1_on}
+ field = "Commanded vs. Actual", vvt_opt5_add2, {vvt_opt1_on && vvt_opt5_add1}
+ field = "Inj. Timing Adjustment", vvt_onoff_ang, {vvt_opt1_on && !vvt_opt2_pid2 && vvt_opt5_add1}
+ field = "Load Y Axis In Tables", vvt_opt7_yaxis, {vvt_opt1_on}
+ field = "Minimum CLT", vvt_minclt, {vvt_opt1_on}
+ field = "VVT Maximum Slew", vvt_slew, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvt_test
+
+ dialog = vvtr, ""
+ field = "Control Interval", vvt_opt1_int, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Control Interval Time", vvt_ctl_ms, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt1_int}
+ field = "Range Check Measured Angles", vvt_opt5_err, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Tooth filter", vvt_opt1_filter, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Minimum VVT Duty", vvt_minduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Maximum VVT Duty", vvt_maxduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvtinex
+
+ dialog = vvtparams2, "VVT Settings", xAxis
+ panel = vvtl
+ panel = vvtr
+
+ dialog = vvtparams, "VVT Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvt"
+ panel = vvtparams2
+ panel = vvtcams
+
+ dialog = spk_trimaTblTitle, "Cyl #1"
+ panel = spk_trimaTbl
+ dialog = spk_trimbTblTitle, "Cyl #2"
+ panel = spk_trimbTbl
+ dialog = spk_trimcTblTitle, "Cyl #3"
+ panel = spk_trimcTbl
+ dialog = spk_trimdTblTitle, "Cyl #4"
+ panel = spk_trimdTbl
+
+ dialog = spk_trimadt, "", xAxis
+ panel = spk_trimaTblTitle
+ panel = spk_trimbTblTitle
+ dialog = spk_trimadb, "", xAxis
+ panel = spk_trimcTblTitle
+ panel = spk_trimdTblTitle
+
+ dialog = spk_trimad,"Spark Cyl 1-4 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimadt
+ panel = spk_trimadb
+
+ dialog = spk_trimeTblTitle, "Cyl #5"
+ panel = spk_trimeTbl
+ dialog = spk_trimfTblTitle, "Cyl #6"
+ panel = spk_trimfTbl
+ dialog = spk_trimgTblTitle, "Cyl #7"
+ panel = spk_trimgTbl
+ dialog = spk_trimhTblTitle, "Cyl #8"
+ panel = spk_trimhTbl
+
+ dialog = spk_trimeht, "", xAxis
+ panel = spk_trimeTblTitle
+ panel = spk_trimfTblTitle
+ dialog = spk_trimehb, "", xAxis
+ panel = spk_trimgTblTitle
+ panel = spk_trimhTblTitle
+
+ dialog = spk_trimeh,"Spark Cyl 5-8 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimeht
+ panel = spk_trimehb
+
+#if CYL_12_16_SUPPORT
+ dialog = spk_trimiTblTitle, "Cyl #9"
+ panel = spk_trimiTbl
+ dialog = spk_trimjTblTitle, "Cyl #10"
+ panel = spk_trimjTbl
+ dialog = spk_trimkTblTitle, "Cyl #11"
+ panel = spk_trimkTbl
+ dialog = spk_trimlTblTitle, "Cyl #12"
+ panel = spk_trimlTbl
+
+ dialog = spk_trimilt, "", xAxis
+ panel = spk_trimiTblTitle
+ panel = spk_trimjTblTitle
+
+ dialog = spk_trimilb, "", xAxis
+ panel = spk_trimkTblTitle
+ panel = spk_trimlTblTitle
+
+ dialog = spk_trimil,"Spark Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimilt
+ panel = spk_trimilb
+
+ dialog = spk_trimmTblTitle, "Cyl #13"
+ panel = spk_trimmTbl
+ dialog = spk_trimnTblTitle, "Cyl #14"
+ panel = spk_trimnTbl
+ dialog = spk_trimoTblTitle, "Cyl #15"
+ panel = spk_trimoTbl
+ dialog = spk_trimpTblTitle, "Cyl #16"
+ panel = spk_trimpTbl
+
+ dialog = spk_trimmpt, "", xAxis
+ panel = spk_trimmTblTitle
+ panel = spk_trimnTblTitle
+ dialog = spk_trimmpb, "", xAxis
+ panel = spk_trimoTblTitle
+ panel = spk_trimpTblTitle
+
+ dialog = spk_trimmp,"Spark Cyl 13-16 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimmpt
+ panel = spk_trimmpb
+#endif
+
+ dialog = inj_trimaTblTitle, "Cyl #1"
+ panel = inj_trimaTbl, Center
+ dialog = inj_trimbTblTitle, "Cyl #2"
+ panel = inj_trimbTbl
+ dialog = inj_trimcTblTitle, "Cyl #3"
+ panel = inj_trimcTbl
+ dialog = inj_trimdTblTitle, "Cyl #4"
+ panel = inj_trimdTbl
+
+ dialog = inj_trimadt, "", xAxis
+ panel = inj_trimaTblTitle
+ panel = inj_trimbTblTitle
+ dialog = inj_trimadb, "", xAxis
+ panel = inj_trimcTblTitle
+ panel = inj_trimdTblTitle
+
+ dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimadt
+ panel = inj_trimadb
+
+ dialog = inj_trimeTblTitle, "Cyl #5"
+ panel = inj_trimeTbl, Center
+ dialog = inj_trimfTblTitle, "Cyl #6"
+ panel = inj_trimfTbl
+ dialog = inj_trimgTblTitle, "Cyl #7"
+ panel = inj_trimgTbl
+ dialog = inj_trimhTblTitle, "Cyl #8"
+ panel = inj_trimhTbl
+
+ dialog = inj_trimeht, "", xAxis
+ panel = inj_trimeTblTitle
+ panel = inj_trimfTblTitle
+ dialog = inj_trimehb, "", xAxis
+ panel = inj_trimgTblTitle
+ panel = inj_trimhTblTitle
+
+ dialog = inj_trimeh,"Injector Cyl 5-7 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimeht
+ panel = inj_trimehb
+
+#if CYL_12_16_SUPPORT
+ dialog = inj_trimiTblTitle, "Cyl #9"
+ panel = inj_trimiTbl
+ dialog = inj_trimjTblTitle, "Cyl #10"
+ panel = inj_trimjTbl
+ dialog = inj_trimkTblTitle, "Cyl #11"
+ panel = inj_trimkTbl
+ dialog = inj_trimlTblTitle, "Cyl #12"
+ panel = inj_trimlTbl
+
+ dialog = inj_trimilt, "", xAxis
+ panel = inj_trimiTblTitle
+ panel = inj_trimjTblTitle
+ dialog = inj_trimilb, "", xAxis
+ panel = inj_trimkTblTitle
+ panel = inj_trimlTblTitle
+
+ dialog = inj_trimil,"Injector Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimilt
+ panel = inj_trimilb
+
+ dialog = inj_trimmTblTitle, "Cyl #13"
+ panel = inj_trimmTbl
+ dialog = inj_trimnTblTitle, "Cyl #14"
+ panel = inj_trimnTbl
+ dialog = inj_trimoTblTitle, "Cyl #15"
+ panel = inj_trimoTbl
+ dialog = inj_trimpTblTitle, "Cyl #16"
+ panel = inj_trimpTbl
+
+ dialog = inj_trimmpt, "", xAxis
+ panel = inj_trimmTblTitle
+ panel = inj_trimnTblTitle
+ dialog = inj_trimmpb, "", xAxis
+ panel = inj_trimoTblTitle
+ panel = inj_trimpTblTitle
+
+ dialog = inj_trimmp,"Injector Cyl 13-16 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimmpt
+ panel = inj_trimmpb
+#endif
+
+ dialog = antilag, "Turbo Anti-Lag (ALS)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#als"
+ field = "#Caution! Anti-lag is very hard on your turbo"
+ field = "# and engine. Use at your risk."
+ field = "Anti-lag Enable Input", als_in_pin
+; field = "Minimum TPS", als_mintps, {als_in_pin}
+ field = "Maximum TPS", als_maxtps, {als_in_pin}
+ field = "Minimum RPM", als_minrpm, {als_in_pin}
+ field = "Maximum RPM", als_maxrpm, {als_in_pin}
+ field = "Maximum MAT", als_maxmat, {als_in_pin}
+ field = "Maximum ALS time", als_maxtime, {als_in_pin}
+ field = "Time Between Activations", als_pausetime,{als_in_pin}
+ field = "Minimum CLT", als_minclt, {als_in_pin}
+ field = "Maximum CLT", als_maxclt, {als_in_pin}
+ field = "Enable Cyclic Fuel Cut", als_opt_fc, {als_in_pin && hardware_fuel && sequential}
+ field = "Fuel cut likely unsafe with Staging"
+ field = "Enable Cyclic Spark Cut", als_opt_sc, {als_in_pin}
+ field = "-"
+ field = "Enable Roving Idle Fuel Cut", als_opt_ri, {als_in_pin}
+ field = "-"
+ field = "Use Idle Valve", als_opt_idle, {als_in_pin}
+ field = "Idle Valve Duty", als_iac_duty, { als_in_pin && als_opt_idle && (IdleCtl == 2) }
+ field = "Idle Valve Steps", als_iac_steps, { als_in_pin && als_opt_idle && (IdleCtl == 3)}
+ field = "-"
+ field = "On/off Output", als_out_pin, {als_in_pin}
+ field = "-"
+ field = "PWM Output", als_opt_pwmout, {als_in_pin}
+ field = "Output Port/Pin", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ field = "Output Duty", als_pwm_duty, {als_in_pin && als_opt_pwmout}
+ field = "Frequency", als_pwm_opt_freq, {als_in_pin && als_opt_pwmout}
+ field = ""
+
+ dialog = als_left1, "Added Fuel %age"
+ panel = als_addfuel_tbl
+
+ dialog = als_left2, "ALS Timing"
+ panel = als_timing_tbl
+
+ dialog = als_right1, "Spark Cut %"
+ panel = als_sparkcut_tbl, North, {als_opt_sc}
+
+ dialog = als_right2, "Fuel Cut %"
+ panel = als_fuelcut_tbl, South, {als_opt_fc && hardware_fuel && sequential}}
+
+ dialog = antilag_left, "", yAxis
+ panel = als_left1
+ panel = als_left2
+
+ dialog = antilag_right, "", yAxis
+ panel = als_right1
+ panel = als_right2
+
+ dialog = antilagtables, "Turbo Anti-lag Tables", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alstables"
+ panel = antilag_left
+ panel = antilag_right
+
+ dialog = flash_unlock, "Un/Lock Calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+
+ field = "Always re-lock after use"
+
+ dialog = gen_pwm_left_a, ""
+ field = "Enable Generic PWM A", pwm_opt_on_a
+ field = "Output Port/Pin", pwm_opt2_a, {pwm_opt_on_a}
+ field = "Frequency / On-Off", pwm_opt_freq_a, {pwm_opt_on_a}
+ field = "On Above Duty", pwm_onabove_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ field = "Off Below Duty", pwm_offbelow_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_a_offset, pwm_opt_load_a_size, {pwm_opt_on_a}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_a, {pwm_opt_on_a}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_grapha, "", card
+ panel = pwm_duties_Tbl_a, Center, {pwm_opt_on_a && (pwm_opt_curve_a == 0)}
+ panel = pwm_curve_a, Center, {pwm_opt_on_a && pwm_opt_curve_a}
+
+ dialog = gen_pwm_a, "Generic PWM A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_a, West
+ panel = gen_pwm_curve_grapha, Center
+
+ dialog = gen_pwm_left_b, ""
+ field = "Enable Generic PWM B", pwm_opt_on_b
+ field = "Output Port/Pin", pwm_opt2_b, {pwm_opt_on_b}
+ field = "Frequency / On-Off", pwm_opt_freq_b, {pwm_opt_on_b}
+ field = "On Above Duty", pwm_onabove_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ field = "Off Below Duty", pwm_offbelow_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_b_offset, pwm_opt_load_b_size, {pwm_opt_on_b}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_b, {pwm_opt_on_b}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphb, "", card
+ panel = pwm_duties_Tbl_b, Center, {pwm_opt_on_b && (pwm_opt_curve_b == 0)}
+ panel = pwm_curve_b, Center, {pwm_opt_on_b && pwm_opt_curve_b}
+
+ dialog = gen_pwm_b, "Generic PWM B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_b, West
+ panel = gen_pwm_curve_graphb, Center
+
+ dialog = gen_pwm_left_c, ""
+ field = "Enable Generic PWM C", pwm_opt_on_c
+ field = "Output Port/Pin", pwm_opt2_c, {pwm_opt_on_c}
+ field = "Frequency / On-Off", pwm_opt_freq_c, {pwm_opt_on_c}
+ field = "On Above Duty", pwm_onabove_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ field = "Off Below Duty", pwm_offbelow_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_c_offset, pwm_opt_load_c_size, {pwm_opt_on_c}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_c, {pwm_opt_on_c}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphc, "", card
+ panel = pwm_duties_Tbl_c, Center, {pwm_opt_on_c && (pwm_opt_curve_c == 0)}
+ panel = pwm_curve_c, Center, {pwm_opt_on_c && pwm_opt_curve_c}
+
+ dialog = gen_pwm_c, "Generic PWM C", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_c, West
+ panel = gen_pwm_curve_graphc, Center
+
+ dialog = gen_pwm_left_d, ""
+ field = "Enable Generic PWM D", pwm_opt_on_d
+ field = "Output Port/Pin", pwm_opt2_d, {pwm_opt_on_d}
+ field = "Frequency / On-Off", pwm_opt_freq_d, {pwm_opt_on_d}
+ field = "On Above Duty", pwm_onabove_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ field = "Off Below Duty", pwm_offbelow_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_d_offset, pwm_opt_load_d_size, {pwm_opt_on_d}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_d, {pwm_opt_on_d}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphd, "", card
+ panel = pwm_duties_Tbl_d, Center, {pwm_opt_on_d && (pwm_opt_curve_d == 0)}
+ panel = pwm_curve_d, Center, {pwm_opt_on_d && pwm_opt_curve_d}
+
+ dialog = gen_pwm_d, "Generic PWM D", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_d, West
+ panel = gen_pwm_curve_graphd, Center
+
+ dialog = gen_pwm_left_e, ""
+ field = "Enable Generic PWM E", pwm_opt_on_e
+ field = "Output Port/Pin", pwm_opt2_e, {pwm_opt_on_e}
+ field = "Frequency / On-Off", pwm_opt_freq_e, {pwm_opt_on_e}
+ field = "On Above Duty", pwm_onabove_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ field = "Off Below Duty", pwm_offbelow_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_e_offset, pwm_opt_load_e_size, {pwm_opt_on_e}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_e, {pwm_opt_on_e}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphe, "", card
+ panel = pwm_duties_Tbl_e, Center, {pwm_opt_on_e && (pwm_opt_curve_e == 0)}
+ panel = pwm_curve_e, Center, {pwm_opt_on_e && pwm_opt_curve_e}
+
+ dialog = gen_pwm_e, "Generic PWM E", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_e, West
+ panel = gen_pwm_curve_graphe, Center
+
+ dialog = gen_pwm_left_f, ""
+ field = "Enable Generic PWM F", pwm_opt_on_f
+ field = "Output Port/Pin", pwm_opt2_f, {pwm_opt_on_f}
+ field = "Frequency / On-Off", pwm_opt_freq_f, {pwm_opt_on_f}
+ field = "On Above Duty", pwm_onabove_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ field = "Off Below Duty", pwm_offbelow_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_f_offset, pwm_opt_load_f_size, {pwm_opt_on_f}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_f, {pwm_opt_on_f}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphf, "", card
+ panel = pwm_duties_Tbl_f, Center, {pwm_opt_on_f && (pwm_opt_curve_f == 0)}
+ panel = pwm_curve_f, Center, {pwm_opt_on_f && pwm_opt_curve_f}
+
+ dialog = gen_pwm_f, "Generic PWM F", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_f, West
+ panel = gen_pwm_curve_graphf, Center
+
+ dialog = map_sample_dialog_south, "MAP Sample General Settings"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "Map Sample Window", map_sample_duration, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = ""
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (hardware_cam == 2) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = map_sample_dialog, "MAP Sample Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mapsamp"
+ panel = mapsample_curve, Center, { !mapsample_opt2 }
+ panel = map_sample_dialog_south, South
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Mode", shift_cut_auto, { shift_cut_on }
+ field = "Cut fuel", shift_cut_fuel, { shift_cut_on }
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time (Base)", shift_cut_time, { shift_cut_on }
+ field = "Gear Based Delay", shift_cut_gear, { shift_cut_on }
+ field = "Additional Delay 1-2", shift_cut_add12, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 2-3", shift_cut_add23, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 3-4", shift_cut_add34, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 4-5", shift_cut_add45, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 5-6", shift_cut_add56, { shift_cut_on && shift_cut_gear }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_on}
+ field = "Re-Shift Hold-Off Time", shift_cut_reshift
+ field = "Automatic mode shift points"
+ field = "Shift RPM 1-2", shift_cut_rpm12, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 2-3", shift_cut_rpm23, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 3-4", shift_cut_rpm34, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 4-5", shift_cut_rpm45, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 5-6", shift_cut_rpm56, { shift_cut_on && shift_cut_auto }
+
+ dialog = fan_control, "Fan Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fanctl"
+ field = "Fan Control On", fanctl_settings_on
+ field = "Fan Control Idles up?", fanctl_settings_idleup, { fanctl_settings_on }
+ field = "Output Pin", fanctl_settings_pin, { fanctl_settings_on }
+ field = "Idle-up Delay", fanctl_idleup_delay, { fanctl_settings_on && fanctl_settings_idleup }
+ field = "Idle-up Duty", fanctl_idleup_adder_duty, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 2) }
+ field = "Idle-up Steps", fanctl_idleup_adder_steps, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 3) }
+ field = "Idle-up Target Increase", fan_idleup_cl_targetadder, { fanctl_settings_on && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Fan On Temperature", fanctl_ontemp, { fanctl_settings_on }
+ field = "Fan Off Temperature", fanctl_offtemp, { fanctl_settings_on }
+ field = "Allow fan When Engine Off", fanctl_opt2_engineoff, { fanctl_settings_on }
+ field = "Fan On With AC On?", fan_ctl_settings_acfan, { fanctl_settings_on && ac_idleup_settings }
+ field = "Fan Shutoff"
+ field = "TPS Shutoff", fan_idleup_tps_offpoint, { fanctl_settings_on }
+ field = "TPS Hysteresis", fan_idleup_tps_hyst, { fanctl_settings_on }
+ field = "VSS Shutoff", fan_idleup_vss_offpoint, { fanctl_settings_on && (vss_opt0_1) }
+ field = "VSS Hyst", fan_idleup_vss_hyst, { fanctl_settings_on && (vss_opt0_1) }
+
+ dialog = ac_idleup, "Air Conditioning Idle-Up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#acidle"
+ field = "A/C Idle-Up", ac_idleup_settings
+ field = "Idle-Up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-Up Input", ac_idleup_io_in, { ac_idleup_settings }
+ field = "Input Polarity", ac_idleup_settings_inv, { ac_idleup_settings }
+ field = "Idle-Up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-Up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor delay since last on", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty", ac_idleup_adder_duty, { (IdleCtl == 2) && ac_idleup_settings }
+ field = "Idle-up Steps", ac_idleup_adder_steps, { (IdleCtl == 3) && ac_idleup_settings }
+ field = "Idle-up Target RPM Adder", ac_idleup_cl_targetadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Idle-up CL load Allowance", ac_idleup_cl_lockout_mapadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "A/C compressor Shutoff"
+ field = "TPS Shutoff", ac_idleup_tps_offpoint, { ac_idleup_settings }
+ field = "TPS Hysteresis", ac_idleup_tps_hyst, { ac_idleup_settings }
+ field = "VSS Shutoff", ac_idleup_vss_offpoint, { ac_idleup_settings && (vss_opt0_1) }
+ field = "VSS Hysteresis", ac_idleup_vss_hyst, { ac_idleup_settings && (vss_opt0_1) }
+ field = "Maximum RPM", ac_idleup_max_rpm, { ac_idleup_settings }
+
+ dialog = sensor_source, "", yAxis
+ field = "Sensor - Source"
+ field = "01", sensor01_source
+ field = "02", sensor02_source
+ field = "03", sensor03_source
+ field = "04", sensor04_source
+ field = "05", sensor05_source
+ field = "06", sensor06_source
+ field = "07", sensor07_source
+ field = "08", sensor08_source
+
+ dialog = sensor_sourceb, "", yAxis
+ field = "Sensor - Source"
+ field = "09", sensor09_source
+ field = "10", sensor10_source
+ field = "11", sensor11_source
+ field = "12", sensor12_source
+ field = "13", sensor13_source
+ field = "14", sensor14_source
+ field = "15", sensor15_source
+ field = "16", sensor16_source
+
+ dialog = sensor_alias, "", yAxis
+ field = "Field Name"
+ field = "", sensor01Alias
+ field = "", sensor02Alias
+ field = "", sensor03Alias
+ field = "", sensor04Alias
+ field = "", sensor05Alias
+ field = "", sensor06Alias
+ field = "", sensor07Alias
+ field = "", sensor08Alias
+
+ dialog = sensor_aliasb, "", yAxis
+ field = "Field Name"
+ field = "", sensor09Alias
+ field = "", sensor10Alias
+ field = "", sensor11Alias
+ field = "", sensor12Alias
+ field = "", sensor13Alias
+ field = "", sensor14Alias
+ field = "", sensor15Alias
+ field = "", sensor16Alias
+
+ dialog = sensor_trans, "", yAxis
+ field = "Transformation"
+ field = "", sensor01_trans, {sensor01_source}
+ field = "", sensor02_trans, {sensor02_source}
+ field = "", sensor03_trans, {sensor03_source}
+ field = "", sensor04_trans, {sensor04_source}
+
+ field = "", sensor05_trans, {sensor05_source}
+ field = "", sensor06_trans, {sensor06_source}
+ field = "", sensor07_trans, {sensor07_source}
+ field = "", sensor08_trans, {sensor08_source}
+
+ dialog = sensor_transb, "", yAxis
+ field = "Transformation"
+ field = "", sensor09_trans, {sensor09_source}
+ field = "", sensor10_trans, {sensor10_source}
+ field = "", sensor11_trans, {sensor11_source}
+ field = "", sensor12_trans, {sensor12_source}
+ field = "", sensor13_trans, {sensor13_source}
+ field = "", sensor14_trans, {sensor14_source}
+ field = "", sensor15_trans, {sensor15_source}
+ field = "", sensor16_trans, {sensor16_source}
+
+ dialog = sensor_val0, "", yAxis
+ field = "0V value"
+ field = "", sensor01_val0, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_val0, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_val0, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_val0, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_val0, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_val0, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_val0, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_val0, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_val0b, "", yAxis
+ field = "0V value"
+ field = "", sensor09_val0, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_val0, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_val0, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_val0, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_val0, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_val0, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_val0, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_val0, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_max, "", yAxis
+ field = "5V value"
+ field = "", sensor01_max, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_max, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_max, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_max, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_max, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_max, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_max, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_max, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_maxb, "", yAxis
+ field = "5V value"
+ field = "", sensor09_max, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_max, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_max, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_max, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_max, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_max, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_max, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_max, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_lag, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor01LF, {sensor01_source}
+ field = "", sensor02LF, {sensor02_source}
+
+ field = "", sensor03LF, {sensor03_source}
+ field = "", sensor04LF, {sensor04_source}
+ field = "", sensor05LF, {sensor05_source}
+ field = "", sensor06LF, {sensor06_source}
+ field = "", sensor07LF, {sensor07_source}
+ field = "", sensor08LF, {sensor08_source}
+
+ dialog = sensor_lagb, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor09LF, {sensor09_source}
+ field = "", sensor10LF, {sensor10_source}
+ field = "", sensor11LF, {sensor11_source}
+ field = "", sensor12LF, {sensor12_source}
+ field = "", sensor13LF, {sensor13_source}
+ field = "", sensor14LF, {sensor14_source}
+ field = "", sensor15LF, {sensor15_source}
+ field = "", sensor16LF, {sensor16_source}
+
+ dialog = sensors_top, "Sensors 1-8", xAxis
+ panel = sensor_source
+ panel = sensor_alias
+ panel = sensor_trans
+ panel = sensor_val0
+ panel = sensor_max
+ panel = sensor_lag
+
+ dialog = sensors_btm, "Sensors 9-16", xAxis
+ panel = sensor_sourceb
+ panel = sensor_aliasb
+ panel = sensor_transb
+ panel = sensor_val0b
+ panel = sensor_maxb
+ panel = sensor_lagb
+
+ dialog = sensors_data, "", yAxis
+ panel = sensors_top
+ panel = sensors_btm
+
+ dialog = sensors_temp, "", xAxis
+ field = "Allow Input Sharing", opt142_gs_share
+ field = "CLT/MAT Units", sensor_temp
+
+ dialog = sensors, "Generic Sensor Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gensens"
+ panel = sensors_data, North
+ panel = sensors_temp, South
+
+ dialog = ITB_settings, "ITB settings"
+ field = "Percent Baro Switchpoint", ITB_load_mappoint
+ field = "Idle TPS Threshold", ITB_load_idletpsthresh
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#itbload"
+ panel = ITB_settings, South
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, East
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafset"
+ field = "Sensor Type", MAFOption_t
+ field = "Voltage Input Port", MAFOption, {MAFOption_t == 0}
+ field = "Frequency Input Port", MAFOption_f, {MAFOption_t == 1}
+ field = "Low Frequency", maf_freq0, {MAFOption_t == 1}
+ field = "High Frequency", maf_freq1, {MAFOption_t == 1}
+ field = "MAT Correction Curve", feature7_mafmat, {MAFOption_t < 2}
+ field = "Use VE1 As Trim Table", feature7_maftrim, {(algorithm == 5) && (MAFOption_t < 2) }
+ field = "MAF Sensor Range", maf_range, {MAFOption_t < 2}
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-Style Calibration Curve (See Tools Menu)", feature7_mafcalib, {MAFOption_t < 2}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical values are 0.0V and 29.7V"
+
+ dialog = waterinj_topl, ""
+ field = "Enable Water/Meth Injection", water_freq_on
+ field = "Pump Output", water_pins_pump, {water_freq_on}
+ field = "Valve Style", water_freq_type, {water_freq_on}
+ field = "Frequency", water_freq, {water_freq_on && (water_freq_type ==2)}
+ field = "Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ dialog = waterinj_topr, ""
+ field = "Enable When.."
+ field = "TPS >", water_tps, {water_freq_on}
+ field = "RPM >", water_rpm, {water_freq_on}
+ field = "MAP >", water_map, {water_freq_on}
+ field = "MAT >", water_mat, {water_freq_on}
+ field = ""
+ field = "Low Fluid Level Input", water_pins_in_shut, {water_freq_on}
+
+ dialog = waterinj_top, "", border
+ panel = waterinj_topl, West
+ panel = waterinj_topr, East
+
+ dialog = waterinj, "Water Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#water"
+ panel = waterinj_top, North
+ panel = waterinjTbl, Center
+
+ dialog = vss1, "Vehicle Speed Sensor 1"
+ field = "VSS1 Input Type", vss_opt0_1
+ field = "Analogue Input", vss1_an, {vss_opt0_1 == 2}
+ field = "Full Scale Speed", vss1_an_max, {vss_opt0_1 == 2}
+ field = "Digital Input", vss_opt1, {vss_opt0_1 == 1}
+ field = "Wheel Diameter", wheeldia1, {vss_opt1 && (((vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss1_pos, {vss_opt0_1 == 1}
+ field = "Pulses", vss1_can_scale_pulse, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth1, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)}
+ field = "PWM Port", vss1_pwmseq, {(vss_opt1 ==15) && (vss_opt0_1 == 1)}
+ field = "Scaler", vss1_can_scale, {(vss_opt1 ==14) && (vss_opt0_1 == 1)}
+ field = "Smoothing lag factor", vss1LF, {vss_opt0_1}
+
+ dialog = vss2, "Vehicle speed sensor 2"
+ field = "VSS2 Input Type", vss_opt0_2
+ field = "Analogue Input", vss2_an, {vss_opt0_2 == 2}
+ field = "Full Scale Speed", vss2_an_max, {vss_opt0_2 == 2}
+ field = "Digital Input", vss_opt2, {vss_opt0_2 == 1}
+ field = "Wheel Diameter", wheeldia2, {vss_opt2 && (((vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss2_pos, {vss_opt0_2 == 1}
+ field = "Pulses", vss2_can_scale_pulse, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth2, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)}
+ field = "PWM Port", vss2_pwmseq, {(vss_opt2 ==15) && (vss_opt0_2 == 1)}
+ field = "Scaler", vss2_can_scale, {(vss_opt2 ==14) && (vss_opt0_2 == 1)}
+ field = "Smoothing Lag Factor", vss2LF, {vss_opt0_2}
+
+ dialog = vss3, "Vehicle Speed Sensor 3 (Matches VSS1)"
+ field = "VSS3 Input Type", vss_opt0_3, {vss_opt0_1}
+ field = "Analogue Input", vss3_an, {vss_opt0_3 && (vss_opt0_1 == 2)}
+ field = "Digital Input", vss_opt3, {vss_opt0_3 && (vss_opt0_1 == 1)}
+ field = "PWM Port", vss3_pwmseq, {(vss_opt3 ==15) && vss_opt0_3 && (vss_opt0_1 == 1)}
+
+ dialog = vss4, "Vehicle speed sensor 4 (matches VSS2)"
+ field = "VSS4 input type", vss_opt0_4, {vss_opt0_2}
+ field = "Analogue Input", vss4_an, {vss_opt0_4 && (vss_opt0_2 == 2)}
+ field = "Digital Input", vss_opt4, {vss_opt0_4 && (vss_opt0_2 == 1)}
+ field = "PWM Port", vss4_pwmseq, {(vss_opt4 ==15) && vss_opt0_4 && (vss_opt0_4 == 1)}
+
+ dialog = vssout, "VSS Output"
+ field = "VSS Output", vssout_opt
+ field = "VSSout Units", vssout_optunits, { vssout_opt }
+ field = "Scale", vssout_scale, { vssout_opt }
+
+ dialog = vssdotlag, "VSSdot Smoothing"
+ field = "Sample Interval", vssdot_int
+ field = "Lag factor", vssdotLF
+
+ dialog = vsssamp, "VSS Sampling"
+ field = "VSS Sample Interval", vss_samp_int
+
+ dialog = gears, "Gear detection"
+ field = "Final Drive Ratio", fdratio1
+
+ field = "Method", gear_method
+ field = "Number Of Gears", gear_no, {gear_method}
+ field = "1st Ratio", gear1ratio, { (gear_method == 1) }
+ field = "2nd Ratio", gear2ratio, { (gear_method == 1) && (gear_no > 1) } ; would be pretty pointless otherwise!
+ field = "3rd Ratio", gear3ratio, { (gear_method == 1) && (gear_no > 2) }
+ field = "4th Ratio", gear4ratio, { (gear_method == 1) && (gear_no > 3) }
+ field = "5th Ratio", gear5ratio, { (gear_method == 1) && (gear_no > 4) }
+ field = "6th Ratio", gear6ratio, { (gear_method == 1) && (gear_no > 5) }
+ field = ""
+ field = "Input Port", gear_port_an, { (gear_method == 2) }
+ field = "Neutral Voltage", gear0v, { (gear_method == 2) }
+ field = "1st Gear Voltage", gear1v, { (gear_method == 2) }
+ field = "2nd Gear Voltage", gear2v, { (gear_method == 2) && (gear_no > 1) }
+ field = "3rd Gear Voltage", gear3v, { (gear_method == 2) && (gear_no > 2) }
+ field = "4th Gear Voltage", gear4v, { (gear_method == 2) && (gear_no > 3) }
+ field = "5th Gear Voltage", gear5v, { (gear_method == 2) && (gear_no > 4) }
+ field = "6th Gear Voltage", gear6v, { (gear_method == 2) && (gear_no > 5) }
+
+ dialog = vssunits, "Units"
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+
+ dialog = ssnorth, "", xAxis
+ panel = vss1
+ panel = vss2
+
+ dialog = vss34, "", xAxis
+ panel = vss3
+ panel = vss4
+
+ dialog = gearsunits, "", yAxis
+ panel = gears
+ panel = vssunits
+
+ dialog = vssoutdotr, "", yAxis
+ panel = vssdotlag
+ panel = vsssamp
+
+ dialog = vssoutdot, "", xAxis
+ panel = vssout
+ panel = vssoutdotr
+
+ dialog = sssouth, "", yAxis
+ panel = vss34
+ panel = vssoutdot
+
+ dialog = speedsensorsmain, "", yAxis
+ panel = ssnorth
+ panel = sssouth
+
+ dialog = speedsensors, "Speed and Gear Sensors", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#speedgear"
+ panel = speedsensorsmain
+ panel = gearsunits
+
+ dialog = ss, "Shaft Speed Sensors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shaftspeed"
+ field = "Sensor 1", ss_opt1
+ field = "Speed sensor #teeth", reluctorteeth3, {ss_opt1 && ss_opt1<15}
+ field = "High Speed Input", ss_opt1_spd, {(ss_opt1 == 4) || (ss_opt1 == 10) || (ss_opt1 == 11) || (ss_opt1 == 12)}
+ field = "Smoothing Lag Factor", ss1LF ;, {ss_opt2 && ss_opt2<15}
+ field = ""
+ field = "Sensor 2", ss_opt2
+ field = "Speed Sensor #Teeth", reluctorteeth4, {ss_opt2 && ss_opt2<15}
+ field = "High Speed Input", ss_opt2_spd, {(ss_opt2 == 4) || (ss_opt2 == 10) || (ss_opt2 == 11) || (ss_opt2 == 12)}
+ field = "Smoothing Lag Factor", ss2LF ;, {ss_opt2 && ss_opt2<15}
+
+ dialog = accelerometer, "Accelerometer Parameters"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelerometer"
+ field = "X Input", accXport
+ field = "Y Input", accYport
+ field = "Z Input", accZport
+ field = "X -1g Calib.", accXcal1, { accXport }
+ field = "X +1g Calib.", accXcal2, { accXport }
+ field = "Y -1g Calib.", accYcal1, { accYport }
+ field = "Y +1g Calib.", accYcal2, { accYport }
+ field = "Z -1g Calib.", accZcal1, { accZport }
+ field = "Z +1g Calib.", accZcal2, { accZport }
+ field = "Lag factor", accxyzLF
+
+ dialog = sdcard_top, ""
+ field = "SD Card Logging:", log_style_on2
+ field = "Datalog Button", log_style2_but, {log_style_on2 == 2}
+ field = "Trigger", log_style4_opt, {log_style_on2 == 3}
+ field = "RPM >", log_trig_rpm, {(log_style_on2 == 3) && (log_style4_opt == 0)}
+ field = "TPS >", log_trig_tps, {(log_style_on2 == 3) && (log_style4_opt == 1)}
+ field = "MAP >", log_trig_map, {(log_style_on2 == 3) && (log_style4_opt == 2)}
+ field = "LED Indicator", log_style_led, {log_style_on2}
+ field = "Log Data Block Size", log_style_block, {log_style_on2}
+ field = "Interleave GPS Data", log_style_gps, {log_style_on2}
+ field = "Sampling", log_style2_samp, {(log_style_block != 1) && log_style_on2 }
+ field = "Sample Interval", log_int, {(log_style_block != 1) && log_style_on2 }
+ displayOnlyField = "Frames/Second", log_rate, {(log_style_block != 1) && log_style_on2 }
+ field = "Log File Max Duration", log_length, {log_style_on2}
+ field = "Stream Input", log_style3_adc, {log_style_block == 1}
+ field = "SPI Comms Speed", log_style_ledspd, {log_style_on2}
+ field = "Trigger pulse output", sdpulse_out, {log_style_on2 >= 2}
+
+ dialog = sdcard_btm, ""
+ logFieldSelector = dataLogFieldSelector, "Log Field Selection", logFieldOffset, logFieldLength, 55
+
+ dialog = sdcard_datalog, "SD Card Datalogging", yAxis
+ panel = sdcard_top
+ panel = dataLogFieldSelector
+
+ dialog = N2OSystem_topl, ""
+ field = "Nitrous Control", N2Oopt_2
+ field = "Enable N2O When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Enrich Which Bank", N2Oopt_01, { N2Oopt_2 }
+
+ dialog = N2OSystem_topr, ""
+ field = "On/Off vs Progressive Mode", N2Oopt2_prog, { N2Oopt_2 }
+ field = "Time, RPM, VSS-Based", N2Oopt2_prog_time, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Solenoid Frequency", N2Oopt2_prog_freq, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Fuel Solenoid Frequency", N2Oopt2_prog_freqf, { N2Oopt_2 && N2Oopt2_prog && (n2o1f_pins > 0) }
+ field = "AFR Safety Uses AFR2 Targets", N2Oopt_4, { N2Oopt_2 }
+ field = ""
+ field = "READ THE MANUAL BEFORE USING NITROUS"
+
+ dialog = N2OSystem1, "Nitrous System Stage 1"
+ field = "Stage 1 Output - Nitrous", n2o1n_pins, { N2Oopt_2 }
+ field = "Stage 1 Output - Fuel", n2o1f_pins, { N2Oopt_2 }
+ field = "Enable Input On:", N2Oopt_pins, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Min RPM", N2OPWLo, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 && !N2Oopt2_prog }
+ field = "Retard Ignition By", N2OAngle, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = "Allow Nitrous During Launch", N2Oopt_5, { N2Oopt_2 && launch_opt_on }
+ field = "Max MAP During Launch", N2Olaunchmaxmap,{ N2Oopt_2 && launch_opt_on && N2Oopt_5}
+
+ dialog = N2OSystem2, "Nitrous System Stage 2"
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+ field = "Stage 2 Output - Nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Stage 2 Output - Fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Enable Stage 2 Above", N2O2Rpm, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Max RPM", N2O2RpmMax, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Delay After Stage1", N2O2delay, { N2Oopt_2 && N2Oopt_3 && (!N2Oopt2_prog || (N2Oopt2_prog_time==0)) }
+ field = "Retard Ignition By", N2O2Angle, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+
+ dialog = N2OSystem_top, "", border
+ panel = N2OSystem_topl, West
+ panel = N2OSystem_topr, East
+
+ dialog = N2OSystems, "", border
+ panel = N2OSystem1, West
+ panel = N2OSystem2, East
+
+ dialog = nitrous, "Nitrous System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = N2OSystem_top, North
+ panel = N2OSystems, South
+
+ dialog = n2o1_curves_time, ""
+ panel = n2o1_duty_time
+ panel = n2o1_pw_time
+ panel = n2o1_retard_time
+
+ dialog = n2o2_curves_time, ""
+ panel = n2o2_duty_time
+ panel = n2o2_pw_time
+ panel = n2o2_retard_time
+
+ dialog = nitrous_curves_time, "Nitrous - Time-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_time
+ panel = n2o2_curves_time
+
+ dialog = n2o1_curves_rpm, ""
+ panel = n2o1_duty_rpm
+ panel = n2o1_pw_rpm
+ panel = n2o1_retard_rpm
+
+ dialog = n2o2_curves_rpm, ""
+ panel = n2o2_duty_rpm
+ panel = n2o2_pw_rpm
+ panel = n2o2_retard_rpm
+
+ dialog = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_rpm
+ panel = n2o2_curves_rpm
+
+ dialog = n2o1_curves_vss, ""
+ panel = n2o1_duty_vss
+ panel = n2o1_pw_vss
+ panel = n2o1_retard_vss
+
+ dialog = n2o2_curves_vss, ""
+ panel = n2o2_duty_vss
+ panel = n2o2_pw_vss
+ panel = n2o2_retard_vss
+
+ dialog = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_vss
+ panel = n2o2_curves_vss
+
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum MAP (Boost)", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ field = "Alt. Maximum MAP (Boost)", OverBoostKpa2, { (tsw_pin_ob && (OverBoostOption > 0)) || dualfuel_sw2_ob }
+
+ dialog = boostfeat, ""
+ field = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ field = "Boost Table Switching Gear", boost_gear_switch, { boost_feats_tsw == 15 }
+ field = "Boost Timed From Launch", boost_feats_timed, {boost_ctl_settings_on && launch_opt_on}
+ field = "Specific Launch Duty/Target", boost_feats_launch, {boost_ctl_settings_on && launch_opt_on}
+ field = "Launch Boost Duty", boost_launch_duty, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl == 0}
+ field = "Launch Boost Target", boost_launch_target, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl}
+ field = "Boost vs Speed / Gear", boost_vss, {boost_ctl_settings_on}
+ field = "Above TPS", boost_vss_tps, {boost_ctl_settings_on && boost_vss}
+ field = "Per Gear Targets:"
+
+ dialog = boostgeartargsl, "", yAxis
+ field = "1", boost_geartarg1, {(boost_vss == 3) && gear_method && (gear_no > 0) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "2", boost_geartarg2, {(boost_vss == 3) && gear_method && (gear_no > 1) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "3", boost_geartarg3, {(boost_vss == 3) && gear_method && (gear_no > 2) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargsr, "", yAxis
+ field = "4", boost_geartarg4, {(boost_vss == 3) && gear_method && (gear_no > 3) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "5", boost_geartarg5, {(boost_vss == 3) && gear_method && (gear_no > 4) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "6", boost_geartarg6, {(boost_vss == 3) && gear_method && (gear_no > 5) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargs, "", border
+ panel = boostgeartargsl, West
+ panel = boostgeartargsr, East
+
+ dialog = boostctlSettings, "Boost Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost"
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Solenoid Freq. Range", boost_ctl_pwm, {boost_ctl_settings_on}
+ field = "Solenoid Frequency (Mid)", boost_ctl_pwm_scale, { boost_ctl_settings_on && (boost_ctl_pwm == 1)}
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ field = "Solenoid Frequency (Slow)", boost_ctl_settings_freq, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Minimum Duty", boost_ctl_closeduty, {boost_ctl_settings_on }
+ field = "Maximum Duty", boost_ctl_openduty, {boost_ctl_settings_on }
+ field = "Boost Control Lower CLT Threshold",boost_ctl_clt_threshold, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on && boost_ctl_settings_on}
+ field = "Tuning Mode", boost_ctl_flags, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl && ((boost_ctl_flags == 2) || (boost_ctl_flags == 3)) }
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+
+ dialog = boosteast, ""
+ panel = overboost, North
+ panel = boostfeat, Center
+ panel = boostgeartargs, South
+
+ dialog = boost, "Boost Control Setings", border
+ panel = boostctlSettings, West
+ panel = boosteast, East
+
+ dialog = boostctlSettings2, "Boost Control Settings 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost2"
+ field = "Boost Control Enabled", boost_ctl_settings_on2, {boost_ctl_settings_on}
+ field = "Target duty and boost tables 2 are used."
+ field = "Boost vs VSS or time or tableswitch not supported."
+ field = "Frequencies same as channel 1"
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ field = ""
+ field = "Minimum Duty", boost_ctl_closeduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Maximum Duty", boost_ctl_openduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Boost Control Lower Limit", boost_ctl_lowerlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 }
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl2, {boost_ctl_settings_on && boost_ctl_settings_on2}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity2, horizontal, {boost_ctl_settings_on2 && boost_ctl_settings_cl2 && ((boost_ctl_flags2 == 2) || (boost_ctl_flags2 == 3)) }
+ field = "Tuning Mode", boost_ctl_flags2, {boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Proportional Gain", boost_ctl_Kp2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Integral Gain", boost_ctl_Ki2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Differential Gain", boost_ctl_Kd2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "MAP Sensor To Target", boost_ctl_sensor2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && 0}
+ field = "Must be defined in Generic Sensors"
+
+ dialog = maxafrset, ""
+ field = "Enable AFR Safety", maxafr_opt1_on
+ field = "Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "Load Axis", maxafr_opt1_load, { maxafr_opt1_on }
+ field = "Check above Load", maxafr_en_load, { maxafr_opt1_on }
+ field = "Check above RPM", maxafr_en_rpm, { maxafr_opt1_on }
+ field = "Wait for", maxafr_en_time, { maxafr_opt1_on }
+ field = "Kill spark For", maxafr_spkcut_time, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ field = "Then kill fuel until..." ;, "", { maxafr_opt1_on || egt_conf_action}
+ field = "TPS Below", maxafr_ret_tps, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "MAP Below", maxafr_ret_map, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "RPM Below", maxafr_ret_rpm, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ dialog = maxafrTbls, "AFR Difference Table"
+ panel = maxafr1Tbl
+
+ dialog = maxafr, "AFR Safety System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afrsafety"
+ panel = maxafrset, West
+ panel = maxafrTbls, Center
+
+ dialog = egtwestn, "Configuration"
+ field = "No. EGT inputs", egt_num
+ field = ""
+ field = "Calibration - see documentation"
+ field = "Temp At 0V", egtcal_temp0, {egt_num}
+ field = "Temp At 5V", egtcal_tempmax, {egt_num}
+
+ dialog = egtwests, "Actions"
+ field = "EGT Actions", egt_conf_action
+ field = "Warning LED same as AFR safety"
+ field = "Warn Temperature", egt_warn, {egt_conf_action}
+ field = "Added Fuel", egt_addfuel, {egt_conf_action}
+ field = "Add To", egt_conf_bank, {egt_conf_action}
+ field = "Per cylinder", egt_conf_percyl, {egt_conf_action && (sequential == 2) }
+ field = "Shutdown Engine", egt_conf_shutdown, {egt_conf_action}
+ field = "Time > Warn Temp", egt_time, {egt_conf_action && egt_conf_shutdown}
+ field = "Max Temperature", egt_max, {egt_conf_action && egt_conf_shutdown}
+ field = "See AFR safety for shutdown options"
+
+ dialog = egtwest, "", yAxis
+ panel = egtwestn, North
+ panel = egtwests, South
+
+ dialog = egteast, "Data capture"
+ field = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ field = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ field = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ field = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ field = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ field = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ field = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ field = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ field = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ field = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ field = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ field = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ field = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ field = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ field = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ field = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+
+ dialog = egt, "EGT / Thermocouple Inputs", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egt"
+ panel = egtwest
+ panel = egteast
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable sequenced batch fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_enable_on
+ field = "Enable PWM Polling", enable_pollPWM, {can_enable_on}
+ field = "Remote CAN Id", can_poll_id, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Number For PWM Data", poll_tablePWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Offset For PWM Data", poll_offsetPWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Clock", canpwm_clk, { enable_pollPWM && can_enable_on}
+ field = "Remote Prescale", canpwm_pre, { enable_pollPWM && can_enable_on}
+ field = "Remote Divider", canpwm_div, { enable_pollPWM && can_enable_on}
+ field = ""
+ field = "Enable ADC Polling", enable_pollADC, {can_enable_on}
+
+ dialog = caneast, ""
+ field = "Digital ports"
+ field = "Remote CAN Id", can_poll_id_ports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Table", poll_tableports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Enable Input Port", enable_pollports_digin
+ field = "Offset", can_poll_digin_offset, { enable_pollports_digin}
+ field = "Enable Output Port", enable_pollports_digout
+ field = "Offset", can_poll_digout_offset, { enable_pollports_digout}
+ field = ""
+ field = "Enable PWM Outputs", enable_pwmout
+
+ field = "Remote CAN Id", can_pwmout_id, { enable_pwmout }
+ field = "Table", can_pwmout_tab, { enable_pwmout }
+ field = "Offset", can_pwmout_offset, { enable_pwmout }
+ field = "Force Duty To 0-255", enable_pwmout255
+
+ ;CAN adcs
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC group on/off"
+ field = "CAN ADC 1- 4", canadc_opt1, { enable_pollADC }
+ field = "CAN ADC 5- 8", canadc_opt2, { enable_pollADC }
+ field = "CAN ADC 9-12", canadc_opt3, { enable_pollADC }
+ field = "CAN ADC 13-16", canadc_opt4, { enable_pollADC }
+ field = "CAN ADC 17-20", canadc_opt5, { enable_pollADC }
+ field = "CAN ADC 21-24", canadc_opt6, { enable_pollADC }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", canadc_id1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_id2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_id3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_id4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_id5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_id6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", canadc_tab1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_tab2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_tab3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_tab4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_tab5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_tab6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", canadc_off1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_off2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_off3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_off4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_off5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_off6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadcs, "CAN ADC selection", xAxis
+
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest, West
+ panel = caneast, East, {can_enable_on}
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canparams"
+ panel = can_top, North
+ panel = canadcs, South, {can_enable_on}
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+; field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = canvss, "CAN VSS and gear selection"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canvss"
+ field = "This is for polling the actual vehicle speed"
+ field = "mph/kph from a remote device."
+ field = "For a pulse input use the CAN PWM instead"
+ field = "Mode", can_poll2_vss
+ field = "Remote CAN Id", vss1_can_id, {can_poll2_vss}
+ field = "Remote CAN Table", vss1_can_table, {can_poll2_vss}
+ field = ""
+ field = "VSS1 Offset", vss1_can_offset, {(vss_opt0_1 == 1) && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss1_can_size, {vss_opt1 == 0x0e}
+ field = ""
+ field = "VSS2 Offset", vss2_can_offset, {(vss_opt0_2 == 1) && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss2_can_size, {vss_opt2 == 0x0e}
+ field = ""
+ field = "VSS3 Offset", vss3_can_offset, {(vss_opt0_1 == 1) && vss_opt0_3 && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "VSS4 Offset", vss4_can_offset, {(vss_opt0_2 == 1) && vss_opt0_4 && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = ""
+ field = "Gear# Offset", gear_can_offset, {((gear_method & 0x03) == 0x03)}
+
+ dialog = canrtc, "Real Time Clock"
+ field = "Enable Real Time Clock", opt142_rtc
+ field = "Trim +/-", rtc_trim, {opt142_rtc}
+ field = "Remote CAN Id", can_poll_id_rtc, {(opt142_rtc == 2) && can_enable_on}
+ field = "Table", poll_table_rtc, {(opt142_rtc == 2) && can_enable_on }
+ field = "Offset", poll_offset_rtc, {(opt142_rtc == 2) && can_enable_on}
+
+ dialog = canego1, "EGO Data Via CAN"
+ field = "Fetch EGO Data", can_poll2_ego2
+ field = "Remote CAN Id", can_ego_id, {can_poll2_ego2}
+ field = "Table", can_ego_table, {can_poll2_ego2}
+ field = "Offset", can_ego_offset, {can_poll2_ego2}
+ field = "Smoothing", can_poll2_egolag, {can_poll2_ego2}
+
+ dialog = cangps, "GPS Data Via CAN"
+ field = "Fetch GPS Data", can_poll2_gps
+ field = "Remote CAN Id", can_gps_id, {can_poll2_gps}
+ field = "Table", can_gps_table, {can_poll2_gps}
+ field = "Offset", can_gps_offset, {can_poll2_gps}
+
+ dialog = canego, "CAN EGO, GPS", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canegogps"
+ panel = canego1
+ panel = cangps
+
+ dialog = realtimeclock, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rtc"
+ panel = canrtc
+ panel = std_ms3Rtc
+
+ dialog = tablesw1, "Table Switching"
+ field = "Fuel Table Switching", f5_0_tsf, { !(dualfuel_sw_on && dualfuel_sw_fuel) }
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "Input pin", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "RPM greater than", tsf_rpm, { f5_0_tsf && (f5_0_tsf_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "MAP greater than", tsf_kpa, { f5_0_tsf && (f5_0_tsf_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "TPS greater than", tsf_tps, { f5_0_tsf && (f5_0_tsf_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = ""
+ field = "Spark Table Switching", f5_0_tss, { !(dualfuel_sw_on && dualfuel_sw_spk) }
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "Input Pin", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && (f5_0_tss_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && (f5_0_tss_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && (f5_0_tss_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = ""
+ field = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ field = "Alternate ReqFuel (Lower Number)", ReqFuel_alt, { tsw_pin_rf || (dualfuel_sw_on && dualfuel_sw_rf)}
+ field = ""
+ field = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ field = ""
+ field = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = "Alternate Stoich", stoich_alt, { tsw_pin_stoich || (dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = ""
+ field = "Boost control table switching is on the boost control menu"
+
+ dialog = dualfuel, "Dual Fuel switching"
+ field = "Dual Fuel Enable", dualfuel_sw_on
+ field = "Mode", dualfuel_opt_mode, { dualfuel_sw_on }
+ field = "Outputs Mode", dualfuel_opt_out, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { dualfuel_sw_on && (dualfuel_opt_mode < 2) && (dualfuel_opt_out || dualfuel_opt_mode) }
+;was { ((dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && ((nCylinders <= 4)) || ((nCylinders > 4) && (sequential == 1))) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { (dualfuel_opt_mode < 2) && ((dualfuel_opt_out || dualfuel_opt_mode) && staged_extended_opts_use_v3) || ((nCylinders > 4) && (dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && !(sequential & 0x1)) }
+ field = "Input Pin", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Fuel Tables", dualfuel_sw_fuel, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Spark Tables", dualfuel_sw_spk, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AFR Tables", dualfuel_sw_afr, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. ReqFuel", dualfuel_sw_rf, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Stoich", dualfuel_sw_stoich, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Warmup", dualfuel_sw_wue, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AfterStart", dualfuel_sw_ase, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Priming", dualfuel_sw2_prime, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Cranking Pulse", dualfuel_sw2_crank, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Injector Params", dualfuel_sw2_injp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Small Pulsewidths", dualfuel_sw2_smpw, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Overboost", dualfuel_sw2_ob, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Boost Table", dualfuel_sw2_boosw, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Accel Enrich", dualfuel_sw2_ae, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = ""
+ field = "Enable Temperature Adjustment", dualfuel_opt_temp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Temperature On", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp && (dualfuel_opt_mode == 0)}
+ field = "Enable Pressure Adjustment", dualfuel_opt_press, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Pressure In kPa On", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press && (dualfuel_opt_mode == 0)}
+ field = "Sensor Type", dualfuel_press_type, { dualfuel_sw_on && dualfuel_opt_press && dualfuel_press_sens && (dualfuel_opt_mode == 0)}
+
+ dialog = tablesw, "Table Switch/Dual Fuel", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tablesw"
+ panel = tablesw1, West
+ panel = dualfuel, East
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-on-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+ field = "-"
+ field = "Note: The following only applies to Inj1 and Inj2"
+ field = "Injector PWM parameters", testop_pwm
+ field = "PWM Current Limit", testinjPwmP, { testop_pwm }
+ field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
+ field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testinjspk"
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtesta0, "Inj A", yAxis
+ commandButton = "Off", cmdtesta0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta0on, { status3 & 8 }
+ dialog = outputtesta1, "Inj B", yAxis
+ commandButton = "Off", cmdtesta1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta1on, { status3 & 8 }
+ dialog = outputtesta2, "Inj C", yAxis
+ commandButton = "Off", cmdtesta2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta2on, { status3 & 8 }
+ dialog = outputtesta3, "Inj D", yAxis
+ commandButton = "Off", cmdtesta3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta3on, { status3 & 8 }
+ dialog = outputtesta4, "Inj E", yAxis
+ commandButton = "Off", cmdtesta4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta4on, { status3 & 8 }
+ dialog = outputtesta5, "Inj F", yAxis
+ commandButton = "Off", cmdtesta5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta5on, { status3 & 8 }
+ dialog = outputtesta6, "Inj G", yAxis
+ commandButton = "Off", cmdtesta6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta6on, { status3 & 8 }
+ dialog = outputtesta7, "Inj H", yAxis
+ commandButton = "Off", cmdtesta7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta7on, { status3 & 8 }
+
+ dialog = outputtest_io1inj, "Inj Outputs", xAxis
+ panel = outputtesta0
+ panel = outputtesta1
+ panel = outputtesta2
+ panel = outputtesta3
+ panel = outputtesta4
+ panel = outputtesta5
+ panel = outputtesta6
+ panel = outputtesta7
+
+ dialog = outputtestb0, "Spk A", yAxis
+ commandButton = "Off", cmdtestb0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb0on, { status3 & 8 }
+ dialog = outputtestb1, "Spk B", yAxis
+ commandButton = "Off", cmdtestb1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb1on, { status3 & 8 }
+ dialog = outputtestb2, "Spk C", yAxis
+ commandButton = "Off", cmdtestb2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb2on, { status3 & 8 }
+ dialog = outputtestb3, "Spk D", yAxis
+ commandButton = "Off", cmdtestb3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb3on, { status3 & 8 }
+ dialog = outputtestb4, "Spk E", yAxis
+ commandButton = "Off", cmdtestb4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb4on, { status3 & 8 }
+ dialog = outputtestb5, "Spk F", yAxis
+ commandButton = "Off", cmdtestb5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb5on, { status3 & 8 }
+ dialog = outputtestb6, "Spk G", yAxis
+ commandButton = "Off", cmdtestb6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb6on, { status3 & 8 }
+ dialog = outputtestb7, "Spk H", yAxis
+ commandButton = "Off", cmdtestb7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb7on, { status3 & 8 }
+
+ dialog = outputtest_io1spk, "Spk Outputs", xAxis
+ panel = outputtestb0
+ panel = outputtestb1
+ panel = outputtestb2
+ panel = outputtestb3
+ panel = outputtestb4
+ panel = outputtestb5
+ panel = outputtestb6
+ panel = outputtestb7
+
+ dialog = outputtestcano0, "OUT1", yAxis
+ commandButton = "Off", cmdtestcano0off, { (status3 & 8) && (canout1_8 & 1) }
+; commandButton = "Pulsed", cmdtestcano0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano0on, { (status3 & 8) && ((canout1_8 & 1) == 0) }
+ dialog = outputtestcano1, "OUT2", yAxis
+ commandButton = "Off", cmdtestcano1off, { (status3 & 8) && (canout1_8 & 2) }
+; commandButton = "Pulsed", cmdtestcano1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano1on, { (status3 & 8) && ((canout1_8 & 2) == 0) }
+ dialog = outputtestcano2, "OUT3", yAxis
+ commandButton = "Off", cmdtestcano2off, { (status3 & 8) && (canout1_8 & 4) }
+; commandButton = "Pulsed", cmdtestcano2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano2on, { (status3 & 8) && ((canout1_8 & 4) == 0) }
+ dialog = outputtestcano3, "OUT4", yAxis
+ commandButton = "Off", cmdtestcano3off, { (status3 & 8) && (canout1_8 & 8) }
+; commandButton = "Pulsed", cmdtestcano3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano3on, { (status3 & 8) && ((canout1_8 & 8) == 0) }
+ dialog = outputtestcano4, "OUT5", yAxis
+ commandButton = "Off", cmdtestcano4off, { (status3 & 8) && (canout1_8 & 16) }
+; commandButton = "Pulsed", cmdtestcano4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano4on, { (status3 & 8) && ((canout1_8 & 16) == 0) }
+ dialog = outputtestcano5, "OUT6", yAxis
+ commandButton = "Off", cmdtestcano5off, { (status3 & 8) && (canout1_8 & 32) }
+; commandButton = "Pulsed", cmdtestcano5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano5on, { (status3 & 8) && ((canout1_8 & 32) == 0) }
+ dialog = outputtestcano6, "OUT7", yAxis
+ commandButton = "Off", cmdtestcano6off, { (status3 & 8) && (canout1_8 & 64) }
+; commandButton = "Pulsed", cmdtestcano6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano6on, { (status3 & 8) && ((canout1_8 & 64) == 0) }
+ dialog = outputtestcano7, "OUT8", yAxis
+ commandButton = "Off", cmdtestcano7off, { (status3 & 8) && (canout1_8 & 128) }
+; commandButton = "Pulsed", cmdtestcano7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano7on, { (status3 & 8) && ((canout1_8 & 128) == 0) }
+
+ dialog = outputtest_iocano, "CANOUT1-8", xAxis
+ panel = outputtestcano0
+ panel = outputtestcano1
+ panel = outputtestcano2
+ panel = outputtestcano3
+ panel = outputtestcano4
+ panel = outputtestcano5
+ panel = outputtestcano6
+ panel = outputtestcano7
+
+ dialog = outputtestcano8, "OUT9", yAxis
+ commandButton = "Off", cmdtestcano8off, { (status3 & 8) && (canout9_16 & 1) }
+; commandButton = "Pulsed", cmdtestcano8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano8on, { (status3 & 8) && ((canout9_16 & 1) == 0) }
+ dialog = outputtestcano9, "OUT10", yAxis
+ commandButton = "Off", cmdtestcano9off, { (status3 & 8) && (canout9_16 & 2) }
+; commandButton = "Pulsed", cmdtestcano9pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano9on, { (status3 & 8) && ((canout9_16 & 2) == 0) }
+ dialog = outputtestcano10, "OUT11", yAxis
+ commandButton = "Off", cmdtestcano10off, { (status3 & 8) && (canout9_16 & 4) }
+; commandButton = "Pulsed", cmdtestcano10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano10on, { (status3 & 8) && ((canout9_16 & 4) == 0) }
+ dialog = outputtestcano11, "OUT12", yAxis
+ commandButton = "Off", cmdtestcano11off, { (status3 & 8) && (canout9_16 & 8) }
+; commandButton = "Pulsed", cmdtestcano11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano11on, { (status3 & 8) && ((canout9_16 & 8) == 0) }
+ dialog = outputtestcano12, "OUT13", yAxis
+ commandButton = "Off", cmdtestcano12off, { (status3 & 8) && (canout9_16 & 16) }
+; commandButton = "Pulsed", cmdtestcano12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano12on, { (status3 & 8) && ((canout9_16 & 16) == 0) }
+ dialog = outputtestcano13, "OUT14", yAxis
+ commandButton = "Off", cmdtestcano13off, { (status3 & 8) && (canout9_16 & 32) }
+; commandButton = "Pulsed", cmdtestcano13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano13on, { (status3 & 8) && ((canout9_16 & 32) == 0) }
+ dialog = outputtestcano14, "OUT15", yAxis
+ commandButton = "Off", cmdtestcano14off, { (status3 & 8) && (canout9_16 & 64) }
+; commandButton = "Pulsed", cmdtestcano14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano14on, { (status3 & 8) && ((canout9_16 & 64) == 0) }
+ dialog = outputtestcano15, "OUT16", yAxis
+ commandButton = "Off", cmdtestcano15off, { (status3 & 8) && (canout9_16 & 128) }
+; commandButton = "Pulsed", cmdtestcano15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano15on, { (status3 & 8) && ((canout9_16 & 128) == 0) }
+
+ dialog = outputtest_iocano2, "CANOUT9-16", xAxis
+ panel = outputtestcano8
+ panel = outputtestcano9
+ panel = outputtestcano10
+ panel = outputtestcano11
+ panel = outputtestcano12
+ panel = outputtestcano13
+ panel = outputtestcano14
+ panel = outputtestcano15
+
+ dialog = outputtestcani0, "IN1", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 1 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 1) == 0 }
+ dialog = outputtestcani1, "IN2", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 2 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 2) == 0 }
+ dialog = outputtestcani2, "IN3", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 4 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 4) == 0 }
+ dialog = outputtestcani3, "IN4", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 8 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 8) == 0 }
+ dialog = outputtestcani4, "IN5", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 16 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 16) == 0 }
+ dialog = outputtestcani5, "IN6", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 32 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 32) == 0 }
+ dialog = outputtestcani6, "IN7", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 64 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 64) == 0 }
+ dialog = outputtestcani7, "IN8", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 128 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 128) == 0 }
+
+ dialog = outputtest_iocani, "CANIN1-8 - read-only", xAxis
+ panel = outputtestcani0
+ panel = outputtestcani1
+ panel = outputtestcani2
+ panel = outputtestcani3
+ panel = outputtestcani4
+ panel = outputtestcani5
+ panel = outputtestcani6
+ panel = outputtestcani7
+
+; "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H",
+
+ dialog = outputtest16, "PP2-Idle", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest10, "PP3-Boost", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "PP4-Nitrous1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "PP5-Nitrous2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "PP6-VVT", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "PP7-Fidle", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "PK0-Tacho", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "The Inj/Spk outputs must be used with additional caution to avoid flooding your engine or melting coils."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io2_text, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+ field = ""
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest16
+ panel = outputtest10
+ panel = outputtest11
+ panel = outputtest12
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+
+ dialog = outputteste0, "IAC1", yAxis
+ commandButton = "Off", cmdteste0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste0pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste0on, { status3 & 8 }
+
+ dialog = outputteste4, "IAC2", yAxis
+ commandButton = "Off", cmdteste4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste4pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste4on, { status3 & 8 }
+
+ dialog = outputteste8, "Inj1", yAxis
+ commandButton = "Off", cmdteste8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste8pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste8on, { status3 & 8 }
+
+ dialog = outputtestec, "Inj2", yAxis
+ commandButton = "Off", cmdtestecoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestecpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestecon, { status3 & 8 }
+
+ dialog = outputtestf0, "PM2", yAxis
+ commandButton = "Off", cmdtestf0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf0on, { status3 & 8 }
+
+ dialog = outputtestf4, "PK1", yAxis
+ commandButton = "Off", cmdtestf4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf4on, { status3 & 8 }
+
+ dialog = outputtestf8, "PK3", yAxis
+ commandButton = "Off", cmdtestf8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestf8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestf8on, { status3 & 8 }
+
+ dialog = outputtestfc, "PK7", yAxis
+ commandButton = "Off", cmdtestfcoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestfcpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestfcon, { status3 & 8 }
+
+ dialog = outputtest_io2, "Outputs", xAxis
+ panel = outputteste0
+ panel = outputteste4
+ panel = outputteste8
+ panel = outputtestec
+ panel = outputtestf0
+ panel = outputtestf4
+ panel = outputtestf8
+ panel = outputtestfc
+
+ dialog = outputtest_io, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io2
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io2, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1inj
+ panel = outputtest_io1spk
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io3, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_iocano
+ panel = outputtest_iocano2
+ panel = outputtest_io2_text
+ panel = outputtest_iocani
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-255)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Enable Test - In/Out Cycle", cmdtestiaccycle, { IdleCtl == 3 }
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = injseqtest, "Injector Sequential Testing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injseqtest"
+ commandButton = "Stop Testing", cmdtestinjnorm
+ commandButton = "Batch Fire", cmdtestinjbat
+ commandButton = "Semi Sequential", cmdtestinjsem
+ commandButton = "Full Sequential", cmdtestinjseq
+
+ dialog = special, "Special Options"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#special"
+ field = "Pulsewidth Scaling", feature3_pw4x
+ field = "Nitrous-In Pulldown", feature3_n2oin
+
+; field = "U08 Debug 134, SPI baud", u08_debug134
+; field = "U16 Debug 640", u16_debug640
+; field = "SDcard Run/Test", u08_debug38_0
+ field = "Log trigger times to sensors9-16", u08_debug38_1
+ field = "Fuel flow/consumption calculation interval", fuelcalctime
+ field = "Maximum SpkAdj Value", spkadj_max
+ field = "Minimum SpkAdj Value", spkadj_min
+
+ dialog = lttrim, "Long Term Trim Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#lttrim"
+ field = "Enable Experi. Long Term Trim", ltt_opt_on
+ field = "Sample Interval", ltt_samp_time, {ltt_opt_on}
+ field = "Correction Softness", ltt_agg, {ltt_opt_on}
+ field = "Write Method", ltt_opt_mode, {ltt_opt_on}
+ field = "Burn Button", ltt_but_in, {ltt_opt_on && (ltt_opt_mode == 1)}
+ field = "Burn Interval", ltt_int, {ltt_opt_on && (ltt_opt_mode == 0)}
+ field = "LED Output", ltt_led_out,{ltt_opt_on}
+ field = "Total Change Before Burning", ltt_thresh, {ltt_opt_on}
+ field = "Display Current %Change In Sensor15", ltt_opt_feedback, {ltt_opt_on}
+ commandButton = "Read Table 1 To RAM", cmdlttr1
+ commandButton = "Read Table 2 To RAM", cmdlttr2
+ commandButton = "Burn Table To Flash", cmdlttw
+ commandButton = "Zero Tables", cmdlttz
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { (twoStroke == 3) && (nCylinders == 2) && (spk_mode3 == 2) }
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell Time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#noise"
+ field = "#GLOBAL TIMER NOISE FILTER DELAY"
+ field = "Noise Filter Period", dlyct
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launchwest, ""
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input On:", launch_opt_pins, { launch_opt_on }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_on }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_on}
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Disable Launch When VSS1 Above", launch_maxvss, { (launch_opt_on ) && (vss_opt0_1) }
+ field = "Limiter Settings",launchlimopt_adv , { launch_opt_on }
+ field = "Spark Limiter Type",launchlimopt_cut , { launch_opt_on && launchlimopt_adv}
+ field = "Spark Cut Zone",launchcutzone , { launch_opt_on && launchlimopt_adv}
+ field = "Cut Zone Timing",launchcuttiming , { launch_opt_on && launchlimopt_adv}
+ field = "FLAT SHIFT"
+ field = "Disable Flat-Shift When VSS1 Below", flats_minvss, { (launch_opt_on > 1) && (vss_opt0_1) }
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To : ", flats_deg, { launch_opt_on >1 }
+ field = "Cut Fuel Above", launch_fcut_rpm, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "TIMED RETARD"
+ field = "Timed Retard After Launch", launch_opt_retard, { launch_opt_on }
+
+ dialog = launchnortheast, "Variable Launch"
+ field = "Variable Launch Input", launch_var_on, { launch_opt_on >0 }
+ field = " -Minimum Setting", launch_var_low, {launch_var_on && launch_opt_on >0 }
+ field = " -Maximum Setting", launch_var_up, {launch_var_on && launch_opt_on >0 }
+
+ dialog = launchsoutheast, "3-Step / Burnout Limiter"
+ field = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ field = " -Soft Limit Retard To", launch_sft_deg3, {launch_3step_in && launch_opt_on >0}
+ field = " -Hard Limit", launch_hrd_lim3, {launch_3step_in && launch_opt_on >0}
+
+ dialog = llstg, "Line-Lock Staging"
+ field = "Button Input", llstg_in, {launch_opt_on >0 }
+ field = "Relay Output", llstg_out, {launch_opt_on && llstg_in }
+
+ dialog = launchtbtstop, "Transbrake, Throttle Stop"
+ field = "Transbrake Button Input", timedout1_in
+ field = "Transbrake Output", timedout1_out, {timedout1_in}
+ field = "Delay", timedout1_offdelay, {timedout1_in && timedout1_out}
+ field = "Turbo Staging Button", tcs_in, {timedout1_in}
+ field = "Release Time", tcs_offtime, {tcs_in && timedout1_in}
+ field = "On Time", tcs_ontime, {tcs_in && timedout1_in}
+ field = "Main # Moves", tcs_moves, {tcs_in && timedout1_in}
+ field = "Throttle Stop Output", tstop_out, { launch_opt_on }
+ field = "On Delay After Launch", tstop_delay, {tstop_out && launch_opt_on}
+ field = "Keep On For", tstop_hold, {tstop_out && launch_opt_on}
+
+ dialog = launcheast, "", yAxis
+ panel = launchnortheast
+ panel = launchtbtstop
+ panel = launchsoutheast
+ panel = llstg
+
+ dialog = launch, "Launch Control/ 2-Step / 3-Step / T-brake", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#launch"
+ panel = launchwest
+ panel = launcheast
+
+ dialog = vsslaunch1, ""
+ field = "Wheel-Speed Based Launch", launch_opt_vss
+ field = "ACTIVATION"
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_vss}
+ field = "Timeout (0 = None)", launchvsstime, { launch_opt_vss}
+ field = "Re-arm Below Speed", launchvss_minvss, { launch_opt_vss}
+ field = "Enable Gear Checking", launch_opt_vssgear, { launch_opt_vss && gear_method }
+ field = "Maximum Gear", launchvss_maxgear, { launch_opt_vss && launch_opt_vssgear && gear_method}
+ field = "LIMITER"
+ field = "Limiter Method", launchlimopt, { launch_opt_vss}
+ field = "Hard limit is taken from the curve"
+ field = "Soft Limit Zone", launch_sft_zone, { launch_opt_vss }
+ field = "Retard To", launch_sft_deg, {launch_opt_vss }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_vss }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_vss}
+ field = "Limiter settings are shared with the launch control page."
+
+ dialog = vsslaunch, "Speed-Based Launch Control", xAxis
+ panel = vsslaunch1
+ panel = vsslaunch_curve
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = "Output On:", tacho_opt3f, { tacho_opt80 }
+ field = "Fixed or variable", tacho_optvar, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 && (tacho_optvar == 0) }
+ field = "Scaling", tacho_scale, { tacho_opt80 && (tacho_optvar == 1) }
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut fuel when:"
+ field = "RPM Greater Than:", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than: ", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than: ", fc_tps, { OvrRunC }
+ field = "And CLT Greater Than:", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = "Progressive Fuel Cut", OvrRunC_progcut, { OvrRunC }
+ field = "Ignition Timing Transition (Cut)", OvrRunC_progign, {OvrRunC}
+ field = "Ignition Timing During Over-Run", fc_timing, { OvrRunC && (OvrRunC_progign || OvrRunC_retign)}
+ field = "Cut Transition Time", fc_transition_time, { OvrRunC && (OvrRunC_progcut || OvrRunC_progign)}
+ field = "Progressive Fuel Return", OvrRunC_progret, { OvrRunC }
+ field = "Ignition Timing Transition Return", OvrRunC_retign, { OvrRunC }
+ field = "Return Transition Time", fc_trans_time_ret, { OvrRunC && (OvrRunC_progret || OvrRunC_retign) }
+ field = "Lowest RPM To Re-Engage Fuel:", fc_rpm_lower, { OvrRunC }
+ field = "RPMdot For Upper RPM Re-Engagement", fuelcut_fuelon_upper_rpmdot, { OvrRunC }
+ field = "RPMdot For Lower RPM Re-Engagement", fuelcut_fuelon_lower_rpmdot, { OvrRunC }
+ field = "Duration Of Fuel Adder", fc_ae_time, { OvrRunC }
+ field = "Size Of Fuel Adder", fc_ae_pct, { OvrRunC && fc_ae_time }
+ field = "Delay EGO After Fuel Return:", fc_ego_delay, { OvrRunC }
+
+ dialog = staging, "Staged Injection"
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = "Transition Fully To Secondaries", staged_extended_opts_pw1off, { staged_first_param }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { staged_first_param && (staged_out1 == 0) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { ((staged_extended_opts_use_v3 && staged_first_param) || ((nCylinders > 4) && (staged_first_param) && (hardware_fuel) && !(sequential & 0x1))) && (staged_out1 == 0) }
+ field = ""
+ field = "Gradual Transition", staged_transition_on, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Transition Events", staged_transition_events, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Reduction Delay", staged_primary_delay, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = "Secondary Enrichment", staged_secondary_enrichment, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param }
+ field = ""
+ field = "Relay Output", staged_out1, { staged_first_param }
+ field = "Relay Output Polarity", staged_out1_inv, { staged_first_param && staged_out1}
+ field = "Pre-Relay Output", staged_out2, { staged_first_param }
+ field = "Pre-Relay Output Polarity", staged_out2_inv, { staged_first_param && staged_out2}
+ field = "Pre-Relay Timer", staged_out2_time, { staged_first_param && staged_out2}
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Batch Fire During Crank", feature7_batchcrank, {sequential}
+ field = "Cranking Taper Curve", feature7_cranktaper
+ field = "Cranking Taper Curve Units", feature7_crtpunits, {feature7_cranktaper}
+ field = "Cranking Fuel Pulse Rate ", altcrank
+ field = "Blended Cranking Curves", alternate_blend
+ field = ""
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+ field = "ASE Count Units", feature3_aseunit
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#barocor"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Type", mapport_t
+ field = "Voltage Input Port", mapport, {mapport_t == 0}
+ field = "Frequency Input Port", mapport_f, {mapport_t == 1}
+ field = "Low Frequency", map_freq0, {mapport_t == 1}
+ field = "High Frequency", map_freq1, {mapport_t == 1}
+ field = "2nd MAP Port", map2port, { (mapport_t == 0) }
+ field = "(See also Tools->Calibrate MAP/Baro)"
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MegaView Temp. Units", tempUnits
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = "Auto-zero TPS", feature3_tps
+
+ dialog = secondaryLoad, "Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (VE1/3)", loadMult
+ field = "99% of Speed-Density installs should use Multiply"
+ field = "Multiply MAP (VE2/4)", loadMult2, {algorithm2 && (loadCombine == 2)}
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich ;, { loadStoich } needed for lambda calc even if not incl AFR
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "Secondary Ignition", loadCombineign, {IgnAlgorithm2}
+ field = "AFR table Load", afrload
+ field = "EAE curve Load", eaeload
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = revlimiter, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#revlim"
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/Fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+ field = "#Temp Sense"
+ field = "Sensor PW"
+ field = "Fuel Temp"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+ field = "Low"
+ field = "", ff_tpw0, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp0, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+ field = "High"
+ field = "", ff_tpw1, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp1, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = ff_table1, "Flex Fuel Calibration", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback For Sensor Failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+ field = "#Flex Blending (enabled on Dual Fuel menu)"
+ field = "Dual Fuel Mode", dualfuel_opt_mode, { 0 }
+
+ dialog = flexFuelTop, ""
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ field = "Temperature Input", fueltemp1
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#flex"
+ panel = flexFuelTop
+ panel = ff_table1
+ panel = ff_fallback
+
+ dialog = sequentialOptions, "Sequential Fuel Injection"
+ field = "Main Fuel Outputs", hardware_fuel
+ field = "Sequential On", sequential
+ field = "Angle Specifies:", sequential_angle_spec, { sequential != 0 }
+ field = "Injector Trim", sequential_trim_on_off
+#if CYL_12_16_SUPPORT
+ field = "Injector I/J Outputs", hardware_injij, { nCylinders > 8}
+#endif
+
+ dialog = firingorder1, "Firing Order"
+ field = "A.", firea
+ field = "B.", fireb, { nCylinders > 1}
+ field = "C.", firec, { nCylinders > 2}
+ field = "D.", fired, { nCylinders > 3}
+ field = "E.", firee, { nCylinders > 4}
+ field = "F.", firef, { nCylinders > 5}
+ field = "G.", fireg, { nCylinders > 6}
+ field = "H.", fireh, { nCylinders > 7}
+
+#if CYL_12_16_SUPPORT
+ dialog = firingorder2, "Firing Order"
+ field = "I.", firei, { nCylinders > 8}
+ field = "J.", firej, { nCylinders > 9}
+ field = "K.", firek, { nCylinders > 10}
+ field = "L.", firel, { nCylinders > 11}
+ field = "M.", firem, { nCylinders > 12}
+ field = "N.", firen, { nCylinders > 13}
+ field = "O.", fireo, { nCylinders > 14}
+ field = "P.", firep, { nCylinders > 15}
+#endif
+ field = ""
+
+ dialog = firingorder, "", xAxis
+ panel = firingorder1, West
+#if CYL_12_16_SUPPORT
+ panel = firingorder2, East
+#endif
+
+ dialog = seqfo, "", yAxis
+ panel = sequentialOptions
+ panel = firingorder
+
+ dialog = base3, "", yAxis
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection
+ panel = base3
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#engseq"
+ panel = base2, West
+ panel = seqfo, Center
+
+;main injector parameters
+ dialog = ot_ot, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", injOpen1
+ field = "B", injOpen2, {opentime_opt1_master}
+ field = "C", injOpen3, {opentime_opt1_master}
+ field = "D", injOpen4, {opentime_opt1_master}
+ field = "E", injOpen5, {opentime_opt1_master}
+ field = "F", injOpen6, {opentime_opt1_master}
+ field = "G", injOpen7, {opentime_opt1_master}
+ field = "H", injOpen8, {opentime_opt1_master}
+
+ dialog = ot_curve, "", yAxis
+ field = "", opentime_opt1_master
+
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime_opt1
+ field = "", opentime_opt2, {opentime_opt1_master}
+ field = "", opentime_opt3, {opentime_opt1_master}
+ field = "", opentime_opt4, {opentime_opt1_master}
+ field = "", opentime_opt5, {opentime_opt1_master}
+ field = "", opentime_opt6, {opentime_opt1_master}
+ field = "", opentime_opt7, {opentime_opt1_master}
+ field = "", opentime_opt8, {opentime_opt1_master}
+
+ dialog = injchar_ms3x, "MS3X Injectors", xAxis
+ panel = ot_ot
+ panel = ot_curve
+
+ dialog = injchar_v3, "Mainboard Injectors", yAxis
+ field = "BANK 1 Dead-Time @ 100%", injOpena
+ field = "Correction Curve", opentime_opta
+ field = "PWM Current Limiting", opentime_opta_pwm
+ field = "PWM Current Limit", injPwmP, {opentime_opta_pwm}
+ field = "PWM Time Threshold", injPwmT, {opentime_opta_pwm}
+ field = "Injector PWM Period", injPwmPd, {opentime_opta_pwm}
+ field = ""
+ field = "BANK 2 Different Settings", opentime_optb_own
+ field = "Dead Time", injOpenb, {opentime_optb_own}
+ field = "Correction Curve", opentime_optb, {opentime_optb_own}
+ field = "PWM Current Limiting", opentime_optb_pwm, {opentime_optb_own}
+ field = "PWM Current Limit", injPwmP2, {opentime_optb_own && opentime_optb_pwm}
+ field = "PWM Time Threshold", injPwmT2, {opentime_optb_own && opentime_optb_pwm}
+ field = "Injector PWM Period", injPwmPd2, {opentime_optb_own && opentime_optb_pwm}
+; 9-16
+ dialog = ot_otb, "", yAxis
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "I", injOpena, {opentime_opt1_master}
+ field = "J", injOpenb, {opentime_opt1_master}
+ field = "K", injOpen11, {opentime_opt1_master}
+ field = "L", injOpen12, {opentime_opt1_master}
+ field = "M", injOpen13, {opentime_opt1_master}
+ field = "N", injOpen14, {opentime_opt1_master}
+ field = "O", injOpen15, {opentime_opt1_master}
+ field = "P", injOpen16, {opentime_opt1_master}
+
+ dialog = ot_curveb, "", yAxis
+ field = "Voltage Cead"
+ field = "Time Curve"
+ field = "", opentime_opta, {opentime_opt1_master}
+ field = "", opentime_optb, {opentime_opt1_master}
+ field = "", opentime_opt11, {opentime_opt1_master}
+ field = "", opentime_opt12, {opentime_opt1_master}
+ field = "", opentime_opt13, {opentime_opt1_master}
+ field = "", opentime_opt14, {opentime_opt1_master}
+ field = "", opentime_opt15, {opentime_opt1_master}
+ field = "", opentime_opt16, {opentime_opt1_master}
+
+ dialog = injcurveswest, "", yAxis
+ panel = opencurve0, North
+ panel = opencurve2, South
+
+ dialog = injcurveseast, "", yAxis
+ panel = opencurve1, North
+ panel = opencurve3, South
+
+ dialog = injcurves, "", xAxis
+ panel = injcurveswest
+ panel = injcurveseast
+
+ dialog = injsettingsb, "Injector Dead-Time/PWM (9-16)", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = ot_otb
+ panel = ot_curveb
+
+ dialog = injCharswest, "", yAxis
+ panel = injchar_ms3x, North
+ panel = injchar_v3, South
+
+ dialog = injsettings, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = injCharswest, West
+ panel = injcurves, Center
+
+; table-switched alternate parameters
+ dialog = ot_ot2b, "", yAxis
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "I", inj2Opena, {opentime2_opt1_master}
+ field = "J", inj2Openb, {opentime2_opt1_master}
+ field = "K", inj2Open11, {opentime2_opt1_master}
+ field = "L", inj2Open12, {opentime2_opt1_master}
+ field = "M", inj2Open13, {opentime2_opt1_master}
+ field = "N", inj2Open14, {opentime2_opt1_master}
+ field = "O", inj2Open15, {opentime2_opt1_master}
+ field = "P", inj2Open16, {opentime2_opt1_master}
+
+ dialog = ot_curve2b, "", yAxis
+ field = "Voltage Dead"
+ field = "Time curve"
+ field = "", opentime2_opta, {opentime2_opt1_master}
+ field = "", opentime2_optb, {opentime2_opt1_master}
+ field = "", opentime2_opt11, {opentime2_opt1_master}
+ field = "", opentime2_opt12, {opentime2_opt1_master}
+ field = "", opentime2_opt13, {opentime2_opt1_master}
+ field = "", opentime2_opt14, {opentime2_opt1_master}
+ field = "", opentime2_opt15, {opentime2_opt1_master}
+ field = "", opentime2_opt16, {opentime2_opt1_master}
+
+ dialog = injsettingsb2, "Injector Dead-Time/PWM 2 (9-16)", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = ot_ot2b
+ panel = ot_curve2b
+
+ dialog = ot_ot2, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", inj2Open1
+ field = "B", inj2Open2, {opentime2_opt1_master}
+ field = "C", inj2Open3, {opentime2_opt1_master}
+ field = "D", inj2Open4, {opentime2_opt1_master}
+ field = "E", inj2Open5, {opentime2_opt1_master}
+ field = "F", inj2Open6, {opentime2_opt1_master}
+ field = "G", inj2Open7, {opentime2_opt1_master}
+ field = "H", inj2Open8, {opentime2_opt1_master}
+
+ dialog = ot_curve2, "", yAxis
+ field = "", opentime2_opt1_master
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime2_opt1
+ field = "", opentime2_opt2, {opentime2_opt1_master}
+ field = "", opentime2_opt3, {opentime2_opt1_master}
+ field = "", opentime2_opt4, {opentime2_opt1_master}
+ field = "", opentime2_opt5, {opentime2_opt1_master}
+ field = "", opentime2_opt6, {opentime2_opt1_master}
+ field = "", opentime2_opt7, {opentime2_opt1_master}
+ field = "", opentime2_opt8, {opentime2_opt1_master}
+
+ dialog = injchar_ms3x_2, "MS3X Injectors", xAxis
+ panel = ot_ot2
+ panel = ot_curve2
+
+ dialog = injchar_v3_2, "Mainboard Injectors", yAxis
+ field = "BANK 1 Dead-Time @ 100%", inj2Opena
+ field = "Correction Curve", opentime2_opta
+ field = "PWM Current Limiting", opentime2_opta_pwm
+ field = "PWM Current Limit", inj2PwmP, {opentime2_opta_pwm}
+
+ field = "PWM Time Threshold", inj2PwmT, {opentime2_opta_pwm}
+ field = "Injector PWM Period", inj2PwmPd, {opentime2_opta_pwm}
+ field = ""
+ field = "BANK 2 Different Settings", opentime2_optb_own
+ field = "Dead-Time", inj2Openb, {opentime2_optb_own}
+ field = "Correction Curve", opentime2_optb, {opentime2_optb_own}
+ field = "PWM Current Limiting", opentime2_optb_pwm, {opentime2_optb_own}
+ field = "PWM Current Limit", inj2PwmP2, {opentime2_optb_own && opentime2_optb_pwm}
+ field = "PWM Time Threshold", inj2PwmT2, {opentime2_optb_own && opentime2_optb_pwm}
+ field = "Injector PWM Period", inj2PwmPd2, {opentime2_optb_own && opentime2_optb_pwm}
+
+ dialog = injCharswest2, "", yAxis
+ panel = injchar_ms3x_2, North
+ panel = injchar_v3_2, South
+
+ dialog = injsettings2, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = injCharswest2
+
+ dialog = smallpwwest2, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw2_opt1_master
+ field = "(This is for the alternate injectors from dual-fuel)"
+ field = "MS3X Injector A", smallpw2_opt1, { smallpw2_opt1_master }
+ field = "MS3X Injector B", smallpw2_opt2, { smallpw2_opt1_master }
+ field = "MS3X Injector C", smallpw2_opt3, { smallpw2_opt1_master }
+ field = "MS3X Injector D", smallpw2_opt4, { smallpw2_opt1_master }
+ field = "MS3X Injector E", smallpw2_opt5, { smallpw2_opt1_master }
+ field = "MS3X Injector F", smallpw2_opt6, { smallpw2_opt1_master }
+ field = "MS3X Injector G", smallpw2_opt7, { smallpw2_opt1_master }
+ field = "MS3X Injector H", smallpw2_opt8, { smallpw2_opt1_master }
+ field = ""
+ field = "Mainboard Bank 1", smallpw2_opta, { smallpw2_opt1_master }
+ field = ""
+ field = "Mainboard Bank 2", smallpw2_optb, { smallpw2_opt1_master }
+
+
+ dialog = smallpw2, "Injector Small Pulsewidths 2", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw2"
+ panel = smallpwwest2, West
+
+ dialog = smallpwwest, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw_opt1_master
+ field = "!CAUTION!"
+ field = "Unless you have specific injector data these"
+ field = "'curves' must be a straight line from 0-2"
+ field = "Ensure the start and end points are equal"
+ field = "(e.g. 0.000, 0.000 and 2.000, 2.000)"
+ field = "Select the pulsewidth curve for each injector"
+
+ field = "MS3X Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) }
+ field = "MS3X Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) }
+ field = "MS3X Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) }
+ field = "MS3X Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) }
+ field = "MS3X Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) }
+ field = "MS3X Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) }
+ field = "MS3X Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) }
+ field = "MS3X Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) }
+ field = ""
+ field = "Mainboard Bank 1", smallpw_opta, { smallpw_opt1_master }
+ field = ""
+ field = "Mainboard Bank 2", smallpw_optb, { smallpw_opt1_master }
+
+
+ dialog = smallcurveswest, "", yAxis
+ panel = smallcurve0
+ panel = smallcurve2
+
+ dialog = smallcurveseast, "", yAxis
+ panel = smallcurve1
+ panel = smallcurve3
+
+ dialog = smallcurves, "", xAxis
+ panel = smallcurveswest
+ panel = smallcurveseast
+
+ dialog = smallpw, "Injector Small Pulsewidths", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw"
+ panel = smallpwwest, West
+ panel = smallcurves, Center
+
+ dialog = smallpwb, ""
+ field = "Injector I", smallpw_opta, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw_optb, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw_opt11, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw_opt12, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+ field = "Injector M", smallpw_opt13, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
+ field = "Injector N", smallpw_opt14, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
+ field = "Injector O", smallpw_opt15, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
+ field = "Injector P", smallpw_opt16, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
+
+ dialog = smallpw2b, ""
+ field = "Injector I", smallpw2_opta, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw2_optb, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw2_opt11, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw2_opt12, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+ field = "Injector M", smallpw2_opt13, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
+ field = "Injector N", smallpw2_opt14, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
+ field = "Injector O", smallpw2_opt15, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
+ field = "Injector P", smallpw2_opt16, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
+
+ ; dialog = egoControl, "EGO Control"
+ dialog = egoControlright, ""
+ field = "Algorithm", egoAlgorithm, { egoType }
+ field = "Use EGO Delay Table", egoAlgorithm_delay_table, {egoType && (egoAlgorithm < 3)}
+ field = "Ignition Events Per Step", egoCount, { egoType && (egoAlgorithm < 3) && !egoAlgorithm_delay_table}
+ field = "EGO Sensor Response Time", ego_sensor_delay, { egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) }
+ field = "Use Authority Table", egoAlgorithm_auth, { egoType }
+ field = "Controller Auth +/-", egoLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Only Correct Above:", ego_lower_bound, { egoType && (egoAlgorithm < 3) }
+ field = "And Correct Below:", ego_upper_bound, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above RPM", egoRPM, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Below TPS", TPSOXLimit, { egoType && (egoAlgorithm < 3) }
+ field = "Active Below Load", MAPOXLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Above Load", MAPOXMin, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "EGO Delay After Start", ego_startdelay, { egoType && (egoAlgorithm < 3) }
+ field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
+ field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
+ field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
+
+ dialog = egoports, "",yAxis
+ field = "EGO 1 Port", egoport1
+ field = "EGO 2 Port", egoport2, {egonum > 1}
+ field = "EGO 3 Port", egoport3, {egonum > 2}
+ field = "EGO 4 Port", egoport4, {egonum > 3}
+ field = "EGO 5 Port", egoport5, {egonum > 4}
+ field = "EGO 6 Port", egoport6, {egonum > 5}
+ field = "EGO 7 Port", egoport7, {egonum > 6}
+ field = "EGO 8 Port", egoport8, {egonum > 7}
+
+; not implemented
+; dialog = egoports_tgt, "", yAxis
+; field = "AFR target"
+; field = "", egomap1t
+; field = "", egomap2t, {egonum > 1}
+; field = "", egomap3t, {egonum > 2}
+; field = "", egomap4t, {egonum > 3}
+; field = "", egomap5t, {egonum > 4}
+; field = "", egomap6t, {egonum > 5}
+; field = "", egomap7t, {egonum > 6}
+; field = "", egomap8t, {egonum > 7}
+
+ dialog = egoports2, "EGO ports", xAxis
+ panel = egoports
+ ; panel = egoports_tgt
+
+ dialog = egoControlleft, "", yAxis
+ field = "EGO Sensor Type", egoType
+ field = "Number Of Sensors", egonum, { egoType }
+ field = "#Remember to Calibrate and set Project Properties"
+ panel = egoports2
+
+ dialog = egoControlmain, "", xAxis
+ panel = egoControlright, West
+ panel = egoControlleft, East
+
+
+ dialog = egomap_inj, "", yAxis
+ field = "Injector"
+ field = "MS3X Inj A"
+ field = "MS3X Inj B"
+ field = "MS3X Inj C"
+ field = "MS3X Inj D"
+ field = "MS3X Inj E"
+ field = "MS3X Inj F"
+ field = "MS3X Inj G"
+ field = "MS3X Inj H"
+ field = "V3 Inj 1"
+ field = "V3 Inj 2"
+
+ dialog = egomap_ego, "", yAxis
+ field = "- Uses Sensor"
+ field = "", egomap1
+ field = "", egomap2
+ field = "", egomap3
+ field = "", egomap4
+ field = "", egomap5
+ field = "", egomap6
+ field = "", egomap7
+ field = "", egomap8
+ field = "", egomap9
+ field = "", egomap10
+
+ dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj
+ panel = egomap_ego
+
+ dialog = egoControl, "AFR / EGO Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egocont"
+ panel = egoControlmain, West
+ panel = egomapping, East
+
+ dialog = egomap_inj2, "", yAxis
+ field = "Injector"
+ field = "InjI"
+ field = "InjJ"
+ field = "InjK"
+ field = "InjL"
+ field = "InjM"
+ field = "InjN"
+ field = "InjO"
+ field = "InjP"
+
+ dialog = egomap_ego2, "", yAxis
+ field = "Sensor"
+ field = "", egomap9
+ field = "", egomap10
+ field = "", egomap11
+ field = "", egomap12
+ field = "", egomap13
+ field = "", egomap14
+ field = "", egomap15
+ field = "", egomap16
+
+ dialog = egomapping2, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj2
+ panel = egomap_ego2
+
+ dialog = egoports2a, "",yAxis
+ field = "EGO Channel"
+ field = "EGO 9 Port", egoport9, {egonum > 8}
+ field = "EGO 10 Port", egoport10, {egonum > 9}
+ field = "EGO 11 Port", egoport11, {egonum > 10}
+ field = "EGO 12 Port", egoport12, {egonum > 11}
+ field = "EGO 13 Port", egoport13, {egonum > 12}
+ field = "EGO 14 Port", egoport14, {egonum > 13}
+ field = "EGO 15 Port", egoport15, {egonum > 14}
+ field = "EGO 16 Port", egoport16, {egonum > 15}
+
+ dialog = egocont9_16, "AFR / EGO(9-16)", border
+ panel = egoports2a, West
+ panel = egomapping2, East
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy, EDIS, Wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 < 31) && (spk_conf2_oddodd != 3) }
+ field = "HEI/GMDIS, TFI, C3I Options", spk_conf2_gmtfi, {(spk_mode0 == 2) || (spk_mode0 == 4)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number Of Coils", spk_mode3
+ field = "Spark Hardware In Use", hardware_spk
+ field = "Cam Input (See tooltip)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ field = "Flip Polarity On Hi-Res Tach / Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell type", dwellmode
+ field = "Use Dwell vs Rpm Curve", spk_conf2_dwell, {dwellmode ==2}
+ field = "Use Dwell Table", spk_conf2_dwelltbl, {dwellmode ==0}
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) && (spk_conf2_dwelltbl==0)}
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) && (spk_conf2_dwell==0)}
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Spark Trim", spk_mode3_trim
+ field = "Kick-start crank delay", spk_mode3_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_mode3_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, { spk_mode0 == 4 }
+ field = "Trigger Wheel Teeth", triggerTeeth, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Main Wheel Speed", spk_config_camcrank, { (spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && spk_mode0 == 4}
+ field = "Level For Phase 1", spk_config_campol, {(spk_mode0 == 25) || ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "Check At Tooth#", poll_level_tooth, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && spk_mode0 == 4}
+
+ dialog = padignition
+ field = ""
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = IgnitionOptions_join, "", xAxis
+ panel = westIgnitionOptions
+ panel = eastIgnitionOptions
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ignopts"
+ ; panel = westIgnitionOptions, West
+ panel = IgnitionOptions_join, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper Idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidle_freq_koeo, { IdleCtl == 2 }
+ field = "Output Port", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ field = "3 Wire Mode", pwmidle_freq_pin3, { IdleCtl == 2 }
+
+ field = "Frequency", pwmidle_freq_scale, { IdleCtl == 2 }
+ field = "This frequency may be shared with boost control"
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidle"
+ field = "Idle Valve Minimum Duty", pwmidle_closed_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Idle Valve Maximum Duty", pwmidle_open_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Dashpot Adder", pwmidle_dp_adder, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Use Last Value or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Minimum Steps", pwmidle_closed_steps, { (IdleCtl == 3) }
+ field = "Idle Valve Maximum Steps", pwmidle_open_steps, { (IdleCtl == 3) }
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ slider = "Closed-Loop Sensitivity", pwmidle_max_rpm_new, horizontal
+ field = "Tuning Mode", pwmidle_cl_opts_display_pid
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot", pwmidle_rpmdot_disablepid, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Use VSS To Activate PID", IdleCtl_vss
+ field = "Minimum VSS1", idleminvss, {IdleCtl_vss}
+ field = "Idle Activation TPS Threshold", pwmidle_tps_threshold
+ field = "RPMdot Threshold", pwmidle_rpmdot_threshold, { IdleCtl_vss != 1 }
+ field = "Max Decel Load", pwmidle_decelload_threshold, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_empty, ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pwmidle_west_panel, "", yAxis
+ panel = pwmidle_closedloop
+ panel = pwmidle_PID_gains
+
+ dialog = pwmidle_mid_panel, "", yAxis
+ panel = pwmidle_PID_behavior
+ panel = pwmidle_PID_activation
+ panel = pwmidle_empty
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", xAxis
+ panel = pwmidle_mid_panel
+ panel = pwmidle_west_panel
+
+; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aeset"
+ field = "Use Time-Based or Accel-Pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE, X-tau)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+ field = "X-Tau MAPdot Thresholds for transition to X, Tau Decel Tables"
+ field = "Start Transition", MapThreshXTD, {EAEOption > 2}
+ field = "Finish Transition", MapThreshXTD2, {EAEOption > 2}
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", tpsasync_events, { feature7_aeevents }
+ field = "Accel Taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime, { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+;accel-pump
+
+ dialog = pump_ae_south_west, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier
+
+ dialog = pump_ae_south_east, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south, "", xAxis
+ panel = pump_ae_south_west
+ panel = pump_ae_south_east
+
+ dialog = pump_ae_south, "", yAxis
+ liveGraph = pump_ae_Graph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south
+
+ dialog = pump_ae_north, "", xAxis
+ panel = pump_accel_mapdot_curve, West, {accel_blend_percent < 100}
+ panel = pump_accel_tpsdot_curve, East, {accel_blend_percent > 0}
+
+ dialog = pump_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent, horizontal
+
+ dialog = AEpump_settings, "Accel-Pump Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north
+ panel = pump_ae_mid
+ panel = pump_ae_south
+
+;time based AE (2)
+ dialog = time_ae_south_west2, ""
+ field = "Accel MAPdot threshold", mapThresh2
+ field = "End Pulsewidth", aeEndPW2
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", taeTime_events2, { feature7_aeevents }
+ field = "Accel Taper", aeTaperTime_events2, { feature7_aeevents }
+ field = "Accel Time", taeTime2, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime2, { !feature7_aeevents }
+
+ dialog = time_ae_south_east2, ""
+ field = "Accel TPSdot Threshold", tpsThresh2
+ field = "Decel Fuel Amount", tdePct2
+ field = "Cold Accel Adder", taeColdA2
+ field = "Cold Accel Multiplier", taeColdM2
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = time_ae_south_south2, "", xAxis
+ panel = time_ae_south_west2
+ panel = time_ae_south_east2
+
+ dialog = time_ae_south2, "", yAxis
+ liveGraph = timeaeGraph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south2
+
+ dialog = time_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion2, horizontal
+
+ dialog = time_ae_north2, "", xAxis
+ panel = time_accel_mapdot_curve2, West, {tpsProportion2 < 100}
+ panel = time_accel_tpsdot_curve2, East, {tpsProportion2 > 0}
+
+ dialog = AEtime_settings2, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north2
+ panel = time_ae_mid2
+ panel = time_ae_south2
+
+;accel-pump (2)
+
+ dialog = pump_ae_south_west2, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold2, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold2, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier2
+
+ dialog = pump_ae_south_east2, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south2, "", xAxis
+ panel = pump_ae_south_west2
+ panel = pump_ae_south_east2
+
+ dialog = pump_ae_south2, "", yAxis
+ liveGraph = pump_ae_Graph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south2
+
+ dialog = pump_ae_north2, "", xAxis
+ panel = pump_accel_mapdot_curve2, West, {accel_blend_percent2 < 100}
+ panel = pump_accel_tpsdot_curve2, East, {accel_blend_percent2 > 0}
+
+ dialog = pump_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent2, horizontal
+
+ dialog = AEpump_settings2, "Accel-Pump Accel Enrichment 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north2
+ panel = pump_ae_mid2
+ panel = pump_ae_south2
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calmapbaro"
+ field = "#MAP Sensor"
+#if INI_VERSION_2
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", map0
+ field = "Value At 5.0 Volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+#if INI_VERSION_2
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings3, "Knock Sensor Settings"
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ field = "Knock Indicated By:", knkDirection, { knk_option && !knk_option_an }
+ field = "Pullup/Down On Input", knkpull, { knk_option && !knk_option_an }
+ field = "Input Pin", knkport_an, { knk_option && (knk_option_an == 1) }
+ field = "Window Sample Type", knk_option_wind, { knk_option && (knk_option_an == 1) }
+ field = "Window Output", knk_pin_out, { knk_option && (knk_option_an < 2) }
+ field = "Monitor Per Cylinder", knock_conf_percyl, { knk_option > 0 }
+ field = "Control Per Cylinder", knock_conf_percylact, { knk_option > 0 }
+ field = "DEBUG data", knock_conf_debug, { knk_option > 0 }
+ field = "#Detection"
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "Ignore During Launch/Flatshift", knock_conf_launch, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Coarse Step Size", knk_step1, { knk_option > 0 }
+ field = "Retard Fine Step Size", knk_step2, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step_adv, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = ks4a, "", yAxis
+ field = "Cyl#"
+ field = "1"
+ field = "2"
+ field = "3"
+ field = "4"
+ field = "5"
+ field = "6"
+ field = "7"
+ field = "8"
+#if CYL_12_16_SUPPORT
+ field = "9"
+ field = "10"
+ field = "11"
+ field = "12"
+ field = "13"
+ field = "14"
+ field = "15"
+ field = "16"
+#endif
+ dialog = ks4b, "", yAxis
+
+ field = "Gain"
+ field = "", knock_gain01
+ field = "", knock_gain02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_gain03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_gain04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_gain05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_gain06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_gain07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_gain08, {knock_conf_percyl && (nCylinders >7)}
+#if CYL_12_16_SUPPORT
+ field = "", knock_gain09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_gain10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_gain11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_gain12, {knock_conf_percyl && (nCylinders >11)}
+ field = "", knock_gain13, {knock_conf_percyl && (nCylinders >12)}
+ field = "", knock_gain14, {knock_conf_percyl && (nCylinders >13)}
+ field = "", knock_gain15, {knock_conf_percyl && (nCylinders >14)}
+ field = "", knock_gain16, {knock_conf_percyl && (nCylinders >15)}
+#endif
+
+ dialog = ks4c, "", yAxis
+ field = "Sensor"
+ field = "", knock_sens01
+ field = "", knock_sens02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_sens03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_sens04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_sens05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_sens06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_sens07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_sens08, {knock_conf_percyl && (nCylinders >7)}
+#if CYL_12_16_SUPPORT
+ field = "", knock_sens09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_sens10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_sens11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_sens12, {knock_conf_percyl && (nCylinders >11)}
+ field = "", knock_sens13, {knock_conf_percyl && (nCylinders >12)}
+ field = "", knock_sens14, {knock_conf_percyl && (nCylinders >13)}
+ field = "", knock_sens15, {knock_conf_percyl && (nCylinders >14)}
+ field = "", knock_sens16, {knock_conf_percyl && (nCylinders >15)}
+#endif
+ dialog = ks4bot, "", xAxis
+ panel = ks4a
+ panel = ks4b
+ panel = ks4c
+
+ dialog = ks4top, ""
+ field = "NOTE! This feature is only licensed for use"
+ field = "with JSM add-on board"
+ field = "Bandpass Frequency (kHz)", knock_bpass
+ field = "Integrator Time constant (us)", knock_int
+ field = "Number of Sensors", knock_conf_num
+ field = "Monitor Per Cylinder", knock_conf_percyl
+ field = "Knock gain:"
+
+ dialog = knockSettings4, "Knock Sensor Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockparam"
+ panel = ks4top, North
+ panel = ks4bot, South
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knock"
+ panel = knockSettings3, West
+ panel = knockthresh_curve, Center
+
+ dialog = knockSettings2, "Knock Window Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockwindow"
+ panel = knockstart_curve, North
+ panel = knockduration_curve, South
+
+ dialog = idleAdvancemenu, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Idle RPM Timing Correction", idle_special_ops_timing_assist
+ field = "Go to idle advance/Idle RPM timing correction when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleadv, { idleadvance_on || idle_special_ops_timing_assist }
+ field = "TPS Is Below:", idleadvance_tps, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And RPM Is Below:", idleadvance_rpm, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And Load Is Above:", idleadvance_load, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And CLT Is Above:", idleadvance_clt, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And After Delay:", idleadvance_delay, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+
+ dialog = idleAdvance, "Idle Advance Settings", border
+ panel = idleAdvancemenu, West
+ panel = idleAdvance_curve, Center
+
+ dialog = idleVemenu, "Idle VE settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleve"
+ field = "Idle VE On", idleve_on
+ field = "Go to idle VE when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleve, { idleve_on }
+ field = "TPS Is Below:", idleve_tps, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And RPM Is Below:", idleve_rpm, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And load Is Above:", idleve_load, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And CLT Is Above:", idleve_clt, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And VSS Zero?", idleve_vsson, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And After Delay:", idleve_delay, { idleve_on && !idleveadv_to_pid_idleve }
+
+ dialog = idleVeTables_n, "Idle VE Table"
+ panel = idleve1Tbl, North, { idleve_on }
+
+ dialog = idleVeTables_s, "Idle VE Table - Dual Fuel"
+ panel = idleve2Tbl, South, { idleve_on && dualfuel_sw_on }
+
+ dialog = idleVeTables, "", yAxis
+ panel = idleVeTables_n
+ panel = idleVeTables_s
+
+ dialog = idleVe, "Idle VE", border
+ panel = idleVemenu, West
+ panel = idleVeTables, Center
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#baud"
+ field = "#The main baud rate should normally be 115200"
+ field = "Megasquirt Baud Rate", baud
+ field = "9600, 19200, 38400, 57600, 115200 only"
+ field = "SDcard Readback Baud Rate", baudhigh
+ field = "up to 230400 only"
+ field = "Set these, Burn"
+ field = "Then adjust tuning software comms baud rate to match"
+ field = "Then powercycle Megasquirt"
+ field = "Use High Speed Runtime", scatterRuntimeEnabled
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = generic_pid_left_a, ""
+ field = "Enable", generic_pid_flags_a_on
+ field = "Closed-loop (PID) type", generic_pid_flags_a_type, { generic_pid_flags_a_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_a, generic_pid_load_size_a, { generic_pid_flags_a_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_a, generic_pid_PV_size_a, { generic_pid_flags_a_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_a, { generic_pid_flags_a_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_a, { generic_pid_flags_a_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_a, { generic_pid_flags_a_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_a, { generic_pid_flags_a_on }
+ field = "Max Control Output", generic_pid_output_upperlim_a, { generic_pid_flags_a_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_a, { generic_pid_flags_a_on }
+ field = "Output Polarity", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID direction", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID use stepper", generic_pid_flags_a_output_type, { generic_pid_flags_a_on }
+; field = "Generic PID use table or curve", generic_pid_flags_a_lookup_type, { generic_pid_flags_a_on }
+ field = "Control Interval", generic_pid_control_interval_a, { generic_pid_flags_a_on }
+ field = "P Term", generic_pid_P_a, { generic_pid_flags_a_on }
+ field = "I Term", generic_pid_I_a, { generic_pid_flags_a_on }
+ field = "D Term", generic_pid_D_a, { generic_pid_flags_a_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_grapha, "", card
+ panel = generic_pid_Tbl_a, Center, { generic_pid_flags_a_on }
+
+ dialog = generic_pid_a, "Generic Closed-Loop A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_a, West
+ panel = generic_pid_curve_grapha, Center
+
+ dialog = generic_pid_left_b, ""
+ field = "Enable", generic_pid_flags_b_on
+ field = "Closed-Loop (PID) Type", generic_pid_flags_b_type, { generic_pid_flags_b_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_b, generic_pid_load_size_b, { generic_pid_flags_b_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_b, generic_pid_PV_size_b, { generic_pid_flags_b_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_b, { generic_pid_flags_b_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_b, { generic_pid_flags_b_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_b, { generic_pid_flags_b_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_b, { generic_pid_flags_b_on }
+ field = "Max Control Output", generic_pid_output_upperlim_b, { generic_pid_flags_b_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_b, { generic_pid_flags_b_on }
+ field = "Output Polarity", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID direction", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID use stepper", generic_pid_flags_b_output_type, { generic_pid_flags_b_on }
+; field = "Generic PID use table or curve", generic_pid_flags_b_lookup_type, { generic_pid_flags_b_on }
+ field = "Control Interval", generic_pid_control_interval_b, { generic_pid_flags_b_on }
+ field = "P Term", generic_pid_P_b, { generic_pid_flags_b_on }
+ field = "I Term", generic_pid_I_b, { generic_pid_flags_b_on }
+ field = "D Term", generic_pid_D_b, { generic_pid_flags_b_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_graphb, "", card
+ panel = generic_pid_Tbl_b, Center, { generic_pid_flags_b_on }
+
+ dialog = generic_pid_b, "Generic Closed-Loop B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_b, West
+ panel = generic_pid_curve_graphb, Center
+
+ ;-------------------------------------------------------------------------------
+ ; General help text
+
+ help = helpGeneral, "Megasquirt 3 General Help"
+ webHelp = "http://www.msextra.com/"
+ text = "For current documentation, click the Web Help button,"
+ text = "or visit http://www.msextra.com/."
+ text = "
"
+ text = "
Megasquirt firmware is copyright and is only licensed for use on approved hardware."
+ text = "
See the LICENSE text supplied with your firmware."
+ text = "
"
+ text = "
To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+ ;-------------------------------------------------------------------------------
+#if INI_VERSION_2
+ [PortEditor]
+ ; spare ports
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = ms3_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = psEnabled, "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H", "PB0 - Spk A", "PB1 - Spk B", "PB2 - Spk C", "PB3 - Spk D", "PB4 - Spk E", "PB5 - Spk F", "PB6 - Spk G", "PB7 - Spk H", "CANout01", "CANout02", "CANout03", "CANout04", "CANout05", "CANout06", "CANout07", "CANout08", "CANout09", "CANout10", "CANout11", "CANout12", "CANout13", "CANout14", "CANout15", "CANout16", "Loop 1", "Loop 2", "Loop 3"
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+#endif
+ ;-------------------------------------------------------------------------------
+
+ [CurveEditor]
+ curve = vsslaunch_curve, "RPM Limit vs. Speed"
+ columnLabel = "Speed", "RPM limit", "Retard"
+ xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+ yAxis = 0, {rpmhigh}, 9
+; xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+; yAxis = 0, 30, 9
+ xBins = vsslaunch_vss
+ yBins = vsslaunch_rpm
+ yBins = vsslaunch_retard
+
+ curve = cranktaper_curvee, "Cranking Taper Curve (Events)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Events", "%fuel"
+ xAxis = 0, 1000, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_timeevents
+ yBins = cranktaper_pct
+
+ curve = cranktaper_curvet, "Cranking Taper Curve (Time)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Time", "%fuel"
+ xAxis = 0, 25.5, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_time
+ yBins = cranktaper_pct
+
+ curve = oil_curve, "Min/Max Oil Pressure vs. RPM"
+ columnLabel = "RPM", "Min", "Max"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 300, 6
+ xBins = oil_rpm, rpm
+ yBins = oil_press_min
+ yBins = oil_press_max
+ lineLabel = "Min. pressure"
+ lineLabel = "Max. pressure"
+
+ curve = hpte_curve, "Enrichment vs. Time"
+ columnLabel = "Time", "AFR decrease"
+ xAxis = 0, 25.5, 6
+ yAxis = 0, 3, 6
+ xBins = hpte_times
+ yBins = hpte_afrs
+
+ curve = fp_temp_curve, "Temperature Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp1"
+ columnLabel = "Temperature", "adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = fp_temps, fuel_temp1
+ yBins = fp_temp_adj
+
+ curve = fp_press_curve, "Pressure Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress1"
+ columnLabel = "Differential Pressure", "adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = fp_presss, fuel_press1
+ yBins = fp_press_adj
+
+ curve = alternator_linearise, "Duty linearisation"
+ columnLabel = "Calc", "Output"
+ xAxis = 0, 100, 7
+ yAxis = 0, 100, 7
+ xBins = alt_dutyin
+ yBins = alt_dutyout
+
+ curve = alternator_tempcurve, "Target Charge Voltage"
+ columnLabel = "Temperature", "Voltage"
+ xAxis = 0, 100, 6
+ yAxis = 12, 16, 6
+ xBins = alternator_temp
+ yBins = alternator_targvolts
+
+ curve = alternator_outduty, "Alternator Control Duty"
+ columnLabel = "Voltage", "Duty %"
+ xAxis = 12, 16, 6
+ yAxis = 0, 100, 6
+ xBins = alternator_dvolts, alt_targv
+ yBins = alternator_dutyv
+
+ curve = alternator_outfreq, "Alternator Control Frequency"
+ columnLabel = "Voltage", "Freq Hz"
+ xAxis = 12, 16, 6
+ yAxis = 0, 250, 6
+ xBins = alternator_fvolts, alt_targv
+ yBins = alternator_freqv
+
+ curve = pwm_curve_a, "PWM curve A"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_a, pwma_load
+ yBins = pwm_yaxis_a
+ size = 300, 240
+
+ curve = pwm_curve_b, "PWM curve B"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_b, pwmb_load
+ yBins = pwm_yaxis_b
+ size = 300, 240
+
+ curve = pwm_curve_c, "PWM curve C"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_c, pwmc_load
+ yBins = pwm_yaxis_c
+ size = 300, 240
+
+ curve = pwm_curve_d, "PWM curve D"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_d, pwmd_load
+ yBins = pwm_yaxis_d
+ size = 300, 240
+
+ curve = pwm_curve_e, "PWM curve E"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_e, pwme_load
+ yBins = pwm_yaxis_e
+ size = 300, 240
+
+ curve = pwm_curve_f, "PWM curve F"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_f, pwmf_load
+ yBins = pwm_yaxis_f
+ size = 300, 240
+
+ curve = tc_slip_curve, "Slip Threshold vs Knob Input"
+ columnLabel = "Knob Input", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = tcslipx
+ yBins = tcslipy
+
+ curve = blend1_curve, "VE1 -> VE2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx1
+ yBins = blendy1
+
+ curve = blend2_curve, "Spk1 -> Spk2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx2
+ yBins = blendy2
+
+ curve = blend3_curve, "VE1+2 -> VE3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx3
+ yBins = blendy3
+
+ curve = blend4_curve, "Spk1+2 -> Spk3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx4
+ yBins = blendy4
+
+ curve = blend5_curve, "AFR1 -> AFR2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx5
+ yBins = blendy5
+
+ curve = blend6_curve, "Boost1 -> Boost2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx6
+ yBins = blendy6
+
+ curve = blend7_curve, "Crank % 1 -> Crank % 2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx7
+ yBins = blendy7
+
+ curve = blend8_curve, "Flex Blending"
+ columnLabel = "Flex%", "Blend%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx8
+ yBins = blendy8
+
+ curve = tpswot_curve, "TPS for WOT"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ curve = launch_retard_time, "Timed Retard After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#timedretard"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = launch_time
+ yBins = launch_retard
+
+ curve = cl_idle_timing_curve, "Idle RPM Timing Correction Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadvrpm"
+ columnLabel = "RPM delta", "Timing Delta"
+ xAxis = -400, 400, 8
+ yAxis = -20, 20, 8
+ xBins = cl_idle_timing_target_deltas
+ yBins = cl_idle_timing_advance_deltas
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -10, 10, 6
+ xBins = idle_voltage_comp_voltage
+ yBins = idle_voltage_comp_delta
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+;time-based2
+ curve = time_accel_mapdot_curve2, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates2, MAPdot
+ yBins = maeBins2
+
+;time-based2
+ curve = time_accel_tpsdot_curve2, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates2, TPSdot
+ yBins = taeBins2
+
+;accel-pump
+ curve = pump_accel_mapdot_curve, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots, MAPdot
+ yBins = accel_mapdot_amts
+
+;accel-pump
+ curve = pump_accel_tpsdot_curve, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots, TPSdot
+ yBins = accel_tpsdot_amts
+
+;accel-pump2
+ curve = pump_accel_mapdot_curve2, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots2, MAPdot
+ yBins = accel_mapdot_amts2
+
+;accel-pump2
+ curve = pump_accel_tpsdot_curve2, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots2, TPSdot
+ yBins = accel_tpsdot_amts2
+
+ curve = knockstart_curve, "Knock Window Start"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -40, 10, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_starts
+
+ curve = knockduration_curve, "Knock Window Duration"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 40, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_durations
+
+ curve = knockthresh_curve, "Knock Input Threshold"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = knockupscale_curve, "Knock Coolant Scaling"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockcoolant"
+ columnLabel = "clt", "%"
+ xAxis = {cltlowlim}, {clthighlim}, 6
+ yAxis = 100, 500, 6
+ xBins = knock_clts, coolant
+ yBins = knock_upscale
+ gauge = cltGauge
+
+ curve = tc_perfect_curve, "Traction Control - Perfect Run VSS"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectvss"
+ columnLabel = "Time", "VSS"
+ xAxis = 0, 20, 9
+ yAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_vss
+
+ curve = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectrpm"
+ columnLabel = "Time", "RPM"
+ xAxis = 0, 20, 9
+ yAxis = 0, {rpmhigh}, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_rpm
+
+ curve = tc_retard_curve, "Spark Retard"
+ columnLabel = "Slip x time", "Retard"
+ xAxis = 0, 100, 5
+ yAxis = 0, 30, 5
+ xBins = tc_react_x
+ yBins = tc_retard
+
+ curve = tc_spkcut_curve, "Spark Cut"
+ columnLabel = "Slip x time", "Spark"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_spkcut
+
+ curve = tc_nitrous_curve, "Nitrous%"
+ columnLabel = "Slip x time", "Nitrous"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_nitrous
+
+ curve = tc_boost_curve, "Boost Cut"
+ columnLabel = "Slip x Time", "Boost"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost
+
+ curve = tc_boost_duty_delta_curve, "Boost Duty +/-"
+ columnLabel = "Slip x Time", "Boost Duty +/-"
+ xAxis = 0, 100, 5
+ yAxis = -100, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost_duty_delta
+
+ curve = tc_addfuel_curve, "Add Fuel"
+ columnLabel = "Slip x time", "Added Fuel"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_addfuel
+
+ curve = dualfuel_temp_curve, "Temperature Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp2"
+ columnLabel = "Temperature", "Adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_temp, fuel_temp2
+ yBins = dualfuel_temp_adj
+
+ curve = dualfuel_press_curve, "Pressure Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress2"
+ columnLabel = "Differential Pressure", "Adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_press, fuel_press2
+ yBins = dualfuel_press_adj
+
+ curve = primingPW2, "Priming Pulse 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep2"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p21, coolant, readonly
+ yBins = primePWTable2
+ gauge = cltGauge
+
+ curve = crankingPW2, "Cranking Pulse % 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp2"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant
+ yBins = crankPctTable2
+ gauge = cltGauge
+
+ curve = asePct2, "Afterstart Enrichment (ASE) Percentage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep2"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = asePctTable2
+ gauge = cltGauge
+
+ curve = aseTaper2, "Afterstart Enrichment (ASE) Taper 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset2"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = aseCntTable2
+ gauge = cltGauge
+
+ curve = warmup_curve2, "Warmup Enrichment (WUE) Curve 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue2"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = wueBins2
+ gauge = cltGauge
+
+ curve = MAFtable1f, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Freq", "Flow"
+ xAxis = {maf_freq0}, {maf_freq1}, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = maff, maf_freq
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellrpm_curve, "Dwell vs RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellvsrpm"
+ columnLabel = "RPM", "Dwell"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 6, 6
+ xBins = dwellrpm_rpm
+ yBins = dwellrpm_dwell
+
+
+ curve = boostvss_duty_curve, "Boost Duty vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "Duty"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 100, 6
+ xBins = boostvss_speed
+ yBins = boostvss_duty
+
+ curve = boostvss_target_curve, "Boost Target vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "kPa"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 400, 6
+ xBins = boostvss_speed
+ yBins = boostvss_target
+
+ ; nitrous 1 vs time
+ curve = n2o1_duty_time, "Nitrous1 - Duty vs Time"
+ columnLabel = "s", "Duty"
+
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_time
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_time, "Nitrous1 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_time
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_time, "Nitrous1 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_time
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs time
+ curve = n2o2_duty_time, "Nitrous2 - Duty vs Time"
+ columnLabel = "s", "Duty"
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_time
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_time, "Nitrous2 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_time
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_time, "Nitrous2 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_time
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs rpm
+ curve = n2o1_duty_rpm, "Nitrous1 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_rpm, "Nitrous1 - Added fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_rpm, "Nitrous1 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_rpm
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs rpm
+ curve = n2o2_duty_rpm, "Nitrous2 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_rpm, "Nitrous2 - Added Fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_rpm, "Nitrous2 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_rpm
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs VSS
+ curve = n2o1_duty_vss, "Nitrous1 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_vss
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_vss, "Nitrous1 - Added fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_vss
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_vss, "Nitrous1 - Retard vs VSS"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_vss
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs vss
+ curve = n2o2_duty_vss, "Nitrous2 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_vss
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_vss, "Nitrous2 - Added Fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_vss
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_vss, "Nitrous2 - Retard vs VSS"
+ columnLabel = "VSS", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_vss
+ yBins = n2o2_retard
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matcltcor"
+ columnLabel = "flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+ ;small pulsewidths
+ curve = smallcurve0, "Small Pulsewidth Curve 1"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw0
+
+ curve = smallcurve1, "Small Pulsewidth Curve 2"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw1
+
+ curve = smallcurve2, "Small Pulsewidth Curve 3"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw2
+
+ curve = smallcurve3, "Small Pulsewidth Curve 4"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw3
+
+ curve = opencurve0, "Dead Time Voltage % Curve 1"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct0
+
+ curve = opencurve1, "Injector Dead Time Curve 2"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct1
+
+ curve = opencurve2, "Injector Dead Time Curve 3"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct2
+
+ curve = opencurve3, "Injector Dead Time Curve 4"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct3
+
+ curve = boost_timed_curve, "Boost %age After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostdelay"
+ columnLabel = "Time", ""
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = boost_timed_time
+ yBins = boost_timed_pct
+
+ curve = mapsample_curve, "MAP Sample Timing"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 8
+ yAxis = 0, 180, 8
+ xBins = map_sample_rpms
+ yBins = map_sample_timing
+ gauge = tachometer
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant, readonly
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant, readonly
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant, readonly
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant, readonly
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment (ASE) Percentage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+ xAxis = -40, {mathigh}, 9
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = matGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air density"
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+; this is just as an example.. not yet finished
+ curve = EAEmanycurves, "Combined EAE Curve Graph - example to test TunerStudio features"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ xBins = EAESOCRPMbins2, rpm ; commented out to show last yAxis tied to previous xAxis
+ yBins = EAESON2
+ gauge = EAEGauge1 ; As always gauge is optional
+
+ lineLabel = "Sucked-from-walls const"
+ lineLabel = "Adhere-to-walls coef"
+ lineLabel = "Adhere-to-walls coef 2"
+ lineLabel = "Sucked-from-walls Correction"
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc2"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins2, fuelload
+ yBins = EAEBAWC2
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins2, fuelload
+ yBins = EAEBSOC2
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ gauge = EAEGauge1
+
+ curve = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins2, rpm
+ yBins = EAESON2
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins2, coolant
+ yBins = EAESOW2
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins2, coolant
+ yBins = EAEAWW2
+ gauge = EAEGauge1
+
+ curve = XAccTable, "X Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddlea"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 120, 4
+ xBins = XTrpms, rpm
+ yBins = XAcc
+ gauge = EAEGauge1
+
+ curve = XDecTable, "X Decel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddled"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 120, 9
+ xBins = XTrpms, rpm
+ yBins = XDec
+ gauge = EAEGauge1
+
+ curve = TauAccTable, "Tau Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimea"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauAcc
+ gauge = EAEGauge1
+
+ curve = TauDecTable, "Tau Decel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimed"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauDec
+ gauge = EAEGauge1
+
+ curve = XCltTable, "X (Puddling) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtxtemp"
+ columnLabel = "Temperature", "Correction"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = XClt_temps
+ yBins = XClt
+ gauge = cltGauge
+
+ curve = TCltTable, "Tau (Time) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtttemp"
+ columnLabel = "Temperature", "time"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = TauClt_temps
+ yBins = TauClt
+ gauge = cltGauge
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_curve, "Idle Advance Timing"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 4
+ yAxis = -10, 90, 4
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, {clthighlim}, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, 15000, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load at TPS Switchpoint"
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ [TableEditor]
+ ; table_id, map3d_id, "title", page
+ table = dwell_tbl, dwell_tblMap, "Dwell Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwelltable"
+ xBins = dwell_table_rpms, rpm
+ yBins = dwell_table_loads, ignload
+ zBins = dwell_table_values
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = ego_delay_Tbl, ego_delay_Map, "EGO Delay Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egodelay"
+ xBins = ego_delay_rpms, rpm
+ yBins = ego_delay_loads, afrload1
+ zBins = ego_delay_table
+ upDownLabel = "SHORTER", "LONGER"
+ gridOrient = 250, 0, 340
+
+ table = ego_auth_Tbl, ego_auth_Map, "EGO Authority Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egoauth"
+ xBins = ego_auth_rpms, rpm
+ yBins = ego_auth_loads, afrload1
+ zBins = ego_auth_table
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ltt_Table1Tbl, ltt_Table1Map, "Long Term Trim Table 1", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ltttable"
+ xBins = ltt_rpms, rpm
+ yBins = ltt_loads, fuelload
+ zBins = ltt_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = fp_dutyTbl, fp_dutyMap, "Fuel Pump Duty Table", 1
+ ; constant, variable
+ xBins = fpd_rpm rpm
+ yBins = fpd_load, fuelload
+ zBins = fpd_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = alphaMAPTbl, alphaMAPMap, "Fallback MAP Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fallbackmap"
+ xBins = amap_rpm, rpm
+ yBins = amap_tps, tps
+ zBins = alphaMAPtable
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;vvt timing
+ table = vvt_timing1_tbl, vvt_timing1_map, "VVT Intake (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtint"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing1
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = vvt_timing2_tbl, vvt_timing2_map, "VVT Exhaust (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtexh"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing2
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_rifuelcut_tbl, als_rifuelcut_map, "Turbo Anti-lag Roving Idle", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alsidle"
+ xBins = als_rirpms, rpm
+ yBins = als_ritpss, tps
+ zBins = als_rifuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_fuelcut_tbl, als_fuelcut_map, "ALS Fuel Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_fuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_sparkcut_tbl, als_sparkcut_map, "ALS Spark Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_sparkcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_timing_tbl, als_timing_map, "ALS Timing", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_addfuel_tbl, als_addfuel_map, "ALS Added Fuel %age", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_addfuel
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_a, pwm_duties_map_a, "Generic PWM Output A", 11
+ xBins = pwm_rpms_a, rpm
+ yBins = pwm_loadvals_a, pwma_load
+ zBins = pwm_duties_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_b, pwm_duties_map_b, "Generic PWM Output B", 2
+ xBins = pwm_rpms_b, rpm
+ yBins = pwm_loadvals_b, pwmb_load
+ zBins = pwm_duties_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_c, pwm_duties_map_c, "Generic PWM Output C", 2
+ xBins = pwm_rpms_c, rpm
+ yBins = pwm_loadvals_c, pwmc_load
+ zBins = pwm_duties_c
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_d, pwm_duties_map_d, "Generic PWM Output D", 2
+ xBins = pwm_rpms_d, rpm
+ yBins = pwm_loadvals_d, pwmd_load
+ zBins = pwm_duties_d
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_vvt, pwm_duties_map_vvt, "Generic PWM Output E / VVT", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtonoff"
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, vvt_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_e, pwm_duties_map_e, "Generic PWM Output E", 2
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, pwme_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_f, pwm_duties_map_f, "Generic PWM Output F", 2
+ xBins = pwm_rpms_f, rpm
+ yBins = pwm_loadvals_f, pwmf_load
+ zBins = pwm_duties_f
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_a, generic_pid_map_a, "Generic Closed-Loop A", 17
+ xBins = generic_pid_rpms_a, rpm
+ yBins = generic_pid_loadvals_a, generic_pid_load_a
+ zBins = generic_pid_targets_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_b, generic_pid_map_b, "Generic Closed-Loop B", 17
+ xBins = generic_pid_rpms_b, rpm
+ yBins = generic_pid_loadvals_b, generic_pid_load_b
+ zBins = generic_pid_targets_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = waterinjTbl, waterinjMap, "Water Injection Duty Table ", 1
+ xBins = waterinj_rpm, rpm
+ yBins = waterinj_map, map
+ zBins = waterinj_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = maxafr1Tbl, maxafr1Map, "Max AFR 1 in Lambda", 1
+#else
+ table = maxafr1Tbl, maxafr1Map, "Max AFR Difference", 1
+#endif
+ xBins = maxafr1_rpm, rpm
+ yBins = maxafr1_load, maxafrload
+ zBins = maxafr1_diff
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable4Tbl, veTable4Map, "Fuel VE Table 4", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve4"
+ ; constant, variable
+ xBins = frpm_table4, rpm
+ yBins = fmap_table4, fuelload2
+ zBins = veTable4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = idleve1Tbl, idleve1Map, "Idle VE table", 10
+ xBins = idleve_rpms1, rpm
+ yBins = idleve_loads1, fuelload
+ zBins = idleve_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = idleve2Tbl, idleve2Map, "Idle VE Table - Dual Fuel", 10
+ xBins = idleve_rpms2, rpm
+ yBins = idleve_loads2, fuelload
+ zBins = idleve_table2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = stagedTable, stagedMap, "Staged Injection Table", 6
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, fuelload
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl4, ignitionMap4, "Ignition Table 4 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign4"
+ xBins = srpm_table4, rpm
+ yBins = smap_table4, ignload2
+ zBins = advanceTable4
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Targets 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys2, boostctlDtyMap2, "Boost Control Duty 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty2"
+ xBins = boost_ctl_pwmtarg_rpm_bins2, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins2, throttle
+ zBins = boost_ctl_pwm_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Bias Duty 1", 15
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ_1
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs2, boostctlCLPWMtargsMap2, "Boost Control Bias Duty 2", 15
+ xBins = boost_ctl_cl_pwm_rpms2, rpm
+ yBins = boost_ctl_cl_pwm_targboosts2, boost_targ_2
+ zBins = boost_ctl_cl_pwm_targs2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs2, boostctlTargMap2, "Boost Control Targets 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg2"
+ xBins = boost_ctl_loadtarg_rpm_bins2, rpm
+ yBins = boost_ctl_loadtarg_tps_bins2, throttle
+ zBins = boost_ctl_load_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ ;injector trims
+ table = inj_trimaTbl, inj_trimaMap, "Cyl 1 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimbTbl, inj_trimbMap, "Cyl 2 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimcTbl, inj_trimcMap, "Cyl 3 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimdTbl, inj_trimdMap, "Cyl 4 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimeTbl, inj_trimeMap, "Cyl 5 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimfTbl, inj_trimfMap, "Cyl 6 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimgTbl, inj_trimgMap, "Cyl 7 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimhTbl, inj_trimhMap, "Cyl 8 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+ table = inj_trim1Tbl, inj_trim1Map, "Injector Trim 1", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trim2Tbl, inj_trim2Map, "Injector Trim 2", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim2"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimiTbl, inj_trimiMap, "Cyl 9 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimjTbl, inj_trimjMap, "Cyl 10 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimkTbl, inj_trimkMap, "Cyl 11 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimlTbl, inj_trimlMap, "Cyl 12 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimmTbl, inj_trimmMap, "Cyl 13 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimnTbl, inj_trimnMap, "Cyl 14 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimoTbl, inj_trimoMap, "Cyl 15 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimpTbl, inj_trimpMap, "Cyl 16 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;inj timing
+ table = inj_timing_tbl, inj_timing_map, "Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt1"
+ xBins = inj_timing_rpm, rpm
+ yBins = inj_timing_load, fuelload
+ zBins = inj_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = inj_timing_sec_tbl, inj_timing_sec_map, "Secondary Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt2"
+ xBins = inj_timing_sec_rpm, rpm
+ yBins = inj_timing_sec_load, fuelload
+ zBins = inj_timing_sec
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ ;spark trims
+ table = spk_trimaTbl, spk_trimaMap, "Spark Trim 1", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimbTbl, spk_trimbMap, "Spark Trim 2", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimcTbl, spk_trimcMap, "Spark Trim 3", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimdTbl, spk_trimdMap, "Spark Trim 4", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimeTbl, spk_trimeMap, "Spark Trim 5", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimfTbl, spk_trimfMap, "Spark Trim 6", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimgTbl, spk_trimgMap, "Spark Trim 7", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimhTbl, spk_trimhMap, "Spark Trim 8", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimiTbl, spk_trimiMap, "Spark Trim 9", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimjTbl, spk_trimjMap, "Spark Trim 10", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimkTbl, spk_trimkMap, "Spark Trim 11", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimlTbl, spk_trimlMap, "Spark Trim 12", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimmTbl, spk_trimmMap, "Spark Trim 13", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimnTbl, spk_trimnMap, "Spark Trim 14", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimoTbl, spk_trimoMap, "Spark Trim 15", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimpTbl, spk_trimpMap, "Spark Trim 16", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = narrowband_tgts_tbl, narrowband_tgts_map, "Narrowband EGO targets", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#narrowtargs"
+ xBins = narrowband_tgts_rpms, rpm
+ yBins = narrowband_tgts_loads, afrload1
+ zBins = narrowband_tgts
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ ;-------------------------------------------------------------------------------
+
+ [GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+ gaugeCategory = "Outputs 1"
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq1Gauge = pwseq1, "Pulse Width Seq 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq2Gauge = pwseq2, "Pulse Width Seq 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq3Gauge = pwseq3, "Pulse Width Seq 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq4Gauge = pwseq4, "Pulse Width Seq 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq5Gauge = pwseq5, "Pulse Width Seq 5", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq6Gauge = pwseq6, "Pulse Width Seq 6", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq7Gauge = pwseq7, "Pulse Width Seq 7", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq8Gauge = pwseq8, "Pulse Width Seq 8", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#if CYL_12_16_SUPPORT
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width Seq 9", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width Seq 10", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq11Gauge = pwseq11, "Pulse Width Seq 11", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq12Gauge = pwseq12, "Pulse Width Seq 12", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq13Gauge = pwseq13, "Pulse Width Seq 13", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq14Gauge = pwseq14, "Pulse Width Seq 14", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq15Gauge = pwseq15, "Pulse Width Seq 15", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq16Gauge = pwseq16, "Pulse Width Seq 16", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#else
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width V3 inj1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width V3 inj2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+#endif
+
+ gaugeCategory = "Outputs 2"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ ; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ boostdutyGauge2 = boostduty2, "Boost Duty 2", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injtimingpriGauge = inj_timing_pri, "Injector timing (pri)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ injtimingsecGauge = inj_timing_sec, "Injector timing (sec)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+
+ gaugeCategory = "Outputs 3"
+ nitrous1_duty = nitrous1_duty, "Nitrous 1 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ nitrous2_duty = nitrous2_duty, "Nitrous 2 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ water_duty = water_duty, "Water Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_a = duty_pwm_a, "Generic PWM A Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_b = duty_pwm_b, "Generic PWM B Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_c = duty_pwm_c, "Generic PWM C Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_d = duty_pwm_d, "Generic PWM D Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_e = duty_pwm_e, "Generic PWM E Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_f = duty_pwm_f, "Generic PWM F Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ vvt_duty1 = vvt_duty1, "VVT 1 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty2 = vvt_duty2, "VVT 2 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty3 = vvt_duty3, "VVT 3 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty4 = vvt_duty4, "VVT 4 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ fp_duty = fp_duty, "Fuel pump duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ alt_duty = alt_duty, "Alternator Control Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ alt_freq = alt_freq, "Alternator Control Frequency", "Hz", 0, 255, 255, 255, 255, 255, 0, 0
+ alt_targv = alt_targv, "Alternator Target Volts", "V", 0, 16, 16, 16, 16, 16, 1, 1
+ generic_pid_duty_a = generic_pid_duty_a, "Generic Closed-Loop A Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ generic_pid_duty_b = generic_pid_duty_b, "Generic Closed-Loop B Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+
+ gaugeCategory = "Calculations 1"
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ gammaEnrichGauge = gammaEnrich, "Total cor", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ gammaairGauge = airCorrection, "Air density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ warmupgauge = warmupEnrich, "Warmup Enrichment", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ fuelcorr = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0
+ fueltemp_cor = fueltemp_cor, "Fuel Temperature Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ fuelpress_cor = fuelpress_cor, "Fuel Pressure Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ ltt_cor = ltt_cor, "Long Term Trim Correction", "%", -12.7, 12.7, -12.7, -12.7, 12.7, 12.7, 1, 1
+ veGauge1 = veCurr1, "VE1 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ nitrous_addfuel = n2o_addfuel, "Nitrous added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ tps_accel = tps_accel, "tps_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ map_accel = map_accel, "map_accel", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ total_accel = total_accel, "total_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ als_addfuel = als_addfuel, "ALS added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard, "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ coldAdvGauge = coldAdvDeg, "Cold advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ tc_retardGauge = tc_retard, "Traction Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ cel_retardGauge = cel_retard, "CEL Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ fc_retardGauge = fc_retard, "Fuel cut Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv4Gauge = adv4, "Spark Table 4", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ als_timingGauge = als_timing, "ALS Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launch_timingGauge = launch_timing, "Launch Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ step3_timingGauge = step3_timing, "3-step Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launchvss_retardGauge = launchvss_retard, "Launch VSS Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ timingerrGauge = timing_err, "Timing pred err", "%", -127, 127, 255,255,255,255,0,0
+; user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ nitrous_retard = n2o_retard, "Nitrous retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ launch_timer = launch_timer, "Launch timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+ launch_retard = launch_retard, "Launch timed retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ nitrous_timer = nitrous_timer, "Nitrous Timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+
+ gaugeCategory = "Calculations 3"
+ lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ vss1dot = vss1dot, "VSS1 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ vss2dot = vss2dot, "VSS2 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ vvttargGauge1 = vvt_target1, "VVT 1 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge2 = vvt_target2, "VVT 2 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge3 = vvt_target3, "VVT 3 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge4 = vvt_target4, "VVT 4 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ fuelflowGauge = fuelflow, "Fuel flow (avg)", "cc/min", 0, 65535, -1, -1, 99999, 99999, 0, 0
+ economy_l_100km = economy_l_100km, "Fuel economy", "l/100km", 0, 300, -1, -1, 900, 900, 1, 1
+ economy_mpg_us = economy_mpg_us, "Fuel economy", "mpg_us", 0, 60, -1, -1, 99, 99, 0, 0
+ economy_mpg_uk = economy_mpg_uk, "Fuel economy", "mpg_uk", 0, 60, -1, -1, 99, 99, 0, 0
+ boost_target_1 = boost_targ_1, "Boost Target 1", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ boost_target_2 = boost_targ_2, "Boost Target 2", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ tc_slipxtime = tc_slipxtime, "T/C Slip * Time", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+
+ gaugeCategory = "EGT inputs"
+#if CELSIUS
+ egtGauge1 = egt1, "EGT 01", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge2 = egt2, "EGT 02", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge3 = egt3, "EGT 03", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge4 = egt4, "EGT 04", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge5 = egt5, "EGT 05", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge6 = egt6, "EGT 06", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge7 = egt7, "EGT 07", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge8 = egt8, "EGT 08", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge9 = egt9, "EGT 09", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge10 = egt10, "EGT 10", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge11 = egt11, "EGT 11", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge12 = egt12, "EGT 12", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge13 = egt13, "EGT 13", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge14 = egt14, "EGT 14", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge15 = egt15, "EGT 15", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge16 = egt16, "EGT 16", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+#else
+ egtGauge1 = egt1, "EGT 01", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge2 = egt2, "EGT 02", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge3 = egt3, "EGT 03", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge4 = egt4, "EGT 04", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge5 = egt5, "EGT 05", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge6 = egt6, "EGT 06", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge7 = egt7, "EGT 07", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge8 = egt8, "EGT 08", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge9 = egt9, "EGT 09", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge10 = egt10, "EGT 10", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge11 = egt11, "EGT 11", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge12 = egt12, "EGT 12", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge13 = egt13, "EGT 13", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge14 = egt14, "EGT 14", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge15 = egt15, "EGT 15", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge16 = egt16, "EGT 16", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+#endif
+
+ gaugeCategory = "Sensor inputs1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ maf_freqGauge = maf_freq, "MAF Frequency", "Hz", 0, 30000, 0, 30000, 30000, 30000, 0, 0
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ gaugeCategory = "Sensor inputs2"
+ stream_levelGauge = stream_level, "Stream Level", "", 0, 128, 128, 128, 128, 128, 0, 0
+ vehiclespeed1 = vss1, "Vehicle Speed 1", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed2 = vss2, "Vehicle Speed 2", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed3 = vss3, "Vehicle Speed 3", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed4 = vss4, "Vehicle Speed 4", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+
+ shaftspeed1 = ss1, "Shaft Speed 1", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ shaftspeed2 = ss2, "Shaft Speed 2", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ gear = gear, "Gear", "", -1, 6, 6, 6, 6, 6, 0 ,0
+ accelx = accelx, "Accel X", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accely = accely, "Accel Y", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accelz = accelz, "Accel Z", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+#if CELSIUS
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+#else
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+#endif
+ fuelpressGauge1kpa = fuel_press1, "Fuel Pressure1", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1psi = fuel_press1_psi, "Fuel Pressure1", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1bar = fuel_press1_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2kpa = fuel_press2, "Fuel Pressure2", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2psi = fuel_press2_psi, "Fuel Pressure2", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2bar = fuel_press2_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ TPSADCGauge = tpsADC, "TPS ADC", "ADC", 0, 1023, -1, 1, 1024, 1024, 0, 0
+ load_duty = load_duty, "Alternator Load Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ batt_curr = batt_curr, "Battery Current", "A", -100, 100, 200, 200, 200, 200, 1, 1
+
+gaugeCategory = "Sensor inputs3"
+ vvtGauge1 = vvt_ang1, "VVT 1 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge2 = vvt_ang2, "VVT 2 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge3 = vvt_ang3, "VVT 3 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge4 = vvt_ang4, "VVT 4 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ knock01Gauge = knock_cyl01, "Knock cyl# 1", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock02Gauge = knock_cyl02, "Knock cyl# 2", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock03Gauge = knock_cyl03, "Knock cyl# 3", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock04Gauge = knock_cyl04, "Knock cyl# 4", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock05Gauge = knock_cyl05, "Knock cyl# 5", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock06Gauge = knock_cyl06, "Knock cyl# 6", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock07Gauge = knock_cyl07, "Knock cyl# 7", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock08Gauge = knock_cyl08, "Knock cyl# 8", "", 0, 100, 0, 0, 100, 100, 1, 0
+#if CYL_12_16_SUPPORT
+ knock09Gauge = knock_cyl09, "Knock cyl# 9", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock10Gauge = knock_cyl10, "Knock cyl#10", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock11Gauge = knock_cyl11, "Knock cyl#11", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock12Gauge = knock_cyl12, "Knock cyl#12", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock13Gauge = knock_cyl13, "Knock cyl#13", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock14Gauge = knock_cyl14, "Knock cyl#14", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock15Gauge = knock_cyl15, "Knock cyl#15", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock16Gauge = knock_cyl16, "Knock cyl#16", "", 0, 100, 0, 0, 100, 100, 1, 0
+#endif
+
+gaugeCategory = "Sensor inputs4"
+ gps_latdeggauge = gps_latdeg, "GPS Latitude deg", "deg", -90, +90, -90, -90, 90, 90, 0, 0
+ gps_latmingauge = gps_latmin, "GPS Latitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_latsecgauge = gps_latsec, "GPS Latitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_londeggauge = gps_londeg, "GPS Longitude deg", "deg", 0, +180, 0, 0, 180, 180, 0, 0
+ gps_lonmingauge = gps_lonmin, "GPS Longitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_lonsecgauge = gps_lonsec, "GPS Longitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_lonEWgauge = gps_lonEW, "GPS Longitude E/W", "E/W", 0, 255, 0, 0, 255, 255, 0, 0
+ gps_altgauge = gps_alt, "GPS Altitude", "m", -100, +13000, -100, -100, 13000, 13000, 1, 1
+ gps_speedgauge = gps_speed, "GPS Speed", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ gps_coursegauge = gps_course, "GPS Course", "deg", 0, 360, 0, 0, 360, 360, 1, 1
+
+ gps_latitudegauge = gps_latitude, "GPS Latitude", "deg", -90, +90, -90, -90, 90, 90, 5, 5
+ gps_longitudegauge = gps_longitude, "GPS Longitude", "deg", -180, +180, -180, -180, 180, 180, 5, 5
+
+gaugeCategory = "AFR/EGO inputs"
+#if NARROW_BAND_EGO
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+#elif LAMBDA
+
+ lambda1Gauge = lambda1, "Lambda 1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda 2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda3Gauge = lambda3, "Lambda 3", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda4Gauge = lambda4, "Lambda 4", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda5Gauge = lambda5, "Lambda 5", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda6Gauge = lambda6, "Lambda 6", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda7Gauge = lambda7, "Lambda 7", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda8Gauge = lambda8, "Lambda 8", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#else
+
+ afr1Gauge = afr1, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr3Gauge = afr3, "Air:Fuel Ratio 3", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr4Gauge = afr4, "Air:Fuel Ratio 4", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr5Gauge = afr5, "Air:Fuel Ratio 5", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr6Gauge = afr6, "Air:Fuel Ratio 6", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr7Gauge = afr7, "Air:Fuel Ratio 7", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr8Gauge = afr8, "Air:Fuel Ratio 8", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#endif
+
+gaugeCategory = "AFR/EGO calculations"
+#if NARROW_BAND_EGO
+ afr1targetGauge = afrtgt1, "EgoV 1 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr2targetGauge = afrtgt2, "EgoV 2 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr1errGauge = afr1err, "EgoV 1 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+ afr2errGauge = afr2err, "EgoV 2 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+#elif LAMBDA
+ afr1targetGauge = afrtgt1, "Lambda 1 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "Lambda 2 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "Lambda 1 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "Lambda 2 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+#else
+ afr1targetGauge = afrtgt1, "AFR 1 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "AFR 2 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "AFR 1 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "AFR 2 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+#endif
+ egoCorrGauge1 = egocor1, "EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egocor2, "EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge3 = egocor3, "EGO Correction 3", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge4 = egocor4, "EGO Correction 4", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge5 = egocor5, "EGO Correction 5", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge6 = egocor6, "EGO Correction 6", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge7 = egocor7, "EGO Correction 7", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge8 = egocor8, "EGO Correction 8", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+#if CYL_12_16_SUPPORT
+gaugeCategory = "AFR/EGO inputs 9-16"
+#if NARROW_BAND_EGO
+;
+#elif LAMBDA
+ lambda9Gauge = lambda9, "Lambda 9", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda10Gauge = lambda10, "Lambda 10", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda11Gauge = lambda11, "Lambda 11", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda12Gauge = lambda12, "Lambda 12", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda13Gauge = lambda13, "Lambda 13", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda14Gauge = lambda14, "Lambda 14", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda15Gauge = lambda15, "Lambda 15", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda16Gauge = lambda16, "Lambda 16", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+#else
+ afr9Gauge = afr9, "Air:Fuel Ratio 9", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr10Gauge = afr10, "Air:Fuel Ratio 10", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr11Gauge = afr11, "Air:Fuel Ratio 11", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr12Gauge = afr12, "Air:Fuel Ratio 12", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr13Gauge = afr13, "Air:Fuel Ratio 13", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr14Gauge = afr14, "Air:Fuel Ratio 14", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr15Gauge = afr15, "Air:Fuel Ratio 15", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr16Gauge = afr16, "Air:Fuel Ratio 16", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+#endif
+ egoV9Gauge = egov9, "Exhaust Gas Oxygen 9", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV10Gauge = egov10, "Exhaust Gas Oxygen 10", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV11Gauge = egov11, "Exhaust Gas Oxygen 11", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV12Gauge = egov12, "Exhaust Gas Oxygen 12", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV13Gauge = egov13, "Exhaust Gas Oxygen 13", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV14Gauge = egov14, "Exhaust Gas Oxygen 14", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV15Gauge = egov15, "Exhaust Gas Oxygen 15", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV16Gauge = egov16, "Exhaust Gas Oxygen 16", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+
+gaugeCategory = "AFR/EGO calculations 9-16"
+ egoCorrGauge9 = egocor9, "EGO Correction 9", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge10 = egocor10, "EGO Correction 10", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge11 = egocor11, "EGO Correction 11", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge12 = egocor12, "EGO Correction 12", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge13 = egocor13, "EGO Correction 13", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge14 = egocor14, "EGO Correction 14", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge15 = egocor15, "EGO Correction 15", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge16 = egocor16, "EGO Correction 16", "%", 50, 150, 90, 99, 101, 110, 1, 1
+#endif
+
+gaugeCategory = "Generic sensor inputs"
+ sensor01Gauge = sensor01, { stringValue(sensor01Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor02Gauge = sensor02, { stringValue(sensor02Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor03Gauge = sensor03, { stringValue(sensor03Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor04Gauge = sensor04, { stringValue(sensor04Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor05Gauge = sensor05, { stringValue(sensor05Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor06Gauge = sensor06, { stringValue(sensor06Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor07Gauge = sensor07, { stringValue(sensor07Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor08Gauge = sensor08, { stringValue(sensor08Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor09Gauge = sensor09, { stringValue(sensor09Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor10Gauge = sensor10, { stringValue(sensor10Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor11Gauge = sensor11, { stringValue(sensor11Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor12Gauge = sensor12, { stringValue(sensor12Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor13Gauge = sensor13, { stringValue(sensor13Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor14Gauge = sensor14, { stringValue(sensor14Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor15Gauge = sensor15, { stringValue(sensor15Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor16Gauge = sensor16, { stringValue(sensor16Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+
+gaugeCategory = "CAN board inputs/outputs"
+ canin1_8Gauge = canin1_8, "CAN inputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout1_8Gauge = canout1_8, "CAN outputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout9_16Gauge = canout9_16, "CAN outputs 9-16", "", 0, 255, 255, 255, 255, 255,0, 0
+ canpwmin0Gauge = canpwmin0, "CAN PWMin 0", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin1Gauge = canpwmin1, "CAN PWMin 1", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin2Gauge = canpwmin2, "CAN PWMin 2", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin3Gauge = canpwmin3, "CAN PWMin 3", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+
+gaugeCategory = "X-Code dev"
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ status5sGauge = status5s, "Status 5 (signed)", "",-32767, 65535, 65535, 65535, 65535, 65535,0, 0
+ status6Gauge = status6, "Status 6", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status7Gauge = status7, "Status 7", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status8Gauge = status8, "Status 8", "", 0, 255, 255, 255, 255, 255, 0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop time", "us", 0, 10000, -1, -1, 1000, 6000, 0, 0
+ sd_filenum = sd_filenum, "SDcard file number", "", 0, 9999, 9999, 9999, 9999, 9999, 0 ,0
+ sd_error = sd_error, "SDcard error", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_status = sd_status, "SDcard status", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_phase = sd_phase, "SDcard phase", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ cel_statusGauge = cel_status, "CEL Status", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_status2Gauge = cel_status2, "CEL Status2", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_errorcodeGauge = cel_errorcode, "CEL Error code", "", 0, 32, 32, 32, 32, 32, 0, 0
+ loopGauge = loop, "Loop bits 1-3", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+; gauge2 = EAEGauge1
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoV1Gauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+ gauge8 = lostsyncGauge
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Data Lost", "Lost Data", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 32}, "VE1/2", "VE3/4", white, black, green, black
+ indicator = { status1 & 64}, "SPK1/2", "SPK3/4", white, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+ indicator = { status2 & 1}, "N2O 1 off", "N2O 1 on", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2 off", "N2O 2 on", white, black, green, black
+ indicator = { status2 & 4}, "No Launch", "Launch in", white, black, green, black
+ indicator = { status2 & 16}, "No Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black
+
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "3 step off", "3 step on", white, black, green, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 16}, "No 3 step", "3 step in", white, black, green, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "Launch Off", "Launch on", white, black, red, black
+
+ indicator = { status6 & 1}, "EGT warn", "EGT warn", white, black, red, black
+ indicator = { status6 & 2}, "EGT shutdown", "EGT shutdown", white, black, red, black
+ indicator = { status6 & 4}, "AFR warn", "AFR warn", white, black, red, black
+ indicator = { status6 & 8}, "AFR shutdown", "AFR shutdown", white, black, red, black
+ indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black
+ indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black
+ indicator = { status6 & 64}, "Fan", "Fan", white, black, green, black
+ indicator = { status6 & 128}, "MAPsample error!", "MAPsample error!", white, black, red, black
+
+ indicator = { status7 & 1}, "VVT1 err", "VVT1 err", white, black, red, black
+ indicator = { status7 & 2}, "VVT2 err", "VVT2 err", white, black, red, black
+ indicator = { status7 & 4}, "VVT3 err", "VVT3 err", white, black, red, black
+ indicator = { status7 & 8}, "VVT4 err", "VVT4 err", white, black, red, black
+ indicator = { status7 & 16}, "No Knock", "Knock", white, black, red, black
+ indicator = { status7 & 32}, "AC", "AC", white, black, green, black
+ indicator = { status7 & 64}, "Check Engine", "Check Engine", white, black, red, black
+ indicator = { status7 & 128}, "Limp mode", "Limp mode", white, black, red, black
+
+ indicator = { status8 & 4}, "W.I. low", "W.I. low!", white, black, red, black
+ indicator = { status8 & 8}, "PW4X", "PW4X", white, black, red, black
+ indicator = { status8 & 16}, "VSS launch L/O", "VSS launch L/O", white, black, red, black
+ indicator = { status8 & 32}, "VSS launch on", "VSS launch on", white, black, red, black
+
+ indicator = { sd_status & 1}, "No SD", "SD in", white, black, green, black
+ indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black
+ indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black
+ indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black
+
+ indicator = { (gammaEnrich < 70) }, "-", "Tune error", white, black, red, black
+
+#if PORT_STATUS
+ indicator = { porta0 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { porta1 }, "PORTA1", "PORTA1", white, black, green, black
+ indicator = { porta2 }, "PORTA2", "PORTA2", white, black, green, black
+ indicator = { porta3 }, "PORTA3", "PORTA3", white, black, green, black
+ indicator = { porta4 }, "PORTA4", "PORTA4", white, black, green, black
+ indicator = { porta5 }, "PORTA5", "PORTA5", white, black, green, black
+ indicator = { porta6 }, "PORTA6", "PORTA6", white, black, green, black
+ indicator = { porta7 }, "PORTA7", "PORTA7", white, black, green, black
+
+ indicator = { portb0 }, "PORTB0", "PORTB0", white, black, green, black
+ indicator = { portb1 }, "PORTB1", "PORTB1", white, black, green, black
+ indicator = { portb2 }, "PORTB2", "PORTB2", white, black, green, black
+ indicator = { portb3 }, "PORTB3", "PORTB3", white, black, green, black
+ indicator = { portb4 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portb5 }, "PORTB5", "PORTB5", white, black, green, black
+ indicator = { portb6 }, "PORTB6", "PORTB6", white, black, green, black
+ indicator = { portb7 }, "PORTB7", "PORTB7", white, black, green, black
+
+ indicator = { porte0 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { porte1 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { porte2 }, "PORTE2", "PORTE2", white, black, green, black
+ indicator = { porte4 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { porth6 }, "PORTH6", "PORTH6", white, black, green, black
+ indicator = { porth7 }, "PORTH7", "PORTH7", white, black, green, black
+
+ indicator = { portk0 }, "PORTK0", "PORTK0", white, black, green, black
+ indicator = { portk1 }, "PORTK1", "PORTK1", white, black, green, black
+ indicator = { portk2 }, "PORTK2", "PORTK2", white, black, green, black
+ indicator = { portk3 }, "PORTK3", "PORTK3", white, black, green, black
+ indicator = { portk7 }, "PORTK7", "PORTK7", white, black, green, black
+
+ indicator = { portj0 }, "PORTJ0", "PORTJ0", white, black, green, black
+ indicator = { portj1 }, "PORTJ1", "PORTJ1", white, black, green, black
+ indicator = { portm2 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portm3 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portm4 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portm5 }, "PORTM5", "PORTM5", white, black, green, black
+ indicator = { portj7 }, "PORTJ7", "PORTJ7", white, black, green, black
+
+ indicator = { portp2 }, "PORTP2", "PORTP2", white, black, green, black
+ indicator = { portp3 }, "PORTP3", "PORTP3", white, black, green, black
+ indicator = { portp4 }, "PORTP4", "PORTP4", white, black, green, black
+ indicator = { portp5 }, "PORTP5", "PORTP5", white, black, green, black
+ indicator = { portp6 }, "PORTP6", "PORTP6", white, black, green, black
+ indicator = { portp7 }, "PORTP7", "PORTP7", white, black, green, black
+
+ indicator = { portt0 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt1 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt2 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt3 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt4 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt5 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt6 }, "PORTT6", "PORTT6", white, black, green, black
+
+ indicator = { canin1_8 & 1 }, "CANIN1", "CANIN1", white, black, green, black
+ indicator = { canin1_8 & 2 }, "CANIN2", "CANIN2", white, black, green, black
+ indicator = { canin1_8 & 4 }, "CANIN3", "CANIN3", white, black, green, black
+ indicator = { canin1_8 & 8 }, "CANIN4", "CANIN4", white, black, green, black
+ indicator = { canin1_8 & 16 }, "CANIN5", "CANIN5", white, black, green, black
+ indicator = { canin1_8 & 32 }, "CANIN6", "CANIN6", white, black, green, black
+ indicator = { canin1_8 & 64 }, "CANIN7", "CANIN7", white, black, green, black
+ indicator = { canin1_8 & 128}, "CANIN8", "CANIN8", white, black, green, black
+#endif
+
+ indicator = { cel_status_map }, "MAP fault", "MAP fault", white, black, red, black ; 1
+ indicator = { cel_status_mat }, "MAT fault", "MAT fault", white, black, red, black ; 2
+ indicator = { cel_status_clt }, "CLT fault", "CLT fault", white, black, red, black ; 4
+ indicator = { cel_status_tps }, "TPS fault", "TPS fault", white, black, red, black ; 8
+ indicator = { cel_status_batt }, "BATT fault", "BATT fault", white, black, red, black ; 16
+ indicator = { cel_status_afr0 }, "AFR0 fault", "AFR0 fault", white, black, red, black ; 32
+ indicator = { cel_status_sync }, "SYNC fault", "SYNC fault", white, black, red, black ; 64
+ indicator = { cel_status_egt }, "EGT fault", "EGT fault", white, black, red, black ; 128
+ indicator = { cel_status_flex }, "Flex fault", "Flex fault", white, black, red, black ;256
+ indicator = { cel_status_maf }, "MAF fault", "MAF fault", white, black, red, black ; 512
+ indicator = { cel_status_knock }, "Knock fault", "Knock fault", white, black, red, black ; 1024
+ indicator = { cel_status_cam }, "Cam fault", "Cam fault", white, black, red, black ; 2048
+ indicator = { cel_status_oil}, "Oil fault", "Oil fault", white, black, red, black ; 4096
+ indicator = { cel_status_fp}, "Fuel press.", "Fuel press.", white, black, red, black ; 4096
+ indicator = { cel_status_egtshut}, "CEL EGT shutdown", "CEL EGT shutdown", white, black, red, black ; 16384
+ indicator = { cel_status_afrshut}, "CEL AFR shutdown", "CEL AFR shutdown", white, black, red, black ; 32768
+
+ indicator = { cel_status2_winj}, "CEL W.Inj low", "CEL W.Inj low", white, black, red, black ; 1
+ indicator = { cel_status2_shutd}, "Safety shutdown", "Safety shutdown", white, black, red, black ; 2
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+ coolantBar = {cltlowlim}, {clthighlim}
+ matBar = -40, {mathigh}
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, {rpmhigh}
+ throttleBar = 0, 100
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoV1Gauge, egoV1Gauge, egoV1Gauge, egoV1Gauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge1, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = egoCorrGauge2, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+ ochBlockSize = 512 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+ ochGetCommand = "r\$tsCanId\x07%2o%2c" ; leave this alone
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ scatteredOffsetArray = qfrtfielddata
+ scatteredOchGetCommand = "g"
+ scatteredGetEnabled = { scatterRuntimeEnabled && (tsLocalCanId == tsCanId) }
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+#if PW_4X
+ pulseWidth1 = scalar, U16, 2, "ms", 0.004, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.004, 0.0
+#else
+ pulseWidth1 = scalar, U16, 2, "ms", 0.001, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.001, 0.0
+#endif
+ pulseWidth = { pulseWidth1 }, "ms" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+#if NARROW_BAND_EGO
+ afrtgt1 = scalar, U08, 12, "Volts", 0.00489, 0.0
+ afrtgt2 = scalar, U08, 13, "Volts", 0.00489, 0.0
+#elif LAMBDA
+ afrtgt1raw = scalar, U08, 12, "Lambda", 0.1, 0.0
+ afrtgt2raw = scalar, U08, 13, "Lambda", 0.1, 0.0
+#else
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+#endif
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1_old = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2_old = scalar, S16, 30, "AFR", 0.100, 0.0
+ knock = scalar, S16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.1000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.1000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "%", 0.392, 0.0
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.1000, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.1000, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Correcton based on percent alcohol in fuel.
+ sd_status = scalar, U08, 70, "", 1.0, 0.0
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ status6 = scalar, U08, 82, "", 1.0, 0.0
+ status7 = scalar, U08, 83, "", 1.0, 0.0
+ status5 = scalar, U16, 84, "", 1, 0 ; istatus5
+ status5s = scalar, S16, 84, "", 1, 0 ; istatus5
+ cel_status = scalar, U16, 86, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status_map = bits, U08, 87, [0:0] ; low byte
+ cel_status_mat = bits, U08, 87, [1:1]
+ cel_status_clt = bits, U08, 87, [2:2]
+ cel_status_tps = bits, U08, 87, [3:3]
+ cel_status_batt = bits, U08, 87, [4:4]
+ cel_status_afr0 = bits, U08, 87, [5:5]
+ cel_status_sync = bits, U08, 87, [6:6]
+ cel_status_egt = bits, U08, 87, [7:7]
+ cel_status_flex = bits, U08, 86, [0:0] ; high byte
+ cel_status_maf = bits, U08, 86, [1:1] ; high byte
+ cel_status_knock = bits, U08, 86, [2:2] ; high byte
+ cel_status_cam = bits, U08, 86, [3:3] ; high byte
+ cel_status_oil = bits, U08, 86, [4:4] ; high byte
+ cel_status_fp = bits, U08, 86, [5:5] ; high byte
+ cel_status_egtshut= bits, U08, 86, [6:6] ; high byte
+ cel_status_afrshut= bits, U08, 86, [7:7] ; high byte
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, "%", 0.100, 0.0
+ ignload2 = scalar, S16, 92, "%", 0.100, 0.0
+ synccnt = scalar, U08, 94, "", 1, 0
+ syncreason = scalar, U08, 95, "", 1.0, 0.0
+ wallfuel1 = scalar, U32, 96, "uS", 0.010, 0.0
+ wallfuel2 = scalar, U32, 100, "uS", 1.000, 0.0
+ sensor01 = scalar, S16, 104, "", 0.1000, 0.0
+ sensor02 = scalar, S16, 106, "", 0.1000, 0.0
+ sensor03 = scalar, S16, 108, "", 0.1000, 0.0
+ sensor04 = scalar, S16, 110, "", 0.1000, 0.0
+ sensor05 = scalar, S16, 112, "", 0.1000, 0.0
+ sensor06 = scalar, S16, 114, "", 0.1000, 0.0
+ sensor07 = scalar, S16, 116, "", 0.1000, 0.0
+ sensor08 = scalar, S16, 118, "", 0.1000, 0.0
+ sensor09 = scalar, S16, 120, "", 0.1000, 0.0
+ sensor10 = scalar, S16, 122, "", 0.1000, 0.0
+ sensor11 = scalar, S16, 124, "", 0.1000, 0.0
+ sensor12 = scalar, S16, 126, "", 0.1000, 0.0
+ sensor13 = scalar, S16, 128, "", 0.1000, 0.0
+ sensor14 = scalar, S16, 130, "", 0.1000, 0.0
+ sensor15 = scalar, S16, 132, "", 0.1000, 0.0
+ sensor16 = scalar, S16, 134, "", 0.1000, 0.0
+ canin1_8 = scalar, U08, 136, "", 1.000, 0.0
+ canout1_8 = scalar, U08, 137, "", 1.000, 0.0
+ canout9_16 = scalar, U08, 138, "", 1.000, 0.0
+ boostduty = scalar, U08, 139 , "%", 1.0, 0.0
+#if PW_4X
+ n2o_addfuel = scalar, S16, 140, "ms", 0.004, 0
+#else
+ n2o_addfuel = scalar, S16, 140, "ms", 0.001, 0
+#endif
+ n2o_retard = scalar, S16, 142, "deg", 0.1, 0
+#if PW_4X
+ pwseq1 = scalar, U16, 144, "ms", 0.004, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.004, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.004, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.004, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.004, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.004, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.004, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.004, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.004, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.004, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.004, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.004, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.004, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.004, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.004, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.004, 0.0
+#else
+ pwseq1 = scalar, U16, 144, "ms", 0.001, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.001, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.001, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.001, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.001, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.001, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.001, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.001, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.001, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.001, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.001, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.001, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.001, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.001, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.001, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.001, 0.0
+#endif
+ nitrous1_duty = scalar, U08, 176, "%", 1, 0
+ nitrous2_duty = scalar, U08, 177, "%", 1, 0
+#if CELSIUS
+ egt1 = scalar, S16, 178, "°C", 0.05555, -320
+ egt2 = scalar, S16, 180, "°C", 0.05555, -320
+ egt3 = scalar, S16, 182, "°C", 0.05555, -320
+ egt4 = scalar, S16, 184, "°C", 0.05555, -320
+ egt5 = scalar, S16, 186, "°C", 0.05555, -320
+ egt6 = scalar, S16, 188, "°C", 0.05555, -320
+ egt7 = scalar, S16, 190, "°C", 0.05555, -320
+ egt8 = scalar, S16, 192, "°C", 0.05555, -320
+ egt9 = scalar, S16, 194, "°C", 0.05555, -320
+ egt10 = scalar, S16, 196, "°C", 0.05555, -320
+ egt11 = scalar, S16, 198, "°C", 0.05555, -320
+ egt12 = scalar, S16, 200, "°C", 0.05555, -320
+ egt13 = scalar, S16, 202, "°C", 0.05555, -320
+ egt14 = scalar, S16, 204, "°C", 0.05555, -320
+ egt15 = scalar, S16, 206, "°C", 0.05555, -320
+ egt16 = scalar, S16, 208, "°C", 0.05555, -320
+#else
+ egt1 = scalar, S16, 178, "°F", 0.1, 0
+ egt2 = scalar, S16, 180, "°F", 0.1, 0
+ egt3 = scalar, S16, 182, "°F", 0.1, 0
+ egt4 = scalar, S16, 184, "°F", 0.1, 0
+ egt5 = scalar, S16, 186, "°F", 0.1, 0
+ egt6 = scalar, S16, 188, "°F", 0.1, 0
+ egt7 = scalar, S16, 190, "°F", 0.1, 0
+ egt8 = scalar, S16, 192, "°F", 0.1, 0
+ egt9 = scalar, S16, 194, "°F", 0.1, 0
+ egt10 = scalar, S16, 196, "°F", 0.1, 0
+ egt11 = scalar, S16, 198, "°F", 0.1, 0
+ egt12 = scalar, S16, 200, "°F", 0.1, 0
+ egt13 = scalar, S16, 202, "°F", 0.1, 0
+ egt14 = scalar, S16, 204, "°F", 0.1, 0
+ egt15 = scalar, S16, 206, "°F", 0.1, 0
+ egt16 = scalar, S16, 208, "°F", 0.1, 0
+#endif
+ maf = scalar, U16, 210, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ canpwmin0 = scalar, U16, 212, "", 1.000, 0.0
+ canpwmin1 = scalar, U16, 214, "", 1.000, 0.0
+ canpwmin2 = scalar, U16, 216, "", 1.000, 0.0
+ canpwmin3 = scalar, U16, 218, "", 1.000, 0.0
+ fuelflow = scalar, U16, 220, "cc/min", 1, 0.0
+ fuelcons = scalar, U16, 222, "l/km", 1, 0.0
+ EAEFuelCorr2 = scalar, U16, 224 , "%", 1.0, 0.0
+ tpsADC = scalar, U16, 226, "ADC", 1, 0 ; REAL for calibrator
+ eaeload1 = scalar, S16, 228, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.0
+ afrload1 = scalar, S16, 230, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1000, 0.0
+ gear = scalar, U08, 232, "", 1, 0
+ timing_err = scalar, S08, 233, "%", 1, 0 ; accuracy of timing prediction
+ RPMdot = scalar, S16, 234, "rpm/sec", 10, 0
+ vss1dot = scalar, S16, 236, "ms-2", 0.1, 0
+ vss2dot = scalar, S16, 238, "ms-2", 0.1, 0
+ accelx = scalar, S16, 240, "ms-2", 0.001, 0
+ accely = scalar, S16, 242, "ms-2", 0.001, 0
+ accelz = scalar, S16, 244, "ms-2", 0.001, 0
+ duty_pwm_a = scalar, U08, 246, "%", 1, 0
+ duty_pwm_b = scalar, U08, 247, "%", 1, 0
+ duty_pwm_c = scalar, U08, 248, "%", 1, 0
+ duty_pwm_d = scalar, U08, 249, "%", 1, 0
+ duty_pwm_e = scalar, U08, 250, "%", 1, 0
+ duty_pwm_f = scalar, U08, 251, "%", 1, 0
+ afr1 = scalar, U08, 252, "AFR", 0.1, 0.0
+ afr2 = scalar, U08, 253, "AFR", 0.1, 0.0
+ afr3 = scalar, U08, 254, "AFR", 0.1, 0.0
+ afr4 = scalar, U08, 255, "AFR", 0.1, 0.0
+ afr5 = scalar, U08, 256, "AFR", 0.1, 0.0
+ afr6 = scalar, U08, 257, "AFR", 0.1, 0.0
+ afr7 = scalar, U08, 258, "AFR", 0.1, 0.0
+ afr8 = scalar, U08, 259, "AFR", 0.1, 0.0
+ afr9 = scalar, U08, 260, "AFR", 0.1, 0.0
+ afr10 = scalar, U08, 261, "AFR", 0.1, 0.0
+ afr11 = scalar, U08, 262, "AFR", 0.1, 0.0
+ afr12 = scalar, U08, 263, "AFR", 0.1, 0.0
+ afr13 = scalar, U08, 264, "AFR", 0.1, 0.0
+ afr14 = scalar, U08, 265, "AFR", 0.1, 0.0
+ afr15 = scalar, U08, 266, "AFR", 0.1, 0.0
+ afr16 = scalar, U08, 267, "AFR", 0.1, 0.0
+ egov1 = scalar, U16, 268, "V", 0.00489, 0.0
+ egov2 = scalar, U16, 270, "V", 0.00489, 0.0
+ egov3 = scalar, U16, 272, "V", 0.00489, 0.0
+ egov4 = scalar, U16, 274, "V", 0.00489, 0.0
+ egov5 = scalar, U16, 276, "V", 0.00489, 0.0
+ egov6 = scalar, U16, 278, "V", 0.00489, 0.0
+ egov7 = scalar, U16, 280, "V", 0.00489, 0.0
+ egov8 = scalar, U16, 282, "V", 0.00489, 0.0
+ egov9 = scalar, U16, 284, "V", 0.00489, 0.0
+ egov10 = scalar, U16, 286, "V", 0.00489, 0.0
+ egov11 = scalar, U16, 288, "V", 0.00489, 0.0
+ egov12 = scalar, U16, 290, "V", 0.00489, 0.0
+ egov13 = scalar, U16, 292, "V", 0.00489, 0.0
+ egov14 = scalar, U16, 294, "V", 0.00489, 0.0
+ egov15 = scalar, U16, 296, "V", 0.00489, 0.0
+ egov16 = scalar, U16, 298, "V", 0.00489, 0.0
+ egocor1 = scalar, S16, 300, "%", 0.1000, 0.0
+ egocor2 = scalar, S16, 302, "%", 0.1000, 0.0
+ egocor3 = scalar, S16, 304, "%", 0.1000, 0.0
+ egocor4 = scalar, S16, 306, "%", 0.1000, 0.0
+ egocor5 = scalar, S16, 308, "%", 0.1000, 0.0
+ egocor6 = scalar, S16, 310, "%", 0.1000, 0.0
+ egocor7 = scalar, S16, 312, "%", 0.1000, 0.0
+ egocor8 = scalar, S16, 314, "%", 0.1000, 0.0
+ egocor9 = scalar, S16, 316, "%", 0.1000, 0.0
+ egocor10 = scalar, S16, 318, "%", 0.1000, 0.0
+ egocor11 = scalar, S16, 320, "%", 0.1000, 0.0
+ egocor12 = scalar, S16, 322, "%", 0.1000, 0.0
+ egocor13 = scalar, S16, 324, "%", 0.1000, 0.0
+ egocor14 = scalar, S16, 326, "%", 0.1000, 0.0
+ egocor15 = scalar, S16, 328, "%", 0.1000, 0.0
+ egocor16 = scalar, S16, 330, "%", 0.1000, 0.0
+ stream_level = scalar, U08, 332, "", 1,0
+ water_duty = scalar, U08, 333, "%", 1, 0
+ dwell_trl = scalar, U16, 334, "ms", 0.1000, 0.0
+ vss1 = scalar, U16, 336, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss2 = scalar, U16, 338, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss1_ms_1 = scalar, U16, 336, "ms-1", 0.1, 0.0 ; see calcs converting this raw number into kph or mph
+ vss2_ms_1 = scalar, U16, 338, "ms-1", 0.1, 0.0
+ ss1 = scalar, U16, 340, "RPM", 10.000, 0.0 ; now in steps of 10 rpm
+ ss2 = scalar, U16, 342, "RPM", 10.000, 0.0
+ nitrous_timer = scalar, U16, 344, "s", 0.001, 0
+ sd_filenum = scalar, U16, 346, "", 1, 0
+ sd_error = scalar, U08, 348, "", 1, 0
+ sd_phase = scalar, U08, 349, "", 1, 0
+ boostduty2 = scalar, U08, 350 , "%", 1.0, 0.0
+ status8 = scalar, U08, 351, "", 1.0, 0.0
+ vvt_ang1 = scalar, S16, 352, "deg", 0.100, 0.0
+ vvt_ang2 = scalar, S16, 354, "deg", 0.100, 0.0
+ vvt_ang3 = scalar, S16, 356, "deg", 0.100, 0.0
+ vvt_ang4 = scalar, S16, 358, "deg", 0.100, 0.0
+ inj_timing_pri = scalar, S16, 360, "deg", 0.100, 0.0
+ inj_timing_sec = scalar, S16, 362, "deg", 0.100, 0.0
+ vvt_target1 = scalar, S16, 364, "deg", 0.100, 0.0
+ vvt_target2 = scalar, S16, 366, "deg", 0.100, 0.0
+ vvt_target3 = scalar, S16, 368, "deg", 0.100, 0.0
+ vvt_target4 = scalar, S16, 370, "deg", 0.100, 0.0
+ vvt_duty1 = scalar, U08, 372 , "%", 0.392, 0.0
+ vvt_duty2 = scalar, U08, 373 , "%", 0.392, 0.0
+ vvt_duty3 = scalar, U08, 374 , "%", 0.392, 0.0
+ vvt_duty4 = scalar, U08, 375 , "%", 0.392, 0.0
+ fuel_pct = scalar, U16, 376, "%", 0.1000, 0.0
+#if CELSIUS
+ fuel_temp1 = scalar, S16, 378, "°C", 0.05555, -320.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#else
+ fuel_temp1 = scalar, S16, 378, "°F", 0.100, 0.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#endif
+ tps_accel = scalar, S16, 382, "%", 0.1000, 0.0
+ map_accel = scalar, S16, 384, "%", 0.1000, 0.0
+ total_accel = scalar, S16, 386, "%", 0.1000, 0.0
+ knock_cyl01 = scalar, U08, 388, "%", 0.4, 0
+ knock_cyl02 = scalar, U08, 389, "%", 0.4, 0
+ knock_cyl03 = scalar, U08, 390, "%", 0.4, 0
+ knock_cyl04 = scalar, U08, 391, "%", 0.4, 0
+ knock_cyl05 = scalar, U08, 392, "%", 0.4, 0
+ knock_cyl06 = scalar, U08, 393, "%", 0.4, 0
+ knock_cyl07 = scalar, U08, 394, "%", 0.4, 0
+ knock_cyl08 = scalar, U08, 395, "%", 0.4, 0
+ knock_cyl09 = scalar, U08, 396, "%", 0.4, 0
+ knock_cyl10 = scalar, U08, 397, "%", 0.4, 0
+ knock_cyl11 = scalar, U08, 398, "%", 0.4, 0
+ knock_cyl12 = scalar, U08, 399, "%", 0.4, 0
+ knock_cyl13 = scalar, U08, 400, "%", 0.4, 0
+ knock_cyl14 = scalar, U08, 401, "%", 0.4, 0
+ knock_cyl15 = scalar, U08, 402, "%", 0.4, 0
+ knock_cyl16 = scalar, U08, 403, "%", 0.4, 0
+ launch_timer = scalar, U16, 404, "s", 0.001, 0
+ launch_retard = scalar, S16, 406, "deg", 0.1, 0
+ maf_volts = scalar, U16, 408, "V", 0.001, 0.0
+ porta = scalar, U08, 410, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porta0 = bits, U08, 410, [0:0]
+ porta1 = bits, U08, 410, [1:1]
+ porta2 = bits, U08, 410, [2:2]
+ porta3 = bits, U08, 410, [3:3]
+ porta4 = bits, U08, 410, [4:4]
+ porta5 = bits, U08, 410, [5:5]
+ porta6 = bits, U08, 410, [6:6]
+ porta7 = bits, U08, 410, [7:7]
+
+ portb = scalar, U08, 411, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portb0 = bits, U08, 411, [0:0]
+ portb1 = bits, U08, 411, [1:1]
+ portb2 = bits, U08, 411, [2:2]
+ portb3 = bits, U08, 411, [3:3]
+ portb4 = bits, U08, 411, [4:4]
+ portb5 = bits, U08, 411, [5:5]
+ portb6 = bits, U08, 411, [6:6]
+ portb7 = bits, U08, 411, [7:7]
+
+ porteh = scalar, U08, 412, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porte0 = bits, U08, 412, [0:0]
+ porte1 = bits, U08, 412, [1:1]
+ porte2 = bits, U08, 412, [2:2]
+ porte4 = bits, U08, 412, [4:4]
+ porth6 = bits, U08, 412, [6:6]
+ porth7 = bits, U08, 412, [7:7]
+
+ portk = scalar, U08, 413, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portk0 = bits, U08, 413, [0:0]
+ portk1 = bits, U08, 413, [1:1]
+ portk2 = bits, U08, 413, [2:2]
+ portk3 = bits, U08, 413, [3:3]
+ portk7 = bits, U08, 413, [7:7]
+
+ portmj = scalar, U08, 414, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portj0 = bits, U08, 414, [0:0]
+ portj1 = bits, U08, 414, [1:1]
+ portm2 = bits, U08, 414, [2:2]
+ portm3 = bits, U08, 414, [3:3]
+ portm4 = bits, U08, 414, [4:4]
+ portm5 = bits, U08, 414, [5:5]
+ portj7 = bits, U08, 414, [7:7]
+
+ portp = scalar, U08, 415, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portp2 = bits, U08, 415, [2:2]
+ portp3 = bits, U08, 415, [3:3]
+ portp4 = bits, U08, 415, [4:4]
+ portp5 = bits, U08, 415, [5:5]
+ portp6 = bits, U08, 415, [6:6]
+ portp7 = bits, U08, 415, [7:7]
+
+ portt = scalar, U08, 416, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portt0 = bits, U08, 416, [0:0]
+ portt1 = bits, U08, 416, [1:1]
+ portt2 = bits, U08, 416, [2:2]
+ portt3 = bits, U08, 416, [3:3]
+ portt4 = bits, U08, 416, [4:4]
+ portt5 = bits, U08, 416, [5:5]
+ portt6 = bits, U08, 416, [6:6]
+ cel_errorcode = scalar, U08, 417, "bit", 1, 0.0
+ boost_targ_1 = scalar, S16, 418, "%", 0.1, 0
+ boost_targ_2 = scalar, S16, 420, "%", 0.1, 0
+#if CELSIUS
+ airtemp = scalar, S16, 422, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 422, "°F", 0.100, 0.0
+#endif
+ looptime = scalar, U16, 424, "us", 1.0, 0.0
+ vss3 = scalar, U16, 426, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss4 = scalar, U16, 428, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss3_ms_1 = scalar, U16, 426, "ms-1", 0.1, 0.0
+ vss4_ms_1 = scalar, U16, 428, "ms-1", 0.1, 0.0
+ fuel_press1 = scalar, S16, 430, "kPa", 0.100, 0.0
+ fuel_press2 = scalar, S16, 432, "kPa", 0.100, 0.0
+ cl_idle_targ_rpm = scalar, U16, 434, "rpm", 1, 0
+ fp_duty = scalar, U08, 436, "%", 0.392, 0.0
+ alt_duty = scalar, U08, 437, "%", 1, 0.0
+ alt_freq = scalar, U08, 437, "Hz", 1, 0.0
+ load_duty = scalar, U08, 438, "%", 1, 0.0
+ alt_targv = scalar, U08, 439, "V", 0.100, 0.0
+ batt_curr = scalar, S16, 440, "A", 0.1, 0.0
+ fueltemp_cor = scalar, S16, 442, "%", 0.100, 0.0
+ fuelpress_cor = scalar, S16, 444, "%", 0.100, 0.0
+ ltt_cor = scalar, S08, 446, "%", 0.100, 0.0
+; engine_state_
+ tc_retard = scalar, S16, 448, "deg", 0.100, 0.0
+ cel_retard = scalar, S16, 450, "deg", 0.100, 0.0
+ fc_retard = scalar, S16, 452, "deg", 0.100, 0.0
+ ext_advance = scalar, S16, 454, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 456, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 458, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 460, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 462, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 464, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 466, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 468, "deg", 0.100, 0.0
+ adv4 = scalar, S16, 470, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 472, "deg", 0.100, 0.0
+ als_timing = scalar, S16, 474, "deg", 0.100, 0.0
+#if PW_4X
+ als_addfuel = scalar, S16, 476, "ms", 0.004, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.004, 0.0
+#else
+ als_addfuel = scalar, S16, 476, "ms", 0.001, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.001, 0.0
+#endif
+ launch_timing = scalar, S16, 480, "deg", 0.100, 0.0
+ step3_timing = scalar, S16, 482, "deg", 0.100, 0.0
+ launchvss_retard = scalar, S16, 484, "deg", 0.100, 0.0
+; cel_status2_xx = bits, U08, 486, [0:0] ; high byte
+ cel_status2 = scalar, U16, 486, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status2_winj = bits, U08, 487, [0:0] ; low byte
+ cel_status2_shutd = bits, U08, 487, [1:1]
+ gps_latdeg = scalar, S08, 488, "", 1,0
+ gps_latmin = scalar, U08, 489, "", 1,0
+ gps_latmmin = scalar, U16, 490, "", 1,0
+ gps_londeg = scalar, U08, 492, "", 1,0
+ gps_lonmin = scalar, U08, 493, "", 1,0
+ gps_lonmmin = scalar, U16, 494, "", 1,0
+ gps_outstatus = scalar, U08, 496, "", 1,0
+ gps_altk = scalar, S08, 497, "", 1,0
+ gps_altm = scalar, S16, 498, "", 0.1,0
+ gps_speed = scalar, U16, 500, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ gps_speed_ms_1 = scalar, U16, 500, "ms-1", 0.1, 0.0
+ gps_course = scalar, U16, 502, "", 0.1,0
+ generic_pid_duty_a = scalar, U08, 504, "%", 0.392, 0.0
+ generic_pid_duty_b = scalar, U08, 505, "%", 0.392, 0.0
+ tc_slipxtime = scalar, U16, 506, "", 1,0
+ loop = scalar, U08, 508, "", 1, 0
+ can_error_cnt = scalar, U08, 509, "", 1,0
+ can_error = scalar, U16, 510, "", 1,0
+; can_error_rxovr = bits, U08, 510, [0:0]
+; can_error_rxwrn = bits, U08, 510, [0:0]
+; can_error_rxerr = bits, U08, 510, [0:0]
+; can_error_txwrn = bits, U08, 510, [0:0]
+; can_error_txerr = bits, U08, 510, [0:0]
+; can_error_pass = bits, U08, 510, [0:0]
+; can_error_oor = bits, U08, 510, [0:0]
+; can_error_pass2 = bits, U08, 510, [0:0]
+
+;very nearly out of space. 512+ requires firmware changes
+;---------------
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ cycleTime1 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts1 = { nCylinders/divider}
+ altDiv1 = { alternate ? 2 : 1 }
+ dcfactor1 = { (sequential == 0) ? nSquirts1/altDiv1 : ( (sequential == 1) ? 2 : 1) }
+ dutyCycle1 = { cycleTime1 ? (100.0*dcfactor1*pulseWidth1/cycleTime1) : 0}, "%"
+
+ cycleTime2 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ altDiv2 = { alternate ? 2 : 1 } ; ought to look at staging parameters too
+ dcfactor2a = { (sequential == 0) ? nSquirts2/altDiv2 : ( (sequential == 1) ? 2 : 1) } ; ought to look at staging parameters too
+ dcfactor2b = { (staged_first_param && staged_extended_opts_use_v3) ? 1 : dcfactor2a }
+ dutyCycle2 = { cycleTime2 ? (100.0*dcfactor2b*pulseWidth2/cycleTime2) : 0}, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+ afr1err = { egov1 - afrtgt1 }
+ afr2err = { egov2 - afrtgt2 }
+#elif LAMBDA
+ lambda1 = { afr1 / stoich }, "Lambda"
+ lambda2 = { afr2 / stoich }, "Lambda2"
+ lambda3 = { afr3 / stoich }, "Lambda3"
+ lambda4 = { afr4 / stoich }, "Lambda4"
+ lambda5 = { afr5 / stoich }, "Lambda5"
+ lambda6 = { afr6 / stoich }, "Lambda6"
+ lambda7 = { afr7 / stoich }, "Lambda7"
+ lambda8 = { afr8 / stoich }, "Lambda8"
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+ afrtgt1 = { afrtgt1raw / stoich * (egoType == 2) } ; return zero if NB because of mixed units with target in volts
+ afrtgt2 = { afrtgt2raw / stoich * (egoType == 2) }
+ afr1err = { (afr1 - afrtgt1raw) / stoich * (egoType == 2)}
+ afr2err = { (afr2 - afrtgt2raw) / stoich * (egoType == 2)}
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+ afr1err = { afr1 - afrtgt1 }
+ afr2err = { afr2 - afrtgt2 }
+#endif
+
+ pwma_load = { getChannelValueByOffset( pwm_opt_load_a_offset ) }
+ pwmb_load = { getChannelValueByOffset( pwm_opt_load_b_offset ) }
+ pwmc_load = { getChannelValueByOffset( pwm_opt_load_c_offset ) }
+ pwmd_load = { getChannelValueByOffset( pwm_opt_load_d_offset ) }
+ pwme_load = { getChannelValueByOffset( pwm_opt_load_e_offset ) }
+ pwmf_load = { getChannelValueByOffset( pwm_opt_load_f_offset ) }
+ maxafrload = { (maxafr_opt1_load & 1) ? tps : map }
+
+ vvt_load = { (vvt_opt7_yaxis == 0) ? fuelload : ((vvt_opt7_yaxis == 1) ? map : ( (vvt_opt7_yaxis == 2) ? (map*100/barometer) : ((vvt_opt7_yaxis == 3) ? tps : ((vvt_opt7_yaxis == 4) ? mafload : fuelload ) ) ) ) }
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+; calculate instantaneous economy from fuel flow (not calculated in firmware at this time)
+ economy_l_km = { vss1_ms_1 ? (fuelflow / (vss1_ms_1 * 60)) : 0 }
+; economy_mpg_us = { (1 / economy_l_km) * 3.800 / 1.609344 }
+ economy_mpg_us = { vss1_ms_1 ? (2.361 / economy_l_km) : 0 }
+ economy_mpg_uk = { vss1_ms_1 ? (2.825 / economy_l_km) : 0 }
+ economy_l_100km = { economy_l_km * 100 }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+ maf_freq = { MAFOption_t ? (maf_freq0 + ((maf_freq1 - maf_freq0) * maf_volts / 5)) : 0 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;fuel pressures
+ fuel_press1_psi = {fuel_press1 * 0.147 }, "psi"
+ fuel_press2_psi = {fuel_press2 * 0.147 }, "psi"
+ fuel_press1_bar = {fuel_press1 / 101.35 }, "bar"
+ fuel_press2_bar = {fuel_press2 / 101.35 }, "bar"
+
+ msToPrefUnitsScale = { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, ""
+
+ gps_latsec = { 60 * gps_latmmin / 10000 }
+ gps_lonsec = { 60 * gps_lonmmin / 10000 }
+ gps_alt = { gps_altk * 1000 + gps_altm }
+ gps_latitude = { gps_latdeg + (gps_latmin / 60) + (gps_latsec / 3600) }
+ gps_long = { gps_londeg + (gps_lonmin / 60) + (gps_lonsec / 3600) }
+ gps_lonEW = { (gps_outstatus & 1) ? 1 : 0 }
+ gps_longitude = { gps_lonEW ? 0-gps_long : gps_long } ; the 0 is redundant, but causes a TS error otherwise
+
+ generic_pid_load_a = { getChannelValueByOffset( generic_pid_load_offset_a ) }
+ generic_pid_load_b = { getChannelValueByOffset( generic_pid_load_offset_b ) }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = tpsADC, "TPSADC", int, "%d" ; for debug
+ entry = maf, "MAF", float, "%.2f", { MAFOption || MAFOption_t }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption || MAFOption_t }
+ entry = maf_volts, "MAF volts", float, "%.3f", { MAFOption }
+ entry = maf_freq, "MAF Freq", int, "%d", { MAFOption_t }
+#if NARROW_BAND_EGO
+ entry = egov1 , "O2", float, "%.3f", {egonum > 0}
+ entry = egov2 , "O2 #2", float, "%.3f", {egonum > 1}
+ entry = egov3 , "O2 #3", float, "%.3f", {egonum > 2}
+ entry = egov4 , "O2 #4", float, "%.3f", {egonum > 3}
+ entry = egov5 , "O2 #5", float, "%.3f", {egonum > 4}
+ entry = egov6 , "O2 #6", float, "%.3f", {egonum > 5}
+ entry = egov7 , "O2 #7", float, "%.3f", {egonum > 6}
+ entry = egov8 , "O2 #8", float, "%.3f", {egonum > 7}
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f", {egonum > 0}
+ entry = lambda2, "Lambda2", float, "%.3f", {egonum > 1}
+ entry = lambda3, "Lambda3", float, "%.3f", {egonum > 2}
+ entry = lambda4, "Lambda4", float, "%.3f", {egonum > 3}
+ entry = lambda5, "Lambda5", float, "%.3f", {egonum > 4}
+ entry = lambda6, "Lambda6", float, "%.3f", {egonum > 5}
+ entry = lambda7, "Lambda7", float, "%.3f", {egonum > 6}
+ entry = lambda8, "Lambda8", float, "%.3f", {egonum > 7}
+#else
+ entry = afr1, "AFR", float, "%.2f", {egonum > 0}
+ entry = afr2, "AFR2", float, "%.2f", {egonum > 1}
+ entry = afr3, "AFR3", float, "%.2f", {egonum > 2}
+ entry = afr4, "AFR4", float, "%.2f", {egonum > 3}
+ entry = afr5, "AFR5", float, "%.2f", {egonum > 4}
+ entry = afr6, "AFR6", float, "%.2f", {egonum > 5}
+ entry = afr7, "AFR7", float, "%.2f", {egonum > 6}
+ entry = afr8, "AFR8", float, "%.2f", {egonum > 7}
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egocor1, "EGO cor1", int, "%.1f"
+ entry = egocor2, "EGO cor2", int, "%.1f", {egonum > 1}
+ entry = egocor3, "EGO cor3", int, "%.1f", {egonum > 2}
+ entry = egocor4, "EGO cor4", int, "%.1f", {egonum > 3}
+ entry = egocor5, "EGO cor5", int, "%.1f", {egonum > 4}
+ entry = egocor6, "EGO cor6", int, "%.1f", {egonum > 5}
+ entry = egocor7, "EGO cor7", int, "%.1f", {egonum > 6}
+ entry = egocor8, "EGO cor8", int, "%.1f", {egonum > 7}
+
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+ entry = accEnrichMS, "Fuel: Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%.1f"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "Duty Cycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%.1f"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "Duty Cycle2", float, "%.1f"
+
+ entry = pwseq1, "Seq PW1", float, "%.3f", { sequential }
+ entry = pwseq2, "Seq PW2", float, "%.3f", { sequential }
+ entry = pwseq3, "Seq PW3", float, "%.3f", { sequential }
+ entry = pwseq4, "Seq PW4", float, "%.3f", { sequential }
+ entry = pwseq5, "Seq PW5", float, "%.3f", { sequential }
+ entry = pwseq6, "Seq PW6", float, "%.3f", { sequential }
+ entry = pwseq7, "Seq PW7", float, "%.3f", { sequential }
+ entry = pwseq8, "Seq PW8", float, "%.3f", { sequential }
+#if CYL_12_16_SUPPORT
+ entry = pwseq9, "Seq PW9", float, "%.3f", { sequential }
+ entry = pwseq10, "Seq PW10", float, "%.3f", { sequential }
+ entry = pwseq11, "Seq PW11", float, "%.3f", { sequential }
+ entry = pwseq12, "Seq PW12", float, "%.3f", { sequential }
+ entry = pwseq13, "Seq PW13", float, "%.3f", { sequential }
+ entry = pwseq14, "Seq PW14", float, "%.3f", { sequential }
+ entry = pwseq15, "Seq PW15", float, "%.3f", { sequential }
+ entry = pwseq16, "Seq PW16", float, "%.3f", { sequential }
+#endif
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = knock, "Knock in", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = tc_retard, "SPK: Traction retard", float, "%.1f"
+ entry = cel_retard, "SPK: CEL retard", float, "%.1f"
+ entry = fc_retard, "SPK: Fuel cut retard", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance,"SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = adv4, "SPK: Spark Table 4", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = als_timing, "SPK: ALS Timing", float, "%.1f"
+ entry = launch_timing, "SPK: Launch Timing", float, "%.1f"
+ entry = step3_timing, "SPK: 3-step Timing", float, "%.1f"
+ entry = launchvss_retard,"SPK: Launch VSS Retard",float, "%.1f"
+ entry = n2o_retard, "SPK: Nitrous Retard", float, "%.1f", { N2Oopt_2 }
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = iacstep, "Stepper Idle position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle duty", float, "%.1f", {IdleCtl == 2}
+ entry = cl_idle_targ_rpm, "Closed-loop idle target RPM", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = rpm_target_error_follower, "Closed-loop idle RPM error", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = boostduty, "Boost duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ_1, "Boost target 1", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+ entry = boostduty2, "Boost duty 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_on2 }
+ entry = boost_targ_2, "Boost target 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_on2 }
+
+#if NARROW_BAND_EGO
+ entry = afrtgt1, "EgoV 1 Target", float, "%.1f"
+ entry = afrtgt2, "EgoV 2 Target", float, "%.1f"
+ entry = afr1err, "EgoV 1 Error", float, "%.1f"
+ entry = afr2err, "EgoV 2 Error", float, "%.1f"
+#elif LAMBDA
+ entry = afrtgt1, "Lambda 1 Target", float, "%.1f"
+ entry = afrtgt2, "Lambda 2 Target", float, "%.1f"
+ entry = afr1err, "Lambda 1 Error", float, "%.1f"
+ entry = afr2err, "Lambda 2 Error", float, "%.1f"
+#else
+ entry = afrtgt1, "AFR 1 Target", float, "%.1f"
+ entry = afrtgt2, "AFR 2 Target", float, "%.1f"
+ entry = afr1err, "AFR 1 Error", float, "%.1f"
+ entry = afr2err, "AFR 2 Error", float, "%.1f"
+#endif
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = wallfuel1, "Wall fuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "Wall fuel2", int, "%d", {EAEOption}
+
+ entry = EAEFuelCorr1, "EAE1", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary ign load", float, "%.1f"
+ entry = eaeload1, "EAE load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR load", float, "%.1f"
+
+ entry = inj_timing_pri, "Injector timing pri", float, "%.1f"
+ entry = inj_timing_sec, "Injector timing sec", float, "%.1f"
+
+ entry = egt1, "EGT1", int, "%d", {egt_num > 0}
+ entry = egt2, "EGT2", int, "%d", {egt_num > 1}
+ entry = egt3, "EGT3", int, "%d", {egt_num > 2}
+ entry = egt4, "EGT4", int, "%d", {egt_num > 3}
+ entry = egt5, "EGT5", int, "%d", {egt_num > 4}
+ entry = egt6, "EGT6", int, "%d", {egt_num > 5}
+ entry = egt7, "EGT7", int, "%d", {egt_num > 6}
+ entry = egt8, "EGT8", int, "%d", {egt_num > 7}
+ entry = egt9, "EGT9", int, "%d", {egt_num > 8}
+ entry = egt10, "EGT10", int, "%d", {egt_num > 9}
+ entry = egt11, "EGT11", int, "%d", {egt_num > 10}
+ entry = egt12, "EGT12", int, "%d", {egt_num > 11}
+ entry = egt13, "EGT13", int, "%d", {egt_num > 12}
+ entry = egt14, "EGT14", int, "%d", {egt_num > 13}
+ entry = egt15, "EGT15", int, "%d", {egt_num > 14}
+ entry = egt16, "EGT16", int, "%d", {egt_num > 15}
+
+; for debug, enable these always
+ entry = sensor01, { stringValue(sensor01Alias) }, float, "%.1f";, { sensor01_source }
+ entry = sensor02, { stringValue(sensor02Alias) }, float, "%.1f";, { sensor02_source }
+ entry = sensor03, { stringValue(sensor03Alias) }, float, "%.1f";, { sensor03_source }
+ entry = sensor04, { stringValue(sensor04Alias) }, float, "%.1f";, { sensor04_source }
+ entry = sensor05, { stringValue(sensor05Alias) }, float, "%.1f";, { sensor05_source }
+ entry = sensor06, { stringValue(sensor06Alias) }, float, "%.1f";, { sensor06_source }
+ entry = sensor07, { stringValue(sensor07Alias) }, float, "%.1f";, { sensor07_source }
+ entry = sensor08, { stringValue(sensor08Alias) }, float, "%.1f";, { sensor08_source }
+ entry = sensor09, { stringValue(sensor09Alias) }, float, "%.1f";, { sensor09_source }
+ entry = sensor10, { stringValue(sensor10Alias) }, float, "%.1f";, { sensor10_source }
+ entry = sensor11, { stringValue(sensor11Alias) }, float, "%.1f";, { sensor11_source }
+ entry = sensor12, { stringValue(sensor12Alias) }, float, "%.1f";, { sensor12_source }
+ entry = sensor13, { stringValue(sensor13Alias) }, float, "%.1f";, { sensor13_source }
+ entry = sensor14, { stringValue(sensor14Alias) }, float, "%.1f";, { sensor14_source }
+ entry = sensor15, { stringValue(sensor15Alias) }, float, "%.1f";, { sensor15_source }
+ entry = sensor16, { stringValue(sensor16Alias) }, float, "%.1f";, { sensor16_source }
+
+ entry = canpwmin0, "CANpwmin0", int, "%d", { enable_pollPWM }
+ entry = canpwmin1, "CANpwmin1", int, "%d", { enable_pollPWM }
+ entry = canpwmin2, "CANpwmin2", int, "%d", { enable_pollPWM }
+ entry = canpwmin3, "CANpwmin3", int, "%d", { enable_pollPWM }
+ entry = canin1_8, "canin1_8", int, "%d"
+ entry = canout1_8, "canout1_8", int, "%d"
+ entry = canout9_16, "canout9_16", int, "%d"
+
+ entry = timing_err, "Timing err", float, "%.1f"
+ entry = synccnt, "Lost sync count", int, "%d"
+ entry = syncreason, "Lost sync reason", int, "%d"
+
+ entry = fuelflow, "Fuel flow cc/min", int, "%d"
+
+ entry = vss1, "VSS1", int, "%.1f", {vss_opt0_1}
+ entry = vss2, "VSS2", int, "%.1f", {vss_opt0_2}
+ entry = vss3, "VSS3", int, "%.1f", {vss_opt0_3}
+ entry = vss4, "VSS4", int, "%.1f", {vss_opt0_4}
+ entry = vss1_ms_1, "VSS1 ms-1", int, "%.1f", {vss_opt0_1}
+ entry = vss2_ms_1, "VSS2 ms-1", int, "%.1f", {vss_opt0_2}
+ entry = vss3_ms_1, "VSS3 ms-1", int, "%.1f", {vss_opt0_3}
+ entry = vss4_ms_1, "VSS4 ms-1", int, "%.1f", {vss_opt0_4}
+
+ entry = economy_mpg_us, "MPG(USA)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_mpg_uk, "MPG(UK)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_l_100km, "l/100km", int, "%d", {vss_opt0_1 && (prefSpeedUnits == 1)}
+
+ entry = ss1, "Shaft rpm 1", int, "%d", { ss_opt1 }
+ entry = ss2, "Shaft rpm 2", int, "%d", { ss_opt2 }
+ entry = n2o_addfuel, "Nitrous added fuel", float, "%.3f", { N2Oopt_2 }
+ entry = nitrous1_duty, "Nitrous 1 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous2_duty, "Nitrous 2 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous_timer, "Nitrous Timer", float, "%.3f", { N2Oopt_2 }
+ entry = water_duty, "Water inj duty", int, "%d", { water_freq_on }
+ entry = als_addfuel, "ALS added fuel", float, "%.3f", { als_in_pin }
+ entry = als_timing, "ALS timing", float, "%.1f", { als_in_pin }
+ entry = sd_filenum, "SDcard file number", int, "%d", { log_style_on2 }
+ entry = sd_status, "SDcard status", int, "%d", { log_style_on2 }
+ entry = sd_phase, "SDcard phase", int, "%d", { log_style_on2 }
+ entry = sd_error, "SDcard error", int, "%d", { log_style_on2 }
+ entry = gear, "Gear", int, "%d", { gear_method }
+ entry = vss1dot, "VSS1dot", float, "%.1f", {vss_opt0_1}
+ entry = vss2dot, "VSS2dot", float, "%.1f", {vss_opt0_2}
+ entry = accelx, "Accel X", float, "%.2f", { accXport }
+ entry = accely, "Accel Y", float, "%.2f", { accYport }
+ entry = accelz, "Accel Z", float, "%.2f", { accZport }
+ entry = duty_pwm_a, "PWM A duty", int, "%d", { pwm_opt_on_a }
+ entry = duty_pwm_b, "PWM B duty", int, "%d", { pwm_opt_on_b }
+ entry = duty_pwm_c, "PWM C duty", int, "%d", { pwm_opt_on_c }
+ entry = duty_pwm_d, "PWM D duty", int, "%d", { pwm_opt_on_d }
+ entry = duty_pwm_e, "PWM E duty", int, "%d", { pwm_opt_on_e }
+ entry = duty_pwm_f, "PWM F duty", int, "%d", { pwm_opt_on_f }
+ entry = generic_pid_duty_a, "Generic Closed-Loop A duty", float, "%.1f", { generic_pid_flags_a_on }
+ entry = generic_pid_duty_b, "Generic Closed-Loop B duty", float, "%.1f", { generic_pid_flags_b_on }
+ entry = status1, "Status1", int, "%d"
+ entry = status2, "Status2", int, "%d"
+ entry = status3, "Status3", int, "%d"
+ entry = status4, "Status4", int, "%d"
+ entry = status5, "Status5", int, "%d"
+ entry = status5s, "Status5s", int, "%d"
+ entry = status6, "Status6", int, "%d"
+ entry = status7, "Status7", int, "%d"
+ entry = status8, "Status8", int, "%d"
+ entry = vvt_ang1, "VVT angle 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_ang2, "VVT angle 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_ang3, "VVT angle 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_ang4, "VVT angle 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target1, "VVT target 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_target2, "VVT target 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_target3, "VVT target 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target4, "VVT target 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_duty1, "VVT duty 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_duty2, "VVT duty 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_duty3, "VVT duty 3", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = vvt_duty4, "VVT duty 4", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = tps_accel, "TPS accel", int, "%.1f", { AE_options & 0x1 }
+ entry = map_accel, "MAP accel", int, "%.1f", { AE_options & 0x1 }
+ entry = total_accel, "Total accel", int, "%.1f", { AE_options & 0x1 }
+ entry = launch_timer, "Launch retard timer", float, "%.3f", { launch_opt_on && launch_opt_retard }
+ entry = launch_retard, "Launch timed retard", float, "%.1f", { launch_opt_on && launch_opt_retard }
+
+ entry = knock_cyl01, "Knock cyl# 1", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 0)}
+ entry = knock_cyl02, "Knock cyl# 2", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 1)}
+ entry = knock_cyl03, "Knock cyl# 3", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 2)}
+ entry = knock_cyl04, "Knock cyl# 4", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 3)}
+ entry = knock_cyl05, "Knock cyl# 5", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 4)}
+ entry = knock_cyl06, "Knock cyl# 6", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 5)}
+ entry = knock_cyl07, "Knock cyl# 7", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 6)}
+ entry = knock_cyl08, "Knock cyl# 8", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 7)}
+#if CYL_12_16_SUPPORT
+ entry = knock_cyl09, "Knock cyl#09", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 8)}
+ entry = knock_cyl10, "Knock cyl#10", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 9)}
+ entry = knock_cyl11, "Knock cyl#11", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 10)}
+ entry = knock_cyl12, "Knock cyl#12", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 11)}
+ entry = knock_cyl13, "Knock cyl#13", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 12)}
+ entry = knock_cyl14, "Knock cyl#14", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 13)}
+ entry = knock_cyl15, "Knock cyl#15", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 14)}
+ entry = knock_cyl16, "Knock cyl#16", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 15)}
+#endif
+
+ entry = porta, "porta", int, "%d"
+ entry = portb, "portb", int, "%d"
+ entry = porteh, "porteh", int, "%d"
+ entry = portk, "portk", int, "%d"
+ entry = portmj, "portmj", int, "%d"
+ entry = portp, "portp", int, "%d"
+ entry = portt, "portt", int, "%d"
+
+ entry = cel_status, "CEL status", int, "%d"
+ entry = cel_status2, "CEL status2", int, "%d"
+ entry = cel_errorcode, "CEL error code", int, "%d"
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+ entry = fuel_temp1, "Fuel Temp1", float, "%.1f", { (flexFuel && (fueltemp1 == 1)) || (fueltemp1 > 15)}
+ entry = fuel_temp2, "Fuel Temp2", float, "%.1f", { dualfuel_temp_sens }
+
+ entry = fuel_press1, "Fuel Pressure1_kPa", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_psi, "Fuel Pressure1_psi", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_bar, "Fuel Pressure1_bar", float, "%.1f", { fp_press_in }
+
+ entry = fuel_press2, "Fuel Pressure2_kPa", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_psi, "Fuel Pressure2_psi", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_bar, "Fuel Pressure2_bar", float, "%.1f", { dualfuel_press_sens }
+
+ entry = fp_duty, "Fuel pump control duty", int, "%d", { fp_opt_mode }
+
+ entry = alt_targv, "Alternator target voltage", float, "%.1f", {alternator_opt_mode > 1}
+ entry = alt_freq, "Alternator control frequency", int, "%d", {alternator_opt_mode == 2}
+ entry = alt_duty, "Alternator control duty", int, "%d", {alternator_opt_mode > 2}
+ entry = load_duty, "Alternator load", int, "%d", {alternator_opt_mode && alternator_freq_monin}
+ entry = batt_curr, "Battery current", float, "%.1f", {alternator_opt_mode && alternator_freq_currin}
+ entry = fueltemp_cor, "Fuel temperature cor", float, "%.1f"
+ entry = fuelpress_cor, "Fuel pressure cor", float, "%.1f"
+ entry = ltt_cor, "Long term fuel trim cor", float, "%.1f", {ltt_opt_on}
+ entry = gps_latdeg, "GPS Lat. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latmin, "GPS Lat. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latsec, "GPS Lat. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_londeg, "GPS Lon. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonmin, "GPS Lon. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonsec, "GPS Lon. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_lonEW, "GPS Lon. E/W", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_alt, "GPS Altitude", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed, "GPS Speed", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed_ms_1, "GPS Speed ms-1",float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_course, "GPS Course (deg)", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_latitude, "GPS Latitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = gps_longitude, "GPS Longitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = tc_slipxtime, "TC slip * time", int, "%d"
+ entry = loop, "Loop", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+#if INTERNAL_LOG_FIELDS
+ ;internalLogField = fieldName, class, type, offset, units, scale, translate, digits
+ internalLogField = "Tooth number", scalar, U08, 1024, "#", 1.0, 0.0, 0
+ internalLogField = "Synch", scalar, U08, 1025, "", 1, 0, 0
+ internalLogField = "Cumulative cycles", scalar, U16, 1026, "#", 1.0, 0.0, 0
+ internalLogField = "Cumulative teeth", scalar, U16, 1027, "#", 1.0, 0.0, 0
+ internalLogField = "coilsel", scalar, U16, 1028, "", 1, 0, 0
+ internalLogField = "dwellsel", scalar, U16, 1029, "", 1, 0, 0
+ internalLogField = "PTM", scalar, U08, 1030, "", 1, 0, 0
+ internalLogField = "PTJ", scalar, U08, 1031, "", 1, 0, 0
+ internalLogField = "PTT", scalar, U08, 1032, "", 1, 0, 0
+ internalLogField = "PORTA", scalar, U08, 1033, "", 1, 0, 0
+ internalLogField = "PORTB", scalar, U08, 1034, "", 1, 0, 0
+ internalLogField = "next_dwell.tooth", scalar, U08, 1035, "", 1, 0, 0
+ internalLogField = "next_spark.tooth", scalar, U08, 1036, "", 1, 0, 0
+ internalLogField = "next_inj0.tooth", scalar, U08, 1037, "", 1, 0, 0
+ internalLogField = "next_inj1.tooth", scalar, U08, 1038, "", 1, 0, 0
+ internalLogField = "next_inj2.tooth", scalar, U08, 1039, "", 1, 0, 0
+ internalLogField = "next_inj3.tooth", scalar, U08, 1040, "", 1, 0, 0
+ internalLogField = "next_inj4.tooth", scalar, U08, 1041, "", 1, 0, 0
+ internalLogField = "next_inj5.tooth", scalar, U08, 1042, "", 1, 0, 0
+ internalLogField = "next_inj6.tooth", scalar, U08, 1043, "", 1, 0, 0
+ internalLogField = "next_inj7.tooth", scalar, U08, 1044, "", 1, 0, 0
+; internalLogField = "fuel_ovflo", scalar, U08, 1046, "", 1, 0, 0
+ internalLogField = "wheeldec_ovflo", scalar, U08, 1047, "", 1, 0, 0
+ internalLogField = "next_dwell.time32", scalar, U32, 1048, "", 1, 0, 0
+ internalLogField = "next_spark.time32", scalar, U32, 1049, "", 1, 0, 0
+ internalLogField = "TIE", scalar, U08, 1050, "", 1, 0, 0
+ internalLogField = "TFLG1", scalar, U08, 1051, "", 1, 0, 0
+ internalLogField = "TIMTIE", scalar, U08, 1052, "", 1, 0, 0
+ internalLogField = "TIMTFLG1", scalar, U08, 1053, "", 1, 0, 0
+ internalLogField = "next_inj[0].time", scalar, U16, 1054, "", 1, 0, 0
+ internalLogField = "next_inj[1].time", scalar, U16, 1055, "", 1, 0, 0
+ internalLogField = "next_inj[2].time", scalar, U16, 1056, "", 1, 0, 0
+ internalLogField = "next_inj[3].time", scalar, U16, 1057, "", 1, 0, 0
+ internalLogField = "next_inj[4].time", scalar, U16, 1058, "", 1, 0, 0
+ internalLogField = "next_inj[5].time", scalar, U16, 1059, "", 1, 0, 0
+ internalLogField = "next_inj[6].time", scalar, U16, 1060, "", 1, 0, 0
+ internalLogField = "next_inj[7].time", scalar, U16, 1061, "", 1, 0, 0
+ internalLogField = "XGSEM", scalar, U08, 1062, "", 1, 0, 0
+ internalLogField = "pwcalc1", scalar, U16, 1063, "", 1, 0, 0
+ internalLogField = "pwcalc2", scalar, U16, 1064, "", 1, 0, 0
+ internalLogField = "next_map_start_event.tooth", scalar, U08, 1065, "", 1, 0, 0
+ internalLogField = "XGCHID", scalar, U08, 1066, "", 1, 0, 0
+ internalLogField = "XGSWT", scalar, U08, 1067, "", 1, 0, 0
+ internalLogField = "xgate_deadman", scalar, U08, 1068, "", 1, 0, 0
+ internalLogField = "XGMCTL", scalar, U08, 1069, "", 1, 0, 0
+ internalLogField = "xgpc", scalar, U16, 1070, "", 1, 0, 0
+ internalLogField = "xgswe_count", scalar, U08, 1071, "", 1, 0, 0
+ internalLogField = "next_fuel", scalar, U08, 1072, "", 1, 0, 0
+ internalLogField = "inj1_cnt", scalar, U16, 1073, "", 1, 0, 0
+ internalLogField = "inj2_cnt", scalar, U16, 1074, "", 1, 0, 0
+ internalLogField = "inj3_cnt", scalar, U16, 1075, "", 1, 0, 0
+ internalLogField = "inj4_cnt", scalar, U16, 1076, "", 1, 0, 0
+ internalLogField = "inj5_cnt", scalar, U16, 1077, "", 1, 0, 0
+ internalLogField = "inj6_cnt", scalar, U16, 1078, "", 1, 0, 0
+ internalLogField = "inj7_cnt", scalar, U16, 1079, "", 1, 0, 0
+ internalLogField = "inj8_cnt", scalar, U16, 1080, "", 1, 0, 0
+#endif
+;-------------------------------------------------------------------------------
diff --git a/src/ini/ms3/0524.05P.ini b/src/ini/ms3/0524.05P.ini
new file mode 100644
index 0000000..31968d1
--- /dev/null
+++ b/src/ini/ms3/0524.05P.ini
@@ -0,0 +1,14025 @@
+;-------------------------------------------------------------------------------
+; $Id: core.ini,v 1.365.4.55 2016/04/13 14:59:44 jsmcortina Exp $
+;
+; This ini file is Copyright 2007,2008,2009,2010,2011,2012,2013,2014,2015 James Murray and Kenneth Culver.
+; It is only to be used with a licensed MS3 product.
+;
+; Original author(s) uncertain. Contains work of Eric Fahlgren
+; Re-written to support MS3
+;
+;
+; configuration defines, either #set or #unset
+
+;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
+#set CAN_COMMANDS
+#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
+#unset INTERNAL_LOG_FIELDS
+#unset PW_4X
+#unset PORT_STATUS
+#unset OUTMSG_EDITING ; Allow editing of the outmsg data
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+#if CAN_COMMANDS
+ versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar
+ queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature.
+#else
+ versionInfo = "S" ; Put this in the title bar.
+ queryCommand = "Q" ; Verify against signature.
+#endif
+ signature = "MS3 Format 0524.05P" ; MS-II sends a null at 20th byte.
+ ; 123456789.123456789.
+
+[TunerStudio]
+ iniSpecVersion = 3.24
+ helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
+
+;----------------------------------------------------------------------------
+#if INI_VERSION_2
+; ok
+#else
+ #error Megatune cannot be used with MS3 - please upgrade to TunerStudio
+#endif
+;----------------------------------------------------------------------------
+; Temperature Limits and Settings Reference
+; contributed by Mike Soultanian
+;----------------------------------------------------------------------------
+;
+; Below is a listing of all of the temperature ranges used throughout the INI
+; for the MegaSquirt.
+;
+; CELSIUS (Expanded/Normal):
+; Low limit: -40C/-40C
+; High limit: 230C/150C
+; Low danger: 65C/10C
+; Low warning: 93C/65C
+; High warning: 162C/93C
+; High danger: 176C/104C
+;
+; FAHRENHEIT (Expanded/Normal):
+; Low Limit: -40F/-40F
+; High limit: 450F/300F
+; Low danger: 150F/50F
+; Low warning: 200F/150F
+; High warning: 325F/200F
+; High danger: 350F/220F (also used for curve editor limits)
+;----------------------------------------------------------------------------
+
+[ReferenceTables]
+
+ tableWriteCommand = "w\$tsCanId%2i%2o%2c%v"
+#if CAN_COMMANDS
+ tableBlockingFactor = 256 ; just in case MS2 is used
+#else
+ tableBlockingFactor = 2048
+#endif
+
+ referenceTable = mafTableBurner, "Calibrate MAF Table..."
+ tableIdentifier = 003, "MAF Table"
+ adcCount = 1024 ; length of the table
+ bytesPerAdc = 2 ; using words
+ scale = 1 ; scale before sending to controller
+ tableGenerator = fileBrowseGenerator, "Browse for Inc File"
+ solutionsLabel = "MAF Sensor"
+ solution = "Default", { table(adcValue, "maffactor.inc") }
+ solution = "Ford V8", { table(adcValue, "maffactor.inc") }
+ solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
+ solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
+; solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") } ; file is not valid, use new method instead
+ solution = "Custom inc File", fileBrowseGenerator
+
+[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
+
+ settingGroup = lambdaSensor, "Oxygen Sensor / Display"
+ settingOption = NARROW_BAND_EGO, "Narrowband Sensor - Volts"
+ settingOption = LAMBDA, "Wideband - Lambda"
+ settingOption = DEFAULT, "WideBand - AFR" ; DEFAULT will be over looked and this will fall into the #else block of the statement.
+
+ settingGroup = lambdaDisplay, "" ; Hide this settingGroup option
+ settingOption = DEFAULT, "" ;
+
+[PcVariables]
+ ; valid types: boolean, double, int, list
+ ;
+ ; no offset as they are local variables.
+ ; entry format the same as Constants, except there is no offset.
+ ; arrays are not yet supported.
+ ; name = class, type, shape, units, scale, translate, lo, hi, digits
+ ; name = type, min, max;
+ ;
+ ; type List: value will be index.
+
+ ;tsCanId = bits, U08, [0:3] ; The short one, just numbers
+ tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID"
+; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4
+; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1
+ rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0
+ loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0
+ wue_lpg = bits, U08, [0:0], "No", "Yes"
+ vehigh = scalar, U16, "%", 1, 0, 100, 600, 0
+ clt_exp = bits, U08, [0:0], "Normal", "Expanded"
+ algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ sensor01Alias = string, ASCII, 20
+ sensor02Alias = string, ASCII, 20
+ sensor03Alias = string, ASCII, 20
+ sensor04Alias = string, ASCII, 20
+ sensor05Alias = string, ASCII, 20
+ sensor06Alias = string, ASCII, 20
+ sensor07Alias = string, ASCII, 20
+ sensor08Alias = string, ASCII, 20
+ sensor09Alias = string, ASCII, 20
+ sensor10Alias = string, ASCII, 20
+ sensor11Alias = string, ASCII, 20
+ sensor12Alias = string, ASCII, 20
+ sensor13Alias = string, ASCII, 20
+ sensor14Alias = string, ASCII, 20
+ sensor15Alias = string, ASCII, 20
+ sensor16Alias = string, ASCII, 20
+
+ scatterRuntimeEnabled = bits, U08, [0:0], "Disabled", "Enabled"
+
+ portLabels = bits, U08, [0:8], "unused", "injection LED", "warmup LED", "squirt LED", "fuel pump", "PWM or on/off idle", "stepper idle", "primary injectors", "secondary injectors", "a programmable on/off output", "spark outputs", "HEI bypass", "knock", "MAF", "MAP", "baro", "EGO", "tacho out", "A/C idleup out", "A/C idleup in", "fan out", "boost out", "N2O stage 1 nitrous", "N2O stage 1 fuel", "N2O stage 2 nitrous", "N2O stage 2 fuel", "N2O in", "launch in", "variable launch in", "3 step in", "datalog button", "datalog LED", "bike shift in", "bike shift out", "generic PWM A", "generic PWM B", "generic PWM C", "generic PWM D", "generic PWM E", "generic PWM F", "datalog stream", "dual fuel in", "fuel tableswitch", "spark tableswitch", "boost tableswitch", "overboost tableswitch", "ReqFuel switch", "AFR tableswitch", "stoich switch", "max AFR safety switch", "accelerometer X", "accelerometer Y", "accelerometer Z", "vss out", "water inj pump", "water inj valve", "water inj in", "ignition trigger LED", "flex fuel in", "cam input", "vss1 in", "vss2 in", "speed sensor 1 in", "speed sensor 2 in", "gear position in", "anti-lag in", "anti-lag out", "anti-lag PWM out", "Boost 2 out", "EGT 1 in", "EGT 2 in", "EGT 3 in", "EGT 4 in", "EGT 5 in", "EGT 6 in", "EGT 7 in", "EGT 8 in", "EGT 9 in", "EGT 10 in", "EGT 11 in", "EGT 12 in", "EGT 13 in", "EGT 14 in", "EGT 15 in", "EGT 16 in", "Generic Sensor 1 in", "Generic Sensor 2 in", "Generic Sensor 3 in", "Generic Sensor 4 in", "Generic Sensor 5 in", "Generic Sensor 6 in", "Generic Sensor 7 in", "Generic Sensor 8 in", "Generic Sensor 9 in", "Generic Sensor 10 in", "Generic Sensor 11 in", "Generic Sensor 12 in", "Generic Sensor 13 in", "Generic Sensor 14 in", "Generic Sensor 15 in", "Generic Sensor 16 in", "VVT 1 output", "VVT 2 output", "VVT 3 output", "VVT 4 output", "VVT cam 2/3/4 input", "Real Time Clock", "Torque Convertor Lockup", "Traction control", "Rotary trailing dwell timer", "Internal SPI2", "2nd MAP", "Long Term Trim button", "dual-fuel injectors", "launch timed in", "launch timed out", "throttle stop", "check engine light", "vss3 in", "vss4 in", "Staged inj switch output 1", "Alternator control output", "Alternator load monitor input", "Alternator current monitor input", "Alternator lamp output", "Staged inj switch output 1", "Shift light output", "Oil pressure warning output", "TCS input", "MAP2", "Generic Closed-Loop Out 1", "Generic Closed-Loop Out 2", "Line-lock staging input", "Line-lock staging output", "SDcard trigger output", "Pit limiter input", "TC LED out", "Dome fill out", "Dome empty out"
+ prefSpeedUnits = bits, U08, [0:0], "MPH", "KPH"
+ prefLengthUnits = bits, U08, [0:0], "m", "in"
+
+[LoggerDefinition]
+ ; valid logger types: composite, tooth, trigger, csv
+
+ ;loggerDef = uniqueName, Display Name, type
+ loggerDef = mapLogger, "MAP Logger", csv
+ dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap }
+ recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMap && !rpmPrint }
+
+ ;calcField = name, HeaderName, units, expression
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+ loggerDef = mafLogger, "MAF Logger", csv
+ dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag"
+ recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf }
+ recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf }
+ recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf }
+ recordField = mafAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf }
+ recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint }
+ recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint }
+ calcField = mapValue, "MAF Freq", "Hz", { (MAFOption_t == 0 || (!(mafAdc > 0))) ? 0 : (maf_freq1 > 62.5) ? (1000000 / (32 * mafAdc)) : (1000000 / (128 * mafAdc)) }
+
+ loggerDef = mafLogger, "Engine Logger", csv
+ dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ loggerDef = mafLogger, "Engine Logger + MAP", csv
+ dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mapAdc, "MAP ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+ calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 }
+
+
+ loggerDef = mafLogger, "Engine Logger + MAF", csv
+ dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format
+ dataReadTimeout = 10000 ; time in ms
+ dataReadyCondition = { ( status3 & 0x02 ) == 0x02 }
+ ;dataLength = 1024 ; in bytes, including headers, footers and data (not used)
+
+ ;recordDef = headerLen. footerLen, recordLen
+ recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
+
+ ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
+
+ recordField = mafAdc, "MAF ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits
+
+ recordField = PT7, "PTT7", 23, 1, 1, ""
+ recordField = PT6, "PTT6", 22, 1, 1, ""
+ recordField = PT5, "PTT5", 21, 1, 1, ""
+ recordField = PT4, "PTT4", 20, 1, 1, ""
+ recordField = PT3, "PTT3", 19, 1, 1, ""
+ recordField = PT2, "PTT2", 18, 1, 1, ""
+ recordField = PT1, "PTT1", 17, 1, 1, ""
+ recordField = PT0, "PTT0", 16, 1, 1, ""
+
+ recordField = PB7, "Spk H", 15, 1, 1, ""
+ recordField = PB6, "Spk G", 14, 1, 1, ""
+ recordField = PB5, "Spk F", 13, 1, 1, ""
+ recordField = PB4, "Spk E", 12, 1, 1, ""
+ recordField = PB3, "Spk D", 11, 1, 1, ""
+ recordField = PB2, "Spk C", 10, 1, 1, ""
+ recordField = PB1, "Spk B", 9, 1, 1, ""
+ recordField = PB0, "Spk A", 8, 1, 1, ""
+
+ recordField = PA7, "Inj H", 7, 1, 1, ""
+ recordField = PA6, "Inj G", 6, 1, 1, ""
+ recordField = PA5, "Inj F", 5, 1, 1, ""
+ recordField = PA4, "Inj E", 4, 1, 1, ""
+ recordField = PA3, "Inj D", 3, 1, 1, ""
+ recordField = PA2, "Inj C", 2, 1, 1, ""
+ recordField = PA1, "Inj B", 1, 1, 1, ""
+ recordField = PA0, "Inj A", 0, 1, 1, ""
+
+[TurboBaud]
+ turboBaudOnCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x51"
+ turboBaudOffCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x50"
+
+ ; turboBaudSpeed defines the speed for
+ ; TS to set the PC baud to when turboBaud is activated
+ turboBaudSpeed = { baudhigh } ; reference the Constant so they will always be in sync with one setting.
+ sdTurboActive = { 1 } ; this can reference a Constant or PcVariable in order to make it user selectable.
+ runtimeTurboActive = { 0 }
+
+[Constants]
+
+ ;----------------------------------------------------------------------------
+ ; Constants Definition
+ ; --------------------
+ ;
+ ; Scalar Values
+ ; -------------
+ ; The scaling and translation values are used as follows:
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ ;
+ ; Array Values
+ ; ------------
+ ; Arrays are specified just like scalars, except that they have a "shape"
+ ; entry in the fourth parameter. The shape allows you to define lists or
+ ; tables, for example [8] defines a list with eight values and [2x4] defines
+ ; a table with eight values (two rows and four columns). Tables may be
+ ; stored in either "X-" or "Y-order." X-order means that memory is layed
+ ; out like.
+ ;
+ ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]...
+ ;
+ ; Y-order would be
+ ;
+ ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]...
+ ;
+ ; To use the TableEditor, you must define two lists and a table, and
+ ; the lengths of the lists must correspond to the shape of the table.
+ ;
+ ; Bit Fields
+ ; ----------
+ ; Bits are numbered 0-7, the rightmost being bit zero. The basic
+ ; data word that stores bit fields must be unsigned.
+ ;
+ ; You need NOT supply the correct number of labels matching the
+ ; number of bits you've specified (one bit requires 2 values, two
+ ; bits requires 4 values and so on). If you neglect to supply enough
+ ; labels, they will be synthesized using the sequence "1", "2" and so
+ ; on based upon their position in the sequence (the cltType and matType
+ ; will end up with identical lists).
+ ;
+ ;----------------------------------------------------------------------------
+
+; updated settings from "new" serial
+ pageActivationDelay = 1
+ blockReadTimeout = 500
+ tsWriteBlocks = on
+; writeBlocks = on
+ interWriteDelay = 0
+
+;Relationship between TS pages and MS3 pages
+;TS MS3 internal
+;MS3 internal pages 0-3 are sensor lookup tables
+;1 4
+;2 5
+;MS3 internal pages 6,7 are outpc,txbuf
+;3 8
+;4 9
+;5 10
+;6 11
+;7 12
+;8 13
+;9 18
+;10 19
+;11 21
+;12 22
+;13 23
+;14 24
+;15 25
+;16 26 ; RAM only page
+;17 27
+;18 28
+
+ endianness = big
+ nPages = 19
+ pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0a", "\$tsCanId\x0b", "\$tsCanId\x0c", "\$tsCanId\x0d", "\$tsCanId\x12", "\$tsCanId\x13", "\$tsCanId\x15", "\$tsCanId\x16", "\$tsCanId\x17", "\$tsCanId\x18", "\$tsCanId\x19", "\$tsCanId\x1a", "\$tsCanId\x1b", "\$tsCanId\x1c", "\$tsCanId\x1d"
+ burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "", "b%2i", "b%2i", "b%2i"
+ pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c"
+ pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v"
+ crc32CheckCommand = "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04"
+
+ tableCrcCommand = "k\$tsCanId%2i%2o%2c"
+ retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
+
+; new serial
+ messageEnvelopeFormat = msEnvelope_1.0 ; TS could use the 'F' command to determine this automatically.
+
+ ;TS could use the 'f' command to determine this automatically. Will change if using CAN passthrough
+#if CAN_COMMANDS
+ blockingFactor = 256 ; just in case MS2 is used
+#else
+ blockingFactor = 2048
+#endif
+
+ validateArrayBounds = true
+
+ page = 1
+ ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits
+ nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
+ no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 10.00, 0 ; * ( 1 byte)
+ ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; ICIgnOption
+ engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire"
+ ; old setting and settings
+ spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; *
+ ; new settings
+ spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; *
+
+ max_coil_dur = scalar, U08, 3, "ms", 0.1000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
+ max_spk_dur = scalar, U08, 4, "ms", 0.1000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
+; dwellAcc = scalar, U08, 5, "ms", 0.1000, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte)
+ crankingRPM = scalar, S16, 6, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
+ triggerOffset = scalar, S16, 8, "deg", 0.10000, 0.00000, -90.0, 380.00, 1 ; * ( 2 bytes)
+ TpsBypassCLTRevlim = scalar, S16, 10, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
+; RevLimRpm2 = scalar, S16, 12, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 2 bytes)
+
+ map0 = scalar, S16, 14, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+ mapmax = scalar, S16, 16, "%", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes)
+#if CELSIUS
+ clt0 = scalar, S16, 18, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ mat0 = scalar, S16, 22, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
+#else
+ clt0 = scalar, S16, 18, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+ cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0
+ mat0 = scalar, S16, 22, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
+#endif
+ matmult = scalar, S16, 24, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+
+ tpsMin = scalar, S16, 26, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ tpsMax = scalar, S16, 28, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes)
+ batt0 = scalar, S16, 30, "V", 0.10000, 0.00000, -10, 10, 1 ; ( 2 bytes)
+ battmax = scalar, S16, 32, "V", 0.10000, 0.00000, 10, 100, 1 ; ( 2 bytes)
+ ego0 = scalar, S16, 34, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
+ egomult = scalar, S16, 36, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
+
+ baro0 = scalar, S16, 38, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ baromax = scalar, S16, 40, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcor0 = scalar, S16, 42, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
+ bcormult = scalar, S16, 44, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
+ iacfullopen = scalar, U16, 46, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
+ reluctorteeth1 = scalar, U16, 48, "", 0.01, 0,0,255,2 ; this is VSS1
+ crankTolerance = scalar, U08, 50, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ asTolerance = scalar, U08, 51, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ pulseTolerance = scalar, U08, 52, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+; IdleCtl = bits , U08, 53, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ IdleCtl = bits , U08, 53, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
+ IdleCtl_alg = bits , U08, 53, [3:3], "Open-loop (warmup)", "Closed-loop"
+ IdleCtl_vss = bits , U08, 53, [4:4], "Standard", "Use VSS"
+ IdleCtl_home = bits , U08, 53, [5:5], "Closed", "Open"
+ IACtstep = scalar, U08, 54, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IAC_tinitial_step=scalar, U08, 55, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte)
+ IACminstep = scalar, U08, 56, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ dwellduty = scalar, U08, 57, "%", 0.39, 0.0, 0, 100,0
+ IACStart = scalar, S16, 58, "", 1.00000, 0.00000, 0.00, 4000.00, 0
+#if CELSIUS
+ IdleHyst = scalar, S16, 60, "°C", 0.05555, 0.00000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ IdleHyst = scalar, S16, 60, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ IACcrankpos = scalar, S16, 62, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes)
+ IACcrankxt = scalar, S16, 64, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
+ IACcurlim = bits, U08, 66, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
+;gap
+ reluctorteeth2 = scalar, U16, 68, "", 0.01, 0,0,255,2 ; this is VSS2
+ boosttol = scalar, S16, 70, "kPa", 0.10000, 0.00000, 0.00, 50, 1
+ OverBoostKpa2 = scalar, S16, 72, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ fc_rpm_lower = scalar, U16, 74, "rpm", 1.00000, 0.0, 0.0, {rpmhigh}, 0 ; * ( 1 byte)
+ OverBoostOption = bits, U08, 76, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
+ OverBoostOption_tol = bits, U08, 76, [2:2], "Off", "On"
+ hardware_spk = bits, U08, 77, [0:2], "INVALID", "INVALID", "Spark", "INVALID", "Tacho Out", "INVALID", "INVALID", "INVALID"
+ hardware_fuel = bits, U08, 77, [4:4], "Inj I/J", "Inj A,B.."
+ hardware_cam = bits, U08, 77, [6:7], "Digital Frequency In 2", "CMP", "MAP sensor", "INVALID"
+ OverBoostKpa = scalar, S16, 78, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ OverBoostHyst = scalar, S16, 80, "kPa", 0.10000, 0.00000, 0.00, 100, 1
+ N2Olaunchmaxmap = scalar, S16, 82, "kPa", 0.1, 0, 100, {loadhigh}, 1
+ tpsThresh = scalar, S16, 84, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 ; * ( 2 byte)
+ mapThresh = scalar, S16, 86, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 ; * ( 2 byte) threshold for MAE
+ taeColdA = scalar, U08, 88, "%ReqFuel", 1, 0.00000, 0, 255, 0 ; * ( 1 byte) ; Tpsacold
+ taeColdM = scalar, U08, 89, "%", 1.00000, 0.00000, 100, 255.00, 0 ; * ( 1 byte) ; AccMult
+ taeTime = scalar, U08, 90, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync
+ tpsasync_events = scalar, U08, 90, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync
+ tdePct = scalar, U08, 91, "", 1.00000, 0.00000, 50.00, 100.00, 0 ; * ( 1 byte) ; TPSDQ
+ floodClear = scalar, S16, 92, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes) ; TPSWOT
+ TPSOXLimit = scalar, S16, 94, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes) ; TPSOXLimit
+ tpsProportion = scalar, U08, 96, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) ; Tps_acc_wght
+ baroCorr = bits , U08, 97, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"; BaroOption
+ egoType = bits , U08, 98, [0:1], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
+ egoCount = scalar, U08, 99, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ egoDelta = scalar, U08, 100, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ oldegoLimit = scalar, U08, 101, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
+ EGOVtarget = scalar, U08, 102, "Volts", 0.00489, 0.00000, 0.00, 1, 3
+ tempUnits = bits , U08, 103, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
+ egonum = scalar, U08, 104, "", 1, 0, 0, 16, 0
+ rtc_trim = scalar, S08, 105, "ppm", 1, 0, -127, +127, 0
+#if CELSIUS
+ fastIdleT = scalar, S16, 106, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ egoTemp = scalar, S16, 108, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fastIdleT = scalar, S16, 106, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ egoTemp = scalar, S16, 108, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ egoRPM = scalar, U16, 110, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; RPMOXLimit
+#if PW_4X
+ reqFuel = scalar, U16, 112, "ms", 0.004, 0.00000, 0.00, 262.143, 2 ; * ( 2 bytes)
+#else
+ reqFuel = scalar, U16, 112, "ms", 0.001, 0.00000, 0.00, 65.535, 2 ; * ( 2 bytes)
+#endif
+ divider = scalar, U08, 114, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
+ alternate = bits, U08, 115, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
+ altcrank = bits, U08, 115, [1:1], "Every event", "Alternate events"
+ alternate_blend = bits, U08, 115, [2:2], "Off", "Blend Curve (7)"
+ injPwmT = scalar, U08, 116, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd = scalar, U08, 117, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP = scalar, U08, 118, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ twoStroke = bits, U08, 119, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary" ; *
+; injType = bits, U08, 120, [0:0], "Port Injection", "Throttle Body" ; * not used by code
+ nInjectors = bits, U08, 121, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ OddFireang = scalar, U16, 122, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ rpmLF = scalar, U08, 124, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ mapLF = scalar, U08, 125, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ tpsLF = scalar, U08, 126, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ egoLF = scalar, U08, 127, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ adcLF = scalar, U08, 128, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
+ knk_pin_out = bits, U08, 129, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ mafLF = scalar, U08, 130, "", 1.00000, 0.00000, 10.00, 100.00, 0
+;gap
+ algorithm = bits, U08, 132, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; *
+ algorithm2 = bits, U08, 132, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm = bits, U08, 133, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ IgnAlgorithm2 = bits, U08, 133, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ AfrAlgorithm = scalar, U08, 134, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
+ dwelltime = scalar, U08, 135, "ms", 0.10000, 0, 0.1, 25.5, 1
+ trigret_ang = scalar, U16, 136, "deg", 0.1, 0, 5, 180,1
+ RevLimOption_retard = bits,U08, 138, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
+ RevLimOption_spkcut = bits,U08, 138, [2:2], "Off", "On"
+ RevLimCLTbased = bits, U08, 138, [3:3], "Normal", "CLT based"
+ RevLimOption_fuelprog=bits,U08, 138, [4:4], "Off", "On"
+ RevLimOption_fuelcut =bits,U08, 138, [5:5], "Off", "On"
+ RevLimMaxRtd = scalar, U08, 139, "deg", 0.10000, 0.00000,0, 25.5, 0 ; * ( 1 byte)
+ ego_startdelay = scalar, U08, 140, "s", 1, 0, 0, 120, 0
+ can_poll2_ego = bits, U08, 141, [0:0], "Disable", "Enable" ; old setting
+ can_poll2_ego2 = bits, U08, 141, [0:0], "Disable", "Innovate format"
+ can_poll2_gps = bits, U08, 141, [1:2], "Off", "JBperf GPS", "INVALID", "INVALID"
+ can_poll2_vss = bits, U08, 141, [3:3], "Listen", "Poll"
+ can_poll2_egolag= bits, U08, 141, [4:4], "Off", "On"
+ opt142_rtc = bits, U08, 142, [0:1], "Off", "On-board", "CAN", "INVALID"
+ opt142_gs_share = bits, U08, 142, [2:2], "Off", "On"
+ injPwmT2 = scalar, U08, 143, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
+ injPwmPd2 = scalar, U08, 144, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ injPwmP2 = scalar, U08, 145, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ can_ego_id = scalar, U08, 146, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_ego_table = scalar, U08, 147, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_ego_offset = scalar, U16, 148, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ baro_upper = scalar, S16, 150, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_lower = scalar, S16, 152, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+ baro_default = scalar, S16, 154, "kPa", 0.10000, 0.00000, 60, {loadhigh}, 1 ;
+; RevLimTPSbypassRPM = scalar, S16, 156, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ launchcutzone = scalar, S16, 158, "RPM", 1.00000, 0.00000, 0.00, 1000, 0
+ RevLimNormal2 = scalar, S16, 160, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ;
+ hw_latency = scalar, U08, 162, "usec", 1.0, 0.00000, 0.00, 255.00, 0
+;next three are loadopts in the firmware
+ loadCombine = bits, U08, 163, [0:1], "additive", "multiplicitive", "Blend Curve (1)", "INVALID"
+ loadMult = bits, U08, 163, [2:2], "don't multiply", "multiply"
+ loadStoich = bits, U08, 163, [3:3], "don't include AFRtarget", "include AFRtarget"
+ loadCombineign = bits, U08, 163, [4:4], "additive", "Blend Curve (2)"
+ loadMult2 = bits, U08, 163, [5:5], "don't multiply", "multiply"
+ loadopts_oldbaro= bits, U08, 163, [6:6], "Off", "On"
+ baud = scalar, U32, 164, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ MAPOXLimit = scalar, S16, 168, "%", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
+ can_poll_id_rtc = scalar, U08, 170, "", 1.00000, 0.00000, 0.00, 14, 0
+ mycan_id = scalar, U08, 171, "", 1.00000, 0.00000, 0.00, 14, 0
+ mapsample_percent = scalar, U08, 172, "%", 1.00000, 0.00000, 0.00, 50, 0
+ can_poll_id_ports = scalar, U08, 173, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_poll_id = scalar, U08, 174, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ aeTaperTime = scalar, U08, 175, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync2
+ tpsasync2_events= scalar, U08, 175, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync2
+ aeEndPW = scalar, S16, 176, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 ; * tpsaccel2 ; TpsAccel2
+ egoAlgorithm = bits , U08, 178, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
+ egoAlgorithm_auth=bits , U08, 178, [2:2], "Off", "On"
+ egoAlgorithm_delay_table=bits, U08, 178, [3:3], "Use IGN events", "Use delay table"
+ egoKP = scalar, U08, 179, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKI = scalar, U08, 180, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+ egoKD = scalar, U08, 181, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
+
+ ac_idleup_vss_offpoint = scalar, U16, 182, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ ac_idleup_vss_hyst = scalar, U16, 184, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ flexFuel = bits , U08, 186, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
+ flexport = bits, U08, 186, [1:2], "INVALID", "INVALID", "Digital Switched In 1", "INVALID"; (1 byte )
+ fuelFreq = array , U08, 187, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
+ fuelFreq0 = scalar, U08, 187, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelFreq1 = scalar, U08, 188, "Hz", 1.00000, 0.00000, 0.00, 255, 0
+ fuelCorr = array , U08, 189, [ 2], "%", 1.00000, 0.00000, 50, 255, 0 ; * ( 2 bytes)
+ fuelCorr0 = scalar, U08, 189, "%", 1.00000, 0.00000, 50, 255, 0
+ fuelCorr1 = scalar, U08, 190, "%", 1.00000, 0.00000, 50, 255, 0
+
+ dwellmode = bits , U08, 191, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
+ pwmidle_shift_lower_rpm = scalar, U16, 192, "rpm", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ ac_idleup_tps_offpoint = scalar, S16, 194, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ ac_idleup_tps_hyst = scalar, S16, 196, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_tps_offpoint = scalar, S16, 198, "%", 0.10000, 0.00000, 0.00, 150.00, 1
+ fan_idleup_tps_hyst = scalar, S16, 200, "%", 0.10000, 0.00000, 0.00, 100.00, 1
+ fan_idleup_vss_offpoint = scalar, U16, 202, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200.00, 0
+
+ knk_option = bits , U08, 204, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
+ knk_option_an = bits , U08, 204, [2:3], "On/Off", "Analogue", "INVALID", "Internal"
+ knkDirection = bits , U08, 204, [4:4], "Low Input", "High Input" ; *
+ knkpull = bits , U08, 204, [5:6], "INVALID", "None", "Pull up", "INVALID" ; *
+ knk_option_wind = bits , U08, 204, [7:7], "At end", "Peak"
+ knk_maxrtd = scalar, U08, 205, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_step1 = scalar, U08, 206, "deg", 0.1, 0.0, 1.0, 25.5, 1 ; * ( 1 byte )
+ knk_step2 = scalar, U08, 207, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ knk_trtd = scalar, U08, 208, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_tadv = scalar, U08, 209, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_dtble_adv = scalar, U08, 210, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ knk_ndet = scalar, U08, 211, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
+ EAEOption = bits , U08, 212, [0:2], "Off", "EAE", "INVALID", "X-tau", "X-tau with CLT correction", "INVALID", "INVALID", "INVALID" ; * ( 1 byte )
+ knkport = bits, U08, 213, [0:3], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Analog In 3", "Analog In 1", "Analog In 2","INVALID","INVALID"
+ knk_maxmap = scalar, S16, 214, "kPa", 0.1, 0.0, 0.0, {loadhigh}, 1 ; * ( 2 bytes)
+ knk_lorpm = scalar, U16, 216, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ knk_hirpm = scalar, U16, 218, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ triggerTeeth = scalar, U16, 220, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
+ No_Miss_Teeth = scalar, U08, 222, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
+ pwmidle_shift_open_time = scalar, U08, 223, "s", 1.0, 0.0, 0.0, 20, 0 ; * ( 1 byte )
+ Miss_ang = scalar, U16, 224, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
+ ICISR_tmask = scalar, U08, 226, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ ICISR_pmask = scalar, U08, 227, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+ ae_lorpm = scalar, U16, 228, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ ae_hirpm = scalar, U16, 230, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0 ; * ( 2 bytes)
+ fuelSpkDel = array , S16, 232, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
+ fuelSpkDel0 = scalar, S16, 232, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ fuelSpkDel1 = scalar, S16, 234, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ spk_conf2_gmtfi = bits , U08, 236, [0:2], "Off", "GM Bypass on SpkB", "Buick C3I", "TFI Non-signature", "TFI Signature PIP", "INVALID", "INVALID", "INVALID"
+ spk_conf2_oddodd= bits , U08, 236, [3:4], "Alternate", "INVALID", "Paired", "Custom"
+ spk_conf2_dwell = bits , U08, 236, [5:5], "Off", "On"
+ spk_conf2_dwelltbl = bits, U08, 236, [6:6], "Off", "On"
+ spk_conf2_dli = bits , U08, 236, [7:7], "Off", "Toyota DLI"
+;spk_config
+ spk_config_campol =bits, U08, 237, [0:0], "Low", "High"
+ spk_config_camcrank = bits, U08, 237, [1:1], "Crank wheel", "Cam wheel"
+ spk_config_trig2 =bits, U08, 237, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
+ spk_config_trig2l =bits, U08, 237, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
+ spk_config_resetcam =bits, U08, 237, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
+
+ ; invalids in next line are spare and should be used, extra CASes hidden.
+; incomplete modes are hidden for the moment
+ spk_mode0 = bits , U08, 238, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-05", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "Fiat 1.8 16V", "Fuel Only", "Optispark", "Nissan SR20", "Nissan RB25", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "Honda Acura", "VQ35DE","Jeep 2000", "Jeep 2002", "Zetec VCT", "Flywheel tri-tach", "2JZ VVTi", "Honda TSX/D17", "INVALID", "Viper V10","Viper V10 Gen1", "Honda K24A2", "HD32-2", "Miata 36-2","Daihatsu 12+1", "Subaru 36-2-2-2 VVT", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID"
+ spk_mode3_trim = bits, U08, 239, [0:0], "Off", "On"
+ spk_mode3_tach3 = bits, U08, 239, [1:1], "CMP", "Digital Frequency Input 2"
+ spk_mode3_hirespol= bits, U08, 239, [2:2], "Normal", "Inverted"
+ spk_mode3_kick = bits , U08, 239, [3:3], "Off", "On"
+ spk_mode3 = bits, U08, 239, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID" ; (1 byte )
+ rtbaroport = bits, U08, 240, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ego2port = bits, U08, 241, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport = bits, U08, 242, [0:4], "MAP", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ mapport_t = bits, U08, 242, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+;NB these mapport are in next byte
+ mapport_f = bits, U08, 243, [6:7], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ knkport_an = bits, U08, 243, [0:2], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID",
+ OvrRunC = bits , U08, 244, [0:0], "Off", "On"
+ OvrRunC_progcut= bits , U08, 244, [1:1], "Off", "On"
+ OvrRunC_progret= bits , U08, 244, [2:2], "Off", "On"
+ OvrRunC_progign= bits , U08, 244, [3:3], "Off", "On"
+ OvrRunC_retign = bits , U08, 244, [4:4], "Off", "On"
+ poll_level_tooth = scalar, U08, 245, "", 1, 0, 0, 255, 0
+; feature4_0ftrig = bits, U08, 246, [0:0], "Simple", "Advanced"
+ feature4_0igntrig= bits, U08, 246, [1:1], "Off", "Ignition trigger indicator"
+
+ feature4_0maxdwl = bits, U08, 246, [3:3], "Off", "On"
+ feature4_0ftrig = bits, U08, 246, [4:5], "Off", "INVALID", "Simple", "Advanced"
+ feature4_0mindwl = bits, U08, 246, [6:6], "Off", "On"
+
+ timing_flags = bits, U08, 247, [0:0], "Use Table", "Fixed timing";
+ use_prediction = bits, U08, 247, [1:1], "No Prediction", "1st Deriv Prediction";
+ crank_dwell = scalar, U08, 248, "ms", 0.1000,0.00000,1.00,8.00,1
+ tsw_pin_f = bits, U08, 249, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve (3)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ crank_timing = scalar, S16, 250, "degrees", 0.10000,0.00000,-10.00,90.00,1;
+ fixed_timing = scalar, S16, 252, "degrees", 0.10000,0.00000,-90.00,90.00,1;
+ tsf_rpm = scalar, U16, 254, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tsf_kpa = scalar, S16, 256, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tsf_tps = scalar, S16, 258, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+ tss_rpm = scalar, U16, 260, "rpm", 1, 0, 0, {rpmhigh}, 0
+ tss_kpa = scalar, S16, 262, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ tss_tps = scalar, S16, 264, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+; feature5_0 266
+ f5_0_tsf = bits , U08, 266, [0:0], "Off", "On"
+ f5_0_tsf_opt = bits , U08, 266, [1:3], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+ f5_0_tss = bits , U08, 266, [4:4], "Off", "On"
+ f5_0_tss_opt = bits , U08, 266, [5:7], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID"
+
+ tsw_pin_s = bits, U08, 267, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve (4)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pwmidlecranktaper= scalar, U08, 268, "s", 1.00000, 0.00000, 0.00, 100.00, 0
+ knk_step_adv = scalar, U08, 269, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte )
+ fc_rpm = scalar, U16, 270, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fc_kpa = scalar, S16, 272, "kPa", 0.1, 0, 0, {loadhigh}, 1
+ fc_tps = scalar, S16, 274, "%", 0.10000, 0.00000, 0.00, 10.00, 1;
+#if CELSIUS
+ fc_clt = scalar, S16, 276, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ fc_clt = scalar, S16, 276, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ fc_delay = scalar, U08, 278, "s", 0.1, 0, 0, 5.0, 1
+
+ tacho_opt3f = bits, U08, 279, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ fc_ego_delay = scalar, U08, 280, "s", 1, 0, 0.00, 10, 0
+
+ tacho_opt80 = bits, U08, 281, [7:7], "Off", "On" ; tacho_opt2
+ tacho_optvar = bits, U08, 281, [6:6], "Fixed", "Variable"
+ tacho_opt40 = bits, U08, 281, [5:5], "Normal", "Half speed"
+ tacho_scale = scalar, U16, 282, "%", 0.1, 0, 10, 1000, 1
+;gap 284, 285
+ feature3_tps = bits, U08, 286, [0:0], "Off", "On"
+ feature3_aseunit= bits, U08, 286, [1:1], "Cycles", "0.1 seconds"
+ feature3_maplog = bits, U08, 286, [2:2], "Off", "On"
+ feature3_3 = bits, U08, 286, [3:3], "Off", "On"
+ feature3_pw4x = bits, U08, 286, [4:4], "Normal", "4x"
+ feature3_n2oin = bits, U08, 286, [5:5], "On", "Off"
+ feature3_matase = bits, U08, 286, [6:6], "Off", "On"
+ feature3_dwell = bits, U08, 286, [7:7], "Off", "On"
+ launch_opt_vss = bits, U08, 287, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ launch_opt_vssgear = bits, U08, 287, [2:2], "Off", "On"
+ launch_opt_retard = bits, U08, 287, [3:3], "Off", "On"
+ launch_opt_bank = bits, U08, 287, [4:5], "Off","Bank1", "Bank2", "Both"
+ launch_opt_on = bits, U08, 287, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
+ launch_sft_zone = scalar, S16, 288, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
+ launch_sft_deg = scalar, S16, 290, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim = scalar, S16, 292, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ launch_tps = scalar, S16, 294, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
+ launchlimopt = bits , U08, 296, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
+ launchlimopt_adv= bits , U08, 296, [2:2], "Basic", "Advanced"
+ launchlimopt_cut= bits , U08, 296, [3:4], "Random Progressive", "Random Ramped", "Fixed 5/7", "Fixed 4/5"
+ launchvsstime = scalar, U08, 297, "s", 1, 0, 0, 255, 0
+ launchvss_maxgear= scalar, U08, 298, "", 1, 0, 1, 6, 0
+ launch_opt_pins = bits, U08, 299, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ flats_arm = scalar, U16, 300, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0
+ launchvss_minvss = scalar, U16, 302, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 1, 200, 1
+ flats_deg = scalar, S16, 304, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ flats_hrd = scalar, U16, 306, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ staged_pri_size = scalar, U16, 308, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_sec_size = scalar, U16, 310, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes)
+ staged_first_param = bits, U08, 312, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
+ staged_second_param = bits, U08, 312, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
+ staged_transition_on = bits, U08, 312, [6:6], "Off", "On"
+ staged_second_logic = bits, U08, 312, [7:7], "OR", "AND"
+ staged_pw1_0 = bits, U08, 312, [7:7], "Off", "On"
+ staged_transition_events = scalar, U08, 313, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
+ staged_param_1 = scalar, S16, 314, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_param_2 = scalar, S16, 316, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_1 = scalar, S16, 318, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+ staged_hyst_2 = scalar, S16, 320, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
+
+; Nitrous System
+ N2Oopt_01 = bits, U08, 322,[0:1],"INVALID","Bank1", "Bank2", "Both"
+ N2Oopt_2 = bits, U08, 322,[2:2], "Off", "On" ; enables stage 1
+ N2Oopt_3 = bits, U08, 322,[3:3], "Off", "On" ; enables stage 2
+ N2Oopt_4 = bits, U08, 322,[4:4], "Off", "On" ; use AFR2
+ N2Oopt_5 = bits, U08, 322,[5:5], "Off", "On" ; nitrous + launch
+ N2Oopt2_prog_time= bits, U08, 322,[6:7], "RPM-based", "Time-based", "VSS-based", "INVALID"
+;input and output pins moved
+ N2Oopt2_prog = bits, U08, 323,[0:0], "On/Off", "Progressive"
+;
+ N2Oopt2_prog_freq= bits, U08, 323,[2:4], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2Oopt2_prog_freqf= bits, U08, 323,[5:7], "Same", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ N2ORpm = scalar, U16, 324, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2ORpmMax = scalar, U16, 326, "RPM", 1, 0, 1000, {rpmhigh}, 0
+ N2OTps = scalar, S16, 328, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
+
+#if CELSIUS
+ N2OClt = scalar, S16, 330, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes)
+ #else
+ N2OClt = scalar, S16, 330, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1
+#endif
+ N2OAngle = scalar, S16, 332, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2OPWLo = scalar, S16, 334, "ms", 0.004, 0, -128, +128, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2OPWLo = scalar, S16, 334, "ms", 0.001, 0, -32, +32, 3
+ N2OPWHi = scalar, S16, 336, "ms", 0.001, 0, -32, +32, 3
+#endif
+
+;nitrous/launch
+ N2Odel_launch = scalar, U08, 338, "s", 0.01, 0, 0, 2.55, 2
+ N2Odel_flat = scalar, U08, 339, "s", 0.01, 0, 0, 2.55, 2
+ N2Oholdon = scalar, U08, 340, "s", 0.01, 0, 0, 2.55, 2
+;nitrous stage 2
+; Nitrous System
+ N2O2delay = scalar, U08, 341, "s", 0.01, 0, 0, 2.55,2
+ N2O2Rpm = scalar, U16, 342, "RPM", 1, 0, 1000, 25000, 0
+ N2O2RpmMax = scalar, U16, 344, "RPM", 1, 0, 1000, 25000, 0
+ N2O2Angle = scalar, S16, 346, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
+#if PW_4X
+ N2O2PWLo = scalar, S16, 348, "ms", 0.004, 0, -128, +128, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.004, 0, -128, +128, 3
+#else
+ N2O2PWLo = scalar, S16, 348, "ms", 0.001, 0, -32, +32, 3
+ N2O2PWHi = scalar, S16, 350, "ms", 0.001, 0, -32, +32, 3
+#endif
+ RotarySplitModeFD = bits, U08, 352, [0:0], "FC mode", "FD mode"
+ RotarySplitModeNeg = bits, U08, 352, [1:1], "Not Allowed", "Allowed"
+ dlyct = scalar, U08, 353, "", 1,0,0,255,0
+ dwelltime_trl = scalar, U08, 354, "ms", 0.10000, 0, 0.1, 25.5, 1
+ N2Oopt_pins = bits, U08, 355, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ RevLimRtdAng = scalar, S16, 356, "deg", 0.10000, 0.00000,-10, 25.5, 1
+ vss4_can_offset = scalar, U16, 358, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ RevLimNormal2_hyst= scalar,U16, 360, "RPM", 1.00000, 0.00000, 100, 1000, 0
+ pwmidleset_inv = bits, U08, 362, [3:3], "Normal, 0%=off", "Inverted, 100%=off"
+ trig_init = scalar, U08, 363, "", 1,0,0,255,0
+;pwmidle
+ pwmidle_ms = scalar, U16, 364, "ms", 1, 0.00000, 0, 500, 0
+ pwmidle_close_delay = scalar, U08, 366, "s", 1, 0.00000, 0, 10, 0
+ pwmidle_open_duty = scalar, U08, 367, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_open_steps = scalar, U08, 367, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_closed_duty = scalar, U08, 368, "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_closed_steps = scalar, U08, 368, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps
+ pwmidle_pid_wait_timer = scalar, U08, 369, "s", 0.1, 0.00000, 1, 10, 0
+ pwmidle_freq_pin3 = bits, U08, 370, [0:3], "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ pwmidle_freq_koeo = bits, U08, 370, [7:7], "Off", "On"
+ ac_idleup_min_rpm = scalar, U16, 371, "rpm", 1, 0, 0, {rpmhigh}, 0
+ pwmidle_tps_threshold = scalar, U16, 373, "%", 0.1, 0.00000, 0, 1000, 1
+ pwmidle_dp_adder = scalar, U08, 375, "%", 0.392, 0.00000, 0, 20, 1
+ pwmidle_dp_adder_steps = scalar, U08, 375, "steps", 1.00000, 0.00000, 0, 20, 0 ; same but steps
+ pwmidle_rpmdot_threshold = scalar, U16, 376, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
+ pwmidle_decelload_threshold=scalar,U16, 378, "%", 0.1, 0.00000, 0, 100, 1
+ pwmidle_Kp_new = scalar, U16, 380, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Ki_new = scalar, U16, 382, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_Kd_new = scalar, U16, 384, "%", 0.1, 0.00000, 0, 200, 1
+ pwmidle_freq_scale = bits, U08, 386, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ pwmidle_freq_pin = bits, U08, 386, [4:6], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ boost_ctl_settings_freq = bits, U08, 387, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ boost_ctl_settings_on = bits, U08, 387, [3:3], "Off","On"
+ boost_ctl_settings_cl = bits, U08, 387, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_settings_invert_new= bits, U08, 387, [5:5], "Normal", "Inverted"
+
+ boost_ctl_pins = bits, U08, 388, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp = scalar, U08, 389, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki = scalar, U08, 390, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd = scalar, U08, 391, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty = scalar, U08, 392, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty = scalar, U08, 393, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pwm_scale = bits, U08, 396, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ boost_ctl_pwm = bits, U08, 396, [4:5], "INVALID", "Mid","Slow", "INVALID"
+
+ NoiseFilterOpts = bits, U08, 397, [0:0], "Off", "On"
+ NoiseFilterOpts1 = bits, U08, 397, [1:1], "Off", "On"
+ NoiseFilterOpts2 = bits, U08, 397, [2:2], "Off", "On"
+ NoiseFilterOpts3 = bits, U08, 397, [3:3], "Off", "On"
+ launchcuttiming = scalar, S16, 398, "deg", 0.10000, 0.00000, -50.00, 50.00, 1
+ pwmidle_max_rpm_new = scalar, U16, 400, "", 1, 0.00000, 0, 4000, 0
+ pwmidle_targ_ramptime = scalar, U08, 402, "s", 1, 0.00000, 0, 10, 0
+ boost_ctl_pins_pwm = bits, U08, 403, [0:2], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+; gap 24 bytes
+ secondtrigopts = bits, U08, 428, [0:0], "Off", "On"
+ secondtrigopts1 = bits, U08, 428, [1:1], "Off", "On"
+ secondtrigopts2 = bits, U08, 428, [2:2], "Off", "On"
+ secondtrigopts3 = bits, U08, 428, [3:3], "Off", "On"
+
+ TC5_required_width = scalar, U16, 429, "uSec", 1.0, 0.00000, 0.00, 5000, 0 ;
+ egoLimit = scalar, S16, 431, "%", 0.10000, 0.00000, 0.00, 50, 0 ;
+ stoich = scalar, S16, 433, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ MAPOXMin = scalar, S16, 435, "%", 0.10000, 0.00000, -10, {loadhigh}, 2 ; * ( 2 bytes)
+ IC2ISR_tmask = scalar, U08, 437, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
+ IC2ISR_pmask = scalar, U08, 438, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
+;afrload and eaeload are part of extra_load_opts in firmware
+ afrload = bits, U08, 439, [0:3], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ eaeload = bits, U08, 439, [4:7], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+; airden_scaling = scalar, U08, 440, "%", 1, 0.00000, 0, 150.00, 0
+ fan_idleup_vss_hyst = scalar, U16, 441, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 200, 0
+ log_style_led = bits, U08, 443, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ log_style_ledspd = bits, U08, 443, [6:7], "Normal", "Slower", "Faster", "Fastest"
+ primedelay = scalar, U08, 444, "s", 0.1, 0.0, 0.0, 3, 1
+ pwmidle_cl_opts_initvaluetable = bits, U08, 445, [0:0], "Use last value", "Use initial value table"
+ pwmidle_cl_opts_initval_clt = bits, U08, 445, [1:1], "Use MAT", "Use CLT"
+ pwmidle_cl_opts_display_pid = bits, U08, 445, [2:2], "Basic", "Advanced"
+ boost_ctl_flags = bits, U08, 446, [0:1], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ boost_ctl_flags2 = bits, U08, 446, [2:3], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode"
+ idleveadv_to_pid_idleadv = bits, U08, 447, [0:0], "Use normal activation", "Use PID idle activation"
+ idleveadv_to_pid_idleve = bits, U08, 447, [1:1], "Use normal activation", "Use PID idle activation"
+ boost_ctl_sensitivity = scalar, S16, 448, "", 0.1, 0, 0, 500, 1
+ boost_ctl_sensitivity2 = scalar, S16, 450, "", 0.1, 0, 0, 500, 1
+ fuelcut_fuelon_upper_rpmdot = scalar, U16, 452, "rpmdot", 10, 0, 0, 10000, 0
+ fuelcut_fuelon_lower_rpmdot = scalar, U16, 454, "rpmdot", 10, 0, 0, 10000, 0
+#if PW_4X
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.004, 0, 0, 10, 3
+#else
+ staged_secondary_enrichment = scalar, U16, 456, "ms", 0.001, 0, 0, 10, 3
+#endif
+ staged_primary_delay = scalar, U08, 458, "ign events", 1, 0, 0, 30, 0
+
+ idleadvance_on = bits, U08, 459, [0:0], "Off", "On" ;
+ idleve_on = bits, U08, 459, [1:1], "Off", "On"
+ idleve_vsson = bits, U08, 459, [2:3], "Off", "VSS1", "VSS2", "INVALID"
+ idleadv_vsson = bits, U08, 459, [4:5], "Off", "VSS1", "VSS2", "INVALID"
+ idle_special_ops_timing_assist = bits, U08, 459, [6:6], "Off", "On"
+ idleadvance_tps = scalar, S16, 460, "%", 0.1, 0, 0, 100, 1
+ idleadvance_rpm = scalar, U16, 462, "rpm", 1, 0, 0, {rpmhigh}, 0
+ idleadvance_load = scalar, S16, 464, "%", 0.1, 0, 0, 100, 0
+
+#if CELSIUS
+ idleadvance_clt = scalar, S16, 466, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleadvance_clt = scalar, S16, 466, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleadvance_delay = scalar, U08, 468, "s", 1, 0, 0, 5, 0
+ idleadvance_curve = array, S16, 469, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1
+ idleadvance_loads = array, S16, 477, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1
+
+;SD datalogging
+ log_style2_but = bits, U08, 485, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ log_style_block = bits, U08, 486, [0:1], "64 byte", "64 byte + stream", "INVALID", "INVALID"
+ log_style_gps = bits, U08, 486, [5:5], "Off", "On"
+ log_style_on = bits, U08, 486, [6:7], "Disabled", "Insertion", "Button", "Trigger" ; old names
+ log_style_on2 = bits, U08, 486, [6:7], "Disabled", "Always", "Button", "Trigger" ; new names
+
+ log_style2_samp = bits, U08, 487, [3:4], "Timed", "every tooth", "every cycle", "INVALID"
+ log_style2_clg = bits, U08, 487, [5:5], "Off", "On"
+
+ log_style3_adc = bits, U08, 488, [0:2], "INT_MAP", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID"
+ log_length = scalar, U08, 489, "mins", 1, 0, 1, 255, 0
+ log_int = scalar, U16, 490, "ms", 0.128,0,2.0,8388,1
+ log_rate = scalar, U16, 490, "", 1.0, { (1000/log_int) - (log_int/ 0.128) },0,1000,0
+ logFieldOffset = array , U16, 492, [ 64], "", 1.0000, 0.00000, 0.00, 65535, 0 ; * ( 64 words)
+ logFieldLength = array , U08, 620, [ 64], "", 1.0000, 0.00000, 0.00, 255.00, 0 ; * ( 64 bytes)
+
+ firea = scalar, U08, 684, "", 1,0,0,16,0
+ fireb = scalar, U08, 685, "", 1,0,0,16,0
+ firec = scalar, U08, 686, "", 1,0,0,16,0
+ fired = scalar, U08, 687, "", 1,0,0,16,0
+ firee = scalar, U08, 688, "", 1,0,0,16,0
+ firef = scalar, U08, 689, "", 1,0,0,16,0
+ fireg = scalar, U08, 690, "", 1,0,0,16,0
+ fireh = scalar, U08, 691, "", 1,0,0,16,0
+ firei = scalar, U08, 692, "", 1,0,0,16,0
+ firej = scalar, U08, 693, "", 1,0,0,16,0
+ firek = scalar, U08, 694, "", 1,0,0,16,0
+ firel = scalar, U08, 695, "", 1,0,0,16,0
+ firem = scalar, U08, 696, "", 1,0,0,16,0
+ firen = scalar, U08, 697, "", 1,0,0,16,0
+ fireo = scalar, U08, 698, "", 1,0,0,16,0
+ firep = scalar, U08, 699, "", 1,0,0,16,0
+
+ sequential = bits, U08, 700, [0:1], "Off", "Semi-sequential", "Fully Sequential", "INVALID"
+ sequential_angle_spec = bits, U08, 700, [2:4], "INVALID", "End of squirt", "Middle of Squirt", "INVALID", "Beginning of squirt", "INVALID", "INVALID", "INVALID"
+ sequential_trim_on_off = bits, U08, 700, [5:5], "Off", "On"
+
+ boost_launch_duty = scalar, U08, 701, "%", 1,0,0,100,0
+ boost_launch_target = scalar, U16, 702, "kPa", 0.1,0,0,{loadhigh},1
+ boost_feats_tsw = bits, U08, 704, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend Curve(6)","Gear-based", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_feats_launch = bits, U08, 704, [5:5], "Off", "On"
+ boost_feats_timed = bits, U08, 704, [6:6], "Off", "On"
+
+;see lower for launch_var_on
+ launch_3step_in = bits, U08, 705, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ launch_var_low = scalar, U16, 706, "rpm", 1,0,0,{rpmhigh},0
+ launch_var_up = scalar, U16, 708, "rpm", 1,0,0,{rpmhigh},0
+ vssout_scale = scalar, U32, 710, "", 1, 0, 0, 300000, 0
+ launch_sft_deg3 = scalar, S16, 714, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
+ launch_hrd_lim3 = scalar, U16, 716, "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 2 bytes)
+ map_sample_duration = scalar, S16, 718, "deg", 0.10000, 0.00000, 0, 180, 1 ; * ( 2 bytes )
+ opentime_opt1_master = bits, U08, 720, [7:7], "Same", "Individual"
+ opentime_opt1 = bits, U08, 720, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt2 = bits, U08, 721, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt3 = bits, U08, 722, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt4 = bits, U08, 723, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt5 = bits, U08, 724, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt6 = bits, U08, 725, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt7 = bits, U08, 726, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt8 = bits, U08, 727, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta = bits, U08, 728, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opta_pwm= bits, U08, 728, [4:4], "Off", "On"
+ opentime_optb = bits, U08, 729, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_optb_pwm= bits, U08, 729, [4:4], "Off", "On"
+ opentime_optb_own= bits, U08, 729, [5:5], "Off", "On"
+
+ opentime_opt11 = bits, U08, 730, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt12 = bits, U08, 731, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt13 = bits, U08, 732, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt14 = bits, U08, 733, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt15 = bits, U08, 734, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime_opt16 = bits, U08, 735, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt17 = bits, U08, 736, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime_opt18 = bits, U08, 737, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt1_master = bits, U08, 738, [7:7], "Off", "On"
+ smallpw_opt1 = bits, U08, 738, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt2 = bits, U08, 739, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt3 = bits, U08, 740, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt4 = bits, U08, 741, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt5 = bits, U08, 742, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt6 = bits, U08, 743, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt7 = bits, U08, 744, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt8 = bits, U08, 745, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opta = bits, U08, 746, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_optb = bits, U08, 747, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw_opt11 = bits, U08, 748, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt12 = bits, U08, 749, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt13 = bits, U08, 750, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt14 = bits, U08, 751, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt15 = bits, U08, 752, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw_opt16 = bits, U08, 753, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt17 = bits, U08, 754, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw_opt18 = bits, U08, 755, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ maxafr_opt1_on = bits, U08, 756, [0:0], "Off", "On"
+ maxafr_opt1_load= bits,U08, 756, [1:2], "MAP", "TPS", "INVALID", "INVALID"
+ maxafr_opt1_led = bits,U08, 757, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ maxafr_en_load = scalar, U16, 758, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_en_rpm = scalar, U16, 760, "rpm", 1, 0, 0, {rpmhigh}, 0
+ maxafr_en_time = scalar, U16, 762, "s", 0.001, 0, 0, 5.000, 1
+ maxafr_spkcut_time=scalar, U16, 764, "s", 0.001, 0, 0, 5.000, 2
+ maxafr_ret_tps = scalar, S16, 766, "%", 0.10000, 0, 0, 110, 1
+ maxafr_ret_map = scalar, S16, 768, "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr_ret_rpm = scalar, U16, 770, "rpm", 1, 0, 0, {rpmhigh}, 1
+#if PW_4X
+ launch_addfuel = scalar, S16, 772, "ms", 0.004, 0.0000, -128, +128, 3
+#else
+ launch_addfuel = scalar, S16, 772, "ms", 0.001, 0.0000, -32, +32, 3
+#endif
+ wheeldia1 = scalar, U16, 774, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ wheeldia2 = scalar, U16, 778, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 }
+ fdratio1 = scalar, U16, 776, ":1", 0.01, 0.00000, 0.40, 6.0, 2 ; * ( 2 bytes)
+;not a gap
+ vss1_pos = bits, U08, 780, [0:1], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ vss2_pos = bits, U08, 780, [2:3], "Wheel", "Driveline", "Pulses per mile", "Pulses per km"
+ launch_var_on = bits, U08, 781, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ flats_minvss = scalar, U16, 782, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+ vss_opt1 = bits, U08, 784, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss_opt2 = bits, U08, 784, [4:7], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss1_an = bits, U08, 785,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss1_can_id = scalar, U08, 786, "", 1.00000, 0.00000, 0.00, 255, 0 ;
+ tsw_pin_ob = bits, U08, 787, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vss1_can_offset = scalar, U16, 788, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss2_can_offset = scalar, U16, 790, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ MapThreshXTD = scalar, U08, 792, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ MapThreshXTD2 = scalar, U08, 793, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ;
+ vss_opt0_1 = bits, U08, 794, [0:1], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_2 = bits, U08, 794, [2:3], "Off", "Digital", "Analogue", "INVALID"
+ vss_opt0_3 = bits, U08, 794, [4:4], "Off", "On"
+ vss_opt0_4 = bits, U08, 794, [6:6], "Off", "On"
+ ; 1 gap
+ ss_opt1 = bits, U08, 796, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Poll CAN"
+ ss_opt1_spd = bits, U08, 796, [7:7], "Off", "On"
+ vss2_an = bits, U08, 797,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ ss1_pwmseq = scalar, U08, 798, "", 1.00000, 0.00000, 1, 4, 0
+ ss2_pwmseq = scalar, U08, 799, "", 1.00000, 0.00000, 1, 4, 0
+ gear_can_offset = scalar, U16, 800, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ mapsample_opt1 = bits, U08, 802, [0:1], "1", "2", "4", "INVALID"
+ mapsample_opt2 = bits, U08, 802, [2:2], "Use timed min", "Use event average"
+ map2port = bits, U08, 803, [0:4], "Off", "INVALID", "INVALID", "Analog in 3", "Analog in 1", "Analog in 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ n2o1n_pins = bits, U08, 804, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o1f_pins = bits, U08, 805, [0:5], "Same", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2n_pins = bits, U08, 806, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ n2o2f_pins = bits, U08, 807, [0:5], "Same", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+; these an_max did use msToPrefUnitsScale, but that didn't change the values in real time
+ vss1_an_max = scalar, U16, 808, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ vss2_an_max = scalar, U16, 810, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0
+ tsw_pin_rf = bits, U08, 812, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_afr = bits, U08, 813, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "Blend curve(5)", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tsw_pin_stoich = bits, U08, 814, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_vss = bits, U08, 815, [0:1], "Off", "VSS1", "VSS2", "Gear"
+#if PW_4X
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ ReqFuel_alt = scalar, U16, 816, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ stoich_alt = scalar, S16, 818, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1
+
+ water_pins_pump = bits, U08, 820, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ water_pins_valve = bits, U08, 821, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_pins_in_shut = bits, U08, 822, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ water_freq_on = bits, U08, 823,[0:0], "Off", "On"
+ water_freq = bits, U08, 823,[1:4], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ water_freq_type = bits, U08, 823,[5:6], "Off", "Fast", "Slow", "INVALID"
+ boost_vss_tps = scalar, U16, 824, "%", 0.1, 0, 0, 100, 0
+ water_tps = scalar, S16, 826, "%", 0.1, 0, 0, 100, 0
+ water_rpm = scalar, U16, 828, "RPM", 1, 0, 0, {rpmhigh}, 0
+ water_map = scalar, S16, 830, "kPa", 0.1, 0, 0, {loadhigh}, 1
+#if CELSIUS
+ water_mat = scalar, S16, 832, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ water_mat = scalar, S16, 832, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ pwmidle_rpmdot_disablepid = scalar, S16, 834, "", 10.0000, 0.00000, 0, 1000, 0
+ boost_ctl_lowerlimit = scalar, S16, 836, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+
+ enable_pollADC = bits, U08, 838, [0:0], "Disable", "Enable" ; enable_poll
+ enable_pollPWM = bits, U08, 838, [1:2], "Disable", "16bit", "32bit", "INVALID"
+ enable_pollports_digin = bits, U08,838, [3:3], "Disable", "Enable"
+ enable_pollports_digout = bits,U08,838, [4:5], "Disable", "One", "Two", "INVALID"
+ enable_pwmout = bits,U08,838, [6:6], "Disable", "Enable"
+ enable_pwmout255 = bits,U08,838, [7:7], "Disable", "Enable"
+
+ poll_table_rtc = scalar, U08, 839, "", 1.00000, 0.00000, 0, 15, 0
+ poll_tablePWM = scalar, U08, 840, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_tableports = scalar, U08, 841, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ poll_offset_rtc = scalar, S16, 842, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ poll_offsetPWM = scalar, S16, 844, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digin_offset = scalar, S16, 846, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ can_poll_digout_offset = scalar, S16, 848, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+
+ egt_num = bits, U08, 850, [0:4], "Off", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ accXport = bits, U08, 851, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accYport = bits, U08, 852, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accZport = bits, U08, 853, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ accXcal1 = scalar, S16, 854, "ADC", 1, 0, 0, 4095, 0
+ accXcal2 = scalar, S16, 856, "ADC", 1, 0, 0, 4095, 0
+ accYcal1 = scalar, S16, 858, "ADC", 1, 0, 0, 4095, 0
+ accYcal2 = scalar, S16, 860, "ADC", 1, 0, 0, 4095, 0
+ accZcal1 = scalar, S16, 862, "ADC", 1, 0, 0, 4095, 0
+ accZcal2 = scalar, S16, 864, "ADC", 1, 0, 0, 4095, 0
+
+ accxyzLF = scalar, U08, 866, "%", 1, 0, 10, 100, 0
+ egt1port = bits, U08, 867, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt2port = bits, U08, 868, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt3port = bits, U08, 869, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt4port = bits, U08, 870, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt5port = bits, U08, 871, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt6port = bits, U08, 872, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt7port = bits, U08, 873, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt8port = bits, U08, 874, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt9port = bits, U08, 875, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt10port = bits, U08, 876, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt11port = bits, U08, 877, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt12port = bits, U08, 878, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt13port = bits, U08, 879, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt14port = bits, U08, 880, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt15port = bits, U08, 881, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt16port = bits, U08, 882, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egt_conf_action = bits, U08, 883, [0:0], "Off", "On"
+ egt_conf_shutdown = bits, U08, 883, [1:1], "Off", "On"
+ egt_conf_bank = bits, U08, 883, [2:3], "INVALID", "Bank 1", "Bank 2", "Both"
+ egt_conf_percyl = bits, U08, 883, [4:4], "Off", "On"
+;EGT calibration
+#if CELSIUS
+ egtcal_temp0 = scalar, S16, 884, "°C", 0.05555, -320, -40, 1500, 0
+ egtcal_tempmax= scalar, S16, 886, "°C", 0.05555, -320, -40, 1500, 0
+ egt_warn = scalar, S16, 888, "°C", 0.05555, -320, -40, 1500, 0
+ egt_max = scalar, S16, 890, "°C", 0.05555, -320, -40, 1500, 0
+#else
+ egtcal_temp0 = scalar, S16, 884, "°F", 0.1, 0, -40, 2700, 0
+ egtcal_tempmax= scalar, S16, 886, "°F", 0.1, 0, -40, 2700, 0
+ egt_warn = scalar, S16, 888, "°F", 0.1, 0, -40, 2700, 0
+ egt_max = scalar, S16, 890, "°F", 0.1, 0, -40, 2700, 0
+#endif
+ egt_time = scalar, U16, 892, "s", 0.001, 0, 0, 10, 2
+ vss1_can_scale= scalar, U16, 894, "%", 0.1, 0, 0, 6553, 1
+ vss1_can_scale_pulse= scalar, U16, 894, "", 1, 0, 0, 65535, 0
+ vss2_can_scale= scalar, U16, 896, "%", 0.1, 0, 0, 6553, 1
+ vss2_can_scale_pulse= scalar, U16, 896, "", 1, 0, 0, 65535, 0
+ vss1_pwmseq = scalar, U08, 898, "", 1.00000, 0.00000, 1, 4, 0
+ vss2_pwmseq = scalar, U08, 899, "", 1.00000, 0.00000, 1, 4, 0
+ MAFOption = bits, U08, 900, [0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "MAP", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ MAFOption_t = bits, U08, 900, [5:6], "Voltage", "Frequency", "Off", "INVALID"
+ enginesize = scalar, U16, 901, "cc", 1.00000, 0.00000, 0, 65536, 0
+ vssout_opt = bits, U08, 903, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vssout_optunits= bits, U08, 903, [6:7], "Time", "Pulses per mile", "Pulses per km", "INVALID"
+ vss3_can_offset = scalar, U16, 904, "", 1.00000, 0.00000, 0.00, 65535, 0 ;
+ vss1_can_size = bits, U08, 906, [0:0], "8bit", "16bit"
+ vss2_can_size = bits, U08, 906, [1:1], "8bit", "16bit"
+;MAF Freq options in vss_can_size byte
+ MAFOption_f = bits, U08, 906, [6:7], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ canpwm_clk = scalar, U08, 907, "MHz", 1,0,0,100,0
+ canpwm_pre = scalar, U08, 908, "", 1,0,0,255,0
+ canpwm_div = scalar, U08, 909, "", 1,0,0,255,0
+ vss1_can_table = scalar, U08, 910, "", 1,0,0,255,0
+ feature7_mafmat = bits, U08, 911, [0:0], "Off", "On"
+ feature7_maftrim = bits, U08, 911, [1:1], "Off", "On"
+ feature7_mafcalib= bits, U08, 911, [2:2], "Off", "On"
+ feature7_aeevents= bits, U08, 911, [3:3], "Time", "Events"
+ feature7_aetpswot= bits, U08, 911, [4:4], "Off", "On"
+ feature7_batchcrank= bits,U08, 911, [5:5], "Off", "On"
+ feature7_cranktaper= bits,U08, 911, [6:6], "Off", "On"
+ feature7_crtpunits= bits, U08, 911, [7:7], "Time", "Events"
+ vss1LF = scalar, U08, 912, "", 1,0,10,100,0
+ vss2LF = scalar, U08, 913, "", 1,0,10,100,0
+ ss1LF = scalar, U08, 914, "", 1,0,10,100,0
+ ss2LF = scalar, U08, 915, "", 1,0,10,100,0
+#if PW_4X
+ egt_addfuel = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 262.143, 2
+#else
+ egt_addfuel = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 65.535, 2
+#endif
+ launch_fcut_rpm= scalar, U16, 918, "RPM", 1, 0, 1000, 65000, 0
+;gear ratios
+ gear1ratio = scalar, U16, 920, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear2ratio = scalar, U16, 922, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear3ratio = scalar, U16, 924, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear4ratio = scalar, U16, 926, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear5ratio = scalar, U16, 928, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear6ratio = scalar, U16, 930, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes)
+ gear_method = bits, U08, 932, [0:1], "Off", "VSS/RPM", "Analogue", "CAN Gear#"
+ gear_port_an = bits, U08, 933, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ gear0v = scalar, U16, 934, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear1v = scalar, U16, 936, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear2v = scalar, U16, 938, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear3v = scalar, U16, 940, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear4v = scalar, U16, 942, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear5v = scalar, U16, 944, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear6v = scalar, U16, 946, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes)
+ gear_no = scalar, U08, 948, "", 1, 0, 1, 6, 0
+ vssdotLF = scalar, U08, 949, "", 1,0,10,100,0
+ vssdot_int = scalar, U08, 950, "ms", 10, 0 , 10, 2000, 0
+ ac_idleup_io_in = bits, U08, 951, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ac_idleup_settings_inv = bits, U08, 951, [6:6], "Normal", "Inverted"
+ ac_idleup_settings = bits, U08, 951, [7:7], "Off", "On"
+
+ ac_idleup_io_out = bits, U08, 952, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ac_idleup_delay = scalar, U16, 953, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ ac_idleup_adder_duty = scalar, U08, 955, "%", 0.392, 0.00000, 0, 100, 1
+ ac_idleup_adder_steps = scalar, U08, 955, "steps", 1, 0, 0, 255, 0
+ fanctl_settings_on = bits, U08, 956, [7:7], "Off", "On"
+ fanctl_settings_idleup = bits, U08, 956, [6:6], "No", "Yes"
+ fanctl_settings_pin = bits, U08, 956, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fanctl_idleup_delay = scalar, U16, 957, "ms", 1.0000, 0.00000, 0.00, 1000, 0
+ fanctl_idleup_adder_duty = scalar, U08, 959, "%", 0.392, 0.00000, 0, 100, 1
+ fanctl_idleup_adder_steps = scalar, U08, 959, "steps", 1.000, 0.00000, 0, 255, 0
+#if CELSIUS
+ fanctl_ontemp =scalar, S16, 960, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°C", 0.05555, -320.000,-40.00, 150.00, 1
+#else
+ fanctl_ontemp =scalar, S16, 960, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+ fanctl_offtemp =scalar, S16, 962, "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ canadc_opt1 = bits, U08, 964, [0:0], "Off", "On"
+ canadc_opt2 = bits, U08, 964, [1:1], "Off", "On"
+ canadc_opt3 = bits, U08, 964, [2:2], "Off", "On"
+ canadc_opt4 = bits, U08, 964, [3:3], "Off", "On"
+ canadc_opt5 = bits, U08, 964, [4:4], "Off", "On"
+ canadc_opt6 = bits, U08, 964, [5:5], "Off", "On"
+ fanctl_opt2_engineoff = bits, U08, 965, [0:0], "No", "Yes"
+ canadc_id1 = scalar, U08, 966, "", 1, 0, 0, 14, 0
+ canadc_id2 = scalar, U08, 967, "", 1, 0, 0, 14, 0
+ canadc_id3 = scalar, U08, 968, "", 1, 0, 0, 14, 0
+ canadc_id4 = scalar, U08, 969, "", 1, 0, 0, 14, 0
+ canadc_id5 = scalar, U08, 970, "", 1, 0, 0, 14, 0
+ canadc_id6 = scalar, U08, 971, "", 1, 0, 0, 14, 0
+ canadc_tab1 = scalar, U08, 972, "", 1, 0, 0, 31, 0
+ canadc_tab2 = scalar, U08, 973, "", 1, 0, 0, 31, 0
+ canadc_tab3 = scalar, U08, 974, "", 1, 0, 0, 31, 0
+ canadc_tab4 = scalar, U08, 975, "", 1, 0, 0, 31, 0
+ canadc_tab5 = scalar, U08, 976, "", 1, 0, 0, 31, 0
+ canadc_tab6 = scalar, U08, 977, "", 1, 0, 0, 31, 0
+ canadc_off1 = scalar, U16, 978, "", 1, 0, 0, 1023, 0
+ canadc_off2 = scalar, U16, 980, "", 1, 0, 0, 1023, 0
+ canadc_off3 = scalar, U16, 982, "", 1, 0, 0, 1023, 0
+ canadc_off4 = scalar, U16, 984, "", 1, 0, 0, 1023, 0
+ canadc_off5 = scalar, U16, 986, "", 1, 0, 0, 1023, 0
+ canadc_off6 = scalar, U16, 988, "", 1, 0, 0, 1023, 0
+ ac_idleup_cl_targetadder = scalar, S16, 990, "rpm", 1, 0, 0, 700, 0
+ fan_idleup_cl_targetadder = scalar, S16, 992, "rpm", 1, 0, 0, 700, 0
+#if CELSIUS
+ boost_ctl_clt_threshold = scalar, S16, 994, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ boost_ctl_clt_threshold = scalar, S16, 994, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ fan_ctl_settings_acfan = bits, U08, 996, [0:0], "Leave Fan off", "Turn fan on"
+#if LAMBDA
+ ego_upper_bound = scalar, U08, 997, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+ ego_lower_bound = scalar, U08, 998, "Lambda", 0.006803, 0.00000, 0.0476, 1.7, 3
+#else
+ ego_upper_bound = scalar, U08, 997, "AFR", 0.10000, 0.00000, 7, 25, 1
+ ego_lower_bound = scalar, U08, 998, "AFR", 0.10000, 0.00000, 7, 25, 1
+#endif
+ ss_opt2 = bits, U08, 999, [0:3], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Poll CAN"
+ ss_opt2_spd = bits, U08, 999, [7:7], "Off", "On"
+ launch_maxvss = scalar, U16, 1000, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0 ; * ( 2 bytes)
+
+ maf_range = bits, U08, 1002, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
+ ac_delay_since_last_on = scalar, U08, 1003, "s", 1.00000, 0.00000, 0, 30, 0
+ reluctorteeth3 = scalar, U16, 1004, "", 0.01, 0,0,255,2 ; this is SS1
+ reluctorteeth4 = scalar, U16, 1006, "", 0.01, 0,0,255,2 ; this is SS2
+ boost_gear_switch = scalar, U08, 1008, "gear", 1, 0, 1, 7, 0
+ staged_extended_opts_use_v3 = bits, U08, 1009, [0:0], "Use Inj A-H (if possible)", "Use Inj I/J"
+ staged_extended_opts_simult = bits, U08, 1009, [1:1], "Alternating (2 squirts)", "Simultaneous (1 squirt)"
+ staged_extended_opts_pw1off = bits, U08, 1009, [2:2], "Off", "On"
+
+ can_pwmout_id = scalar, U08, 1010, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_tab = scalar, U08, 1011, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_pwmout_offset = scalar, S16, 1012, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
+ idleve_tps = scalar, S16, 1014, "%", 0.10000, 0.00000, 0, 100, 1
+ idleve_rpm = scalar, U16, 1016, "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ idleve_load = scalar, S16, 1018, "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+#if CELSIUS
+ idleve_clt = scalar, S16, 1020, "°C", 0.05555, -320, -40, {clthighlim}, 1
+ #else
+ idleve_clt = scalar, S16, 1020, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1
+#endif
+ idleve_delay = scalar, U08, 1022, "s", 1.00000, 0.0000, 0, 10, 0
+ ac_idleup_cl_lockout_mapadder = scalar, U08, 1023, "%", 0.10000, 0.00000, 0, 25.5, 0
+
+page = 2
+ pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1
+ testop_0 = scalar, U08, 2, "", 1,0,0,255,0
+ testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID"
+ testop_fp = bits, U08, 2, [4:4], "Off", "On"
+ testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
+ testop_pwm = bits, U08, 2, [7:7], "Standard", "As below"
+
+ testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1
+ testint = scalar, U16, 4, "ms", 0.128,0,1,8388,1
+;this depend on single coil or seq etc.
+ testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
+#if PW_4X
+ testpw = scalar, U16, 6, "ms", 0.004, 0.00000, 0, 262.143, 3
+#else
+ testpw = scalar, U16, 6, "ms", 0.001, 0.00000, 0, 65.535, 3
+#endif
+ testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0
+;gap
+ testinjPwmT = scalar, U08, 11, "ms", 0.12800, 0.12800, 0.00, 32.64, 1
+ testinjPwmPd = scalar, U08, 12, "us", 1.00000, 0.00000, 40.00, 100.00, 0
+ testinjPwmP = scalar, U08, 13, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ testsel_inj = bits, U08, 14, [0:3], "InjA", "InjB", "InjC", "InjD", "InjE", "InjF", "InjG", "InjH", "InjI", "InjJ" ,"InjK", "InjL", "INVALID", "INVALID", "INVALID", "INVALID"
+ testsel_coil = bits, U08, 14, [4:7], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "CoilG", "CoilH", "CoilI", "CoilJ", "CoilK", "CoilL", "INVALID", "INVALID", "INVALID", "INVALID"
+ dbgtooth = scalar, U08, 15, "tooth", 1,0,0,255,0
+ iacpostest = scalar, U16, 16, "steps", 1,0,0,65535,0
+ iachometest = scalar, U16, 18, "steps", 1,0,0,65535,0
+ iactest_0 = scalar, U08, 20, "", 1,0,0,255,0
+ flashlock = bits, U08, 21, [0:0], "Locked", "Unlocked" ; tables 0-3
+ boost_ctl_settings_on2 = bits, U08, 22, [3:3], "Off","On"
+ boost_ctl_settings_cl2 = bits, U08, 22, [4:4], "Open-loop", "Closed-loop"
+ boost_ctl_pins2 = bits, U08, 23, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ boost_ctl_Kp2 = scalar, U08, 24, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Ki2 = scalar, U08, 25, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_Kd2 = scalar, U08, 26, "%", 1, 0.00000, 0, 200, 0
+ boost_ctl_closeduty2 = scalar, U08, 27, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_openduty2 = scalar, U08, 28, "%", 1, 0.00000, 0, 100, 0
+ boost_ctl_pins_pwm2 = bits, U08, 29, [0:2], "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J"
+ boost_ctl_lowerlimit2 = scalar, S16, 30, "kPa",0.10000, 0.00000, 5, {loadhigh}, 1
+ boost_ctl_sensor2 = bits, U08, 32, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+
+ vss_opt3 = bits, U08, 33, [0:3], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+ vss_opt4 = bits, U08, 33, [4:7], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "CAN VSS", "Use CAN PWMin"
+
+ vss3_an = bits, U08, 34,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss4_an = bits, U08, 35,[0:4], "INVALID", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ vss3_pwmseq = scalar, U08, 36, "", 1.00000, 0.00000, 1, 4, 0
+ vss4_pwmseq = scalar, U08, 37, "", 1.00000, 0.00000, 1, 4, 0
+ u08_debug38 = scalar, U08, 38, "", 1, 0.00000, 0, +255, 0
+ u08_debug38_0 = bits, U08, 38, [0:0], "Normal", "Loopback"
+ u08_debug38_1 = bits, U08, 38, [1:1], "Off", "On"
+; pad gap
+
+ egoport1 = bits, U08, 40, [0:4], "Normal EGO", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport2 = bits, U08, 41, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport3 = bits, U08, 42, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport4 = bits, U08, 43, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport5 = bits, U08, 44, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport6 = bits, U08, 45, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport7 = bits, U08, 46, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport8 = bits, U08, 47, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport9 = bits, U08, 48, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport10 = bits, U08, 49, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport11 = bits, U08, 50, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport12 = bits, U08, 51, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport13 = bits, U08, 52, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport14 = bits, U08, 53, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport15 = bits, U08, 54, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ egoport16 = bits, U08, 55, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "CAN EGO", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ egomap1 = bits, U08, 56, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap2 = bits, U08, 57, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap3 = bits, U08, 58, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap4 = bits, U08, 59, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap5 = bits, U08, 60, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap6 = bits, U08, 61, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap7 = bits, U08, 62, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap8 = bits, U08, 63, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap9 = bits, U08, 64, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap10 = bits, U08, 65, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap11 = bits, U08, 66, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap12 = bits, U08, 67, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap13 = bits, U08, 68, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap14 = bits, U08, 69, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap15 = bits, U08, 70, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+ egomap16 = bits, U08, 71, [0:3], "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16"
+;egomap?t is not presently implemented in the code
+ egomap1t = bits, U08, 56, [4:4], "1", "2"
+ egomap2t = bits, U08, 57, [4:4], "1", "2"
+ egomap3t = bits, U08, 58, [4:4], "1", "2"
+ egomap4t = bits, U08, 59, [4:4], "1", "2"
+ egomap5t = bits, U08, 60, [4:4], "1", "2"
+ egomap6t = bits, U08, 61, [4:4], "1", "2"
+ egomap7t = bits, U08, 62, [4:4], "1", "2"
+ egomap8t = bits, U08, 63, [4:4], "1", "2"
+ egomap9t = bits, U08, 64, [4:4], "1", "2"
+ egomap10t = bits, U08, 65, [4:4], "1", "2"
+ egomap11t = bits, U08, 66, [4:4], "1", "2"
+ egomap12t = bits, U08, 67, [4:4], "1", "2"
+ egomap13t = bits, U08, 68, [4:4], "1", "2"
+ egomap14t = bits, U08, 69, [4:4], "1", "2"
+ egomap15t = bits, U08, 70, [4:4], "1", "2"
+ egomap16t = bits, U08, 71, [4:4], "1", "2"
+
+ tc_opt_on = bits, U08, 72, [0:0], "Off", "On"
+ tc_opt_method = bits, U08, 72, [1:2], "Perfect Run", "VSS %slip", "Perfect Run RPM", "Switch input"
+ tc_opt_slipcurve=bits,U08, 72, [4:4], "Fixed value", "Adjustable"
+ tc_opt_n2o = bits, U08, 72, [5:5], "On/Off", "INVALID"
+ tc_opt_bank = bits, U08, 72, [6:7], "INVALID", "Bank 1", "Bank 2", "Both"
+ tc_slipthresh = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
+ tc_minvss = scalar, U16, 74, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_maxvss = scalar, U16, 76, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_mintps = scalar, S16, 78, "%", 0.10000, 0.00000, 0, 100, 1
+ tc_enin = bits, U08, 80, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ knock_bpass = bits, U08, 81, [0:5], "1.22", "1.26", "1.31", "1.35", "1.40", "1.45", "1.51", "1.57", "1.63", "1.71", "1.78", "1.87", "1.96", "2.07", "2.18", "2.31", "2.46", "2.54", "2.62", "2.71", "2.81", "2.92", "3.03", "3.15", "3.28", "3.43", "3.59", "3.76", "3.95", "4.16", "4.39", "4.66", "4.95", "5.12", "5.29", "5.48", "5.68", "5.90", "6.12", "6.37", "6.64", "6.94", "7.27", "7.63", "8.02", "8.46", "8.95", "9.50", "10.12", "10.46", "10.83", "11.22", "11.65", "12.10", "12.60", "13.14", "13.72", "14.36", "15.07", "15.84", "16.71", "17.67", "18.76", "19.98"
+ knock_conf_num = bits, U08, 82, [0:0], "1", "2"
+ knock_conf_debug = bits, U08, 82, [4:4], "Off", "On"
+ knock_conf_percylact = bits, U08, 82, [5:5], "Off", "On"
+ knock_conf_launch = bits, U08, 82, [6:6], "Off", "On"
+ knock_conf_percyl = bits, U08, 82, [7:7], "Off", "On"
+ knock_int = bits, U08, 83, [0:4], "40", "45", "50", "55", "60", "65", "70", "75", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240", "260", "280", "300", "320", "360", "400", "440", "480", "520", "560", "600"
+
+ ff_tpw0 = scalar, U08, 84, "ms", 0.05, 0, 0, 12.7, 2
+ ff_tpw1 = scalar, U08, 85, "ms", 0.05, 0, 0, 12.7, 2
+#if CELSIUS
+ ff_temp0 = scalar, S16, 86, "°C", 0.05555, -320, -40, 150.00, 1
+ ff_temp1 = scalar, S16, 88, "°C", 0.05555, -320, -40, 150.00, 1
+#else
+ ff_temp0 = scalar, S16, 86, "°F", 0.10000, 0.00000, -40, 300, 1
+ ff_temp1 = scalar, S16, 88, "°F", 0.10000, 0.00000, -40, 300, 1
+#endif
+ fueltemp1 = bits, U08, 90, [0:4], "Off", "Flex fuel", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ fueltemp1_corr = bits, U08, 90, [7:7], "Off", "On"
+ tc_knob = bits, U08, 91, [0:4], "Normal EGO", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ maf_freq0 = scalar, U16, 92, "Hz", 0.25, 0.00000, 0, 16383,1
+ maf_freq1 = scalar, U16, 94, "Hz", 0.25, 0.00000, 0, 16383,1
+ map_freq0 = scalar, U16, 96, "Hz", 0.2, 0.00000, 0, 13107,1
+ map_freq1 = scalar, U16, 98, "Hz", 0.2, 0.00000, 0, 13107,1
+
+ knock_gain01 = bits, U08, 100, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain02 = bits, U08, 101, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain03 = bits, U08, 102, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain04 = bits, U08, 103, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain05 = bits, U08, 104, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain06 = bits, U08, 105, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain07 = bits, U08, 106, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain08 = bits, U08, 107, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain09 = bits, U08, 108, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain10 = bits, U08, 109, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain11 = bits, U08, 110, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain12 = bits, U08, 111, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain13 = bits, U08, 112, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain14 = bits, U08, 113, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain15 = bits, U08, 114, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+ knock_gain16 = bits, U08, 115, [0:5], "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111"
+
+ knock_sens01 = bits, U08, 116, [0:0], "1", "2"
+ knock_sens02 = bits, U08, 117, [0:0], "1", "2"
+ knock_sens03 = bits, U08, 118, [0:0], "1", "2"
+ knock_sens04 = bits, U08, 119, [0:0], "1", "2"
+ knock_sens05 = bits, U08, 120, [0:0], "1", "2"
+ knock_sens06 = bits, U08, 121, [0:0], "1", "2"
+ knock_sens07 = bits, U08, 122, [0:0], "1", "2"
+ knock_sens08 = bits, U08, 123, [0:0], "1", "2"
+ knock_sens09 = bits, U08, 124, [0:0], "1", "2"
+ knock_sens10 = bits, U08, 125, [0:0], "1", "2"
+ knock_sens11 = bits, U08, 126, [0:0], "1", "2"
+ knock_sens12 = bits, U08, 127, [0:0], "1", "2"
+ knock_sens13 = bits, U08, 128, [0:0], "1", "2"
+ knock_sens14 = bits, U08, 129, [0:0], "1", "2"
+ knock_sens15 = bits, U08, 130, [0:0], "1", "2"
+ knock_sens16 = bits, U08, 131, [0:0], "1", "2"
+ s16_debug = scalar, S16, 132, "", 1, 0.00000, -32768, +32767, 0
+ u08_debug134 = scalar, U08, 134, "", 1, 0.00000, 0, +255, 0
+ AE_options = bits, U08, 135, [0:0], "Time-based AE", "Accel-pump AE"
+ accel_blend_percent = scalar, S16, 136, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold = scalar, U16, 138, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold = scalar, U16, 140, "kpa/sec", 1, 0, 0, 20000, 0
+ ae_lorpm2 = scalar, U16, 142, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ ae_hirpm2 = scalar, U16, 144, "rpm", 1.0, 0.0, 0.0, {rpmhigh}, 0
+ accel_blend_percent2 = scalar, S16, 146, "%", 0.1, 0.0, 0, 100, 1
+ accel_tpsdot_threshold2 = scalar, U16, 148, "%/sec", 0.1, 0, 0, 3276, 0
+ accel_mapdot_threshold2 = scalar, U16, 150, "kpa/sec", 1, 0, 0, 20000, 0
+ tpsThresh2 = scalar, S16, 152, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1
+ mapThresh2 = scalar, S16, 154, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0
+ aeEndPW2 = scalar, S16, 156, "%ReqFuel", 1, 0.00000, 0.00, 100, 0
+ taeColdA2 = scalar, U08, 158, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ taeColdM2 = scalar, U08, 159, "%", 1.00000, 0.00000, 100, 255.00, 0
+ taeTime2 = scalar, U08, 160, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ taeTime_events2 = scalar, U08, 160, "events", 1, 0.00000, 0.00, 255, 0
+ tdePct2 = scalar, U08, 161, "", 1.00000, 0.00000, 50.00, 100.00, 0
+ aeTaperTime2 = scalar, U08, 162, "s", 0.010000, 0.00000, 0.00, 1.00, 2
+ aeTaperTime_events2= scalar, U08, 162, "events", 1, 0.00000, 0.00, 255, 0
+ tpsProportion2 = scalar, U08, 163, "%", 1.00000, 0.00000, 0.00, 100.00, 0
+ accel_CLT_multiplier2 = scalar, S16, 164, "%", 0.1, 0, 100, 255, 1
+ tc_led_out = bits, U08, 166, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+;gap
+;gap
+;gap
+ accel_CLT_multiplier = scalar, S16, 206, "%", 0.1, 0, 100, 255, 1
+ cl_idle_timing_target_deltas = array, S16, 208, [8], "rpm", 1, 0, -1000, 1000, 0
+ cl_idle_timing_advance_deltas = array, S16, 224, [8], "deg", 0.1, 0, -90, 90, 0
+
+ ltt_opt_on = bits, U08, 240, [0:0], "Off", "On"
+ ltt_opt_mode = bits, U08, 240, [1:1], "Timed", "Button"
+ ltt_opt_feedback = bits, U08, 240, [2:2], "Off", "On"
+ ltt_but_in = bits, U08, 241, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ ltt_int = scalar, U08, 242, "min", 1, 0.00000, 5, 30, 0
+ ltt_led_out = bits, U08, 243, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ ltt_thresh = scalar, U16, 244, "%", 0.1, 0.0, 10, 65535, 1
+
+ tc_minmap = scalar, S16, 246, "kPa", 0.10000, 0.00000, 0, 100, 1
+ can_bcast1_on = bits, U08, 248, [0:0], "Off", "On"
+ can_bcast1_280x4 = bits, U08, 248, [1:1], "Off", "On"
+ can_bcast1_280x1 = bits, U08, 248, [2:2], "Off", "On"
+ can_bcast1_289 = bits, U08, 248, [3:3], "Off", "On"
+ can_bcast1_316 = bits, U08, 248, [4:4], "Off", "On"
+ can_bcast1_329 = bits, U08, 248, [5:5], "Off", "On"
+ can_bcast1_561 = bits, U08, 248, [6:6], "Off", "On"
+ can_bcast1_361 = bits, U08, 248, [7:7], "Off", "On"
+
+ can_bcast2_041 = bits, U08, 249, [0:0], "Off", "On"
+ can_bcast2_he351 = bits, U08, 249, [1:1], "Off", "On"
+ can_bcast2_xxx = bits, U08, 249, [7:7], "Off", "On"
+
+ can_bcast_int = scalar, U16, 250, "ms", 0.128, 0.00000, 50, 1000,1
+
+ timedout1_in = bits, U08, 252, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "Same as launch", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ timedout1_out = bits, U08, 253, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ timedout1_offdelay = scalar, U16, 254, "s", 0.001, 0, 0, 15, 3
+ tstop_out = bits, U08, 256, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ can_enable_on = bits, U08, 257, [0:0], "Off", "On"
+ tstop_delay = scalar, U16, 258, "s", 0.001, 0, 0, 15, 3
+ tstop_hold = scalar, U16, 260, "s", 0.001, 0, 0, 15, 3
+ oddfireangs1 = scalar, U16, 262, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs2 = scalar, U16, 264, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs3 = scalar, U16, 266, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs4 = scalar, U16, 268, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs5 = scalar, U16, 270, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+ oddfireangs6 = scalar, U16, 272, "", 0.10000, 0.00000, 0.00, 720.00, 0 ; * ( 2 byte)
+
+ cel_opt_on = bits, U08, 274, [0:0], "Off", "On"
+ cel_opt_stat = bits, U08, 274, [1:3], "Off", "MAP", "MAT", "CLT", "TPS", "Batt", "EGO", "EGT1"
+ cel_opt_adc = bits, U08, 274, [5:5], "Fluctuation", "ADC counts"
+ cel_opt_flash = bits, U08, 274, [6:6], "Solid", "Flash-codes"
+ cel_opt_when = bits, U08, 274, [7:7], "Off", "On"
+
+ cel_port = bits, U08, 275, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ afr_min = scalar, U08, 276, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_max = scalar, U08, 277, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
+ afr_var_upper = scalar, U16, 278, "", 1, 0, 0.00, 65535, 0
+ afr_var_lower = scalar, U16, 280, "", 1, 0, 0.00, 65535, 0
+ map_minadc = scalar, U16, 282, "", 1, 0, 0.00, 1023, 0
+ map_maxadc = scalar, U16, 284, "", 1, 0, 0.00, 1023, 0
+ map_var_upper = scalar, U16, 286, "", 1, 0, 0.00, 65535, 0
+ mat_minadc = scalar, U16, 288, "", 1, 0, 0.00, 1023, 0
+ mat_maxadc = scalar, U16, 290, "", 1, 0, 0.00, 1023, 0
+ mat_var_upper = scalar, U16, 292, "", 1, 0, 0.00, 65535, 0
+ clt_minadc = scalar, U16, 294, "", 1, 0, 0.00, 1023, 0
+ clt_maxadc = scalar, U16, 296, "", 1, 0, 0.00, 1023, 0
+ clt_var_upper = scalar, U16, 298, "", 1, 0, 0.00, 65535, 0
+ tps_minadc = scalar, U16, 300, "", 1, 0, 0.00, 1023, 0
+ tps_maxadc = scalar, U16, 302, "", 1, 0, 0.00, 1023, 0
+ tps_var_upper = scalar, U16, 304, "", 1, 0, 0.00, 65535, 0
+ batt_minv = scalar, U08, 306, "", 0.1, 0, 7.00, 23.0, 1
+ batt_maxv = scalar, U08, 307, "", 0.1, 0, 7.00, 23.0, 1
+ batt_var_upper = scalar, U16, 308, "", 1, 0, 0.00, 65535, 0
+ cel_opt2_map = bits, U08, 310, [0:0], "Off", "On"
+ cel_opt2_mat = bits, U08, 310, [1:1], "Off", "On"
+ cel_opt2_clt = bits, U08, 310, [2:2], "Off", "On"
+ cel_opt2_tps = bits, U08, 310, [3:3], "Off", "On"
+ cel_opt2_batt = bits, U08, 310, [4:4], "Off", "On"
+ cel_opt2_afr0 = bits, U08, 310, [5:5], "Off", "On"
+ cel_opt2_sync = bits, U08, 310, [6:6], "Off", "On"
+ cel_opt2_egt = bits, U08, 310, [7:7], "Off", "On"
+ cel_action1_map = bits, U08, 311, [0:0], "Off", "On"
+ cel_action1_mat = bits, U08, 311, [1:1], "Off", "On"
+ cel_action1_clt = bits, U08, 311, [2:2], "Off", "On"
+ cel_action1_tps = bits, U08, 311, [3:3], "Off", "On"
+ cel_action1_batt= bits, U08, 311, [4:4], "Off", "On"
+ cel_action1_ego = bits, U08, 311, [5:5], "Off", "On"
+ cel_action1_sync = bits, U08, 311, [6:6], "Off", "On"
+ cel_action1_map_an = bits, U08, 311, [7:7], "Off", "On"
+#if CELSIUS
+ cel_clt_cold = scalar, S16, 312, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_clt_cold = scalar, S16, 312, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ cel_clt_warm = scalar, S16, 314, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_warmtime = scalar, U16, 316, "mins", 0.01666, 9, 1, 20,1
+#if CELSIUS
+ cel_mat_default = scalar, S16, 318, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+#else
+ cel_mat_default = scalar, S16, 318, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ cel_revlim = scalar, S16, 320, "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ cel_overboost = scalar, S16, 322, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ cel_boost_duty = scalar, U08, 324, "%", 1, 0.00000, 0, 100, 0
+ cel_boost_duty2 = scalar, U08, 325, "%", 1, 0.00000, 0, 100, 0
+ cel_synctol = scalar, U08, 326, "", 1, 0.00000, 0, 100, 0
+ cel_opt3_flex = bits, U08, 327, [0:0], "Off", "On"
+
+ cel_retard = scalar, S16, 328, "deg", 0.10000, 0.00000,0.00, 10.00, 1
+ map_var_lower = scalar, U16, 330, "", 1, 0, 0.00, 65535, 0
+#if CELSIUS
+ egt_minvalid = scalar, S16, 332, "°C", 0.05555, -320.000,-40.00, 1500, 1
+ egt_maxvalid = scalar, S16, 334, "°C", 0.05555, -320.000,-40.00, 1500, 1
+#else
+ egt_minvalid = scalar, S16, 332, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+ egt_maxvalid = scalar, S16, 334, "°F", 0.10000, 0.00000,-40.00, 2700, 1
+#endif
+ egt_var_upper = scalar, U16, 336, "", 1, 0, 0.00, 65535, 0
+ egt_var_lower = scalar, U16, 338, "", 1, 0, 0.00, 65535, 0
+ cel_runtime = scalar, U08, 340, "s", 1, 0.00000, 5, 100, 0
+ cel_action2_flex = bits, U08, 341, [0:0], "Off", "On"
+ cel_action2_egt = bits, U08, 341, [1:1], "Off", "On"
+
+ blend_opt1 = bits, U08, 342, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt2 = bits, U08, 343, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt3 = bits, U08, 344, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt4 = bits, U08, 345, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt5 = bits, U08, 346, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt6 = bits, U08, 347, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+ blend_opt7 = bits, U08, 348, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16"
+;gap in case of more blend curve options
+ fp_opt_mode = bits, U08, 350, [0:1], "On/Off", "Open-Loop PWM", "Closed-Loop PWM", "INVALID"
+ fp_opt_reg = bits, U08, 350, [4:5], "Vac referenced", "Fixed pressure", "Custom correction", "INVALID"
+ fp_opt_inv = bits, U08, 350, [6:6], "Normal", "Inverted"
+ fp_opt_safety = bits, U08, 350, [7:7], "Off", "On"
+ fp_out1 = bits, U08, 351, [0:5], "Fuel Pump", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ rail_pressure_psig = scalar, U16, 352, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ rail_pressure_kpag = scalar, U16, 352, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_Kp = scalar, U16, 354, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Ki = scalar, U16, 356, "%", 0.1, 0.00000, 0, 200, 1
+ fp_Kd = scalar, U16, 358, "%", 0.1, 0.00000, 0, 200, 1
+ fp_prime_duty = scalar, U08, 360, "%", 0.392, 0.00000, 0, 100, 1
+ fp_press_in = bits, U08, 361, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ fp_press_type = bits, U08, 361, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+ fp_freq = bits, U08, 362, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+;spare
+ alternator_opt_mode = bits, U08, 364, [0:2], "Off", "On-Off", "Open-loop frequency", "Open-loop duty", "Closed-loop field control", "High-speed feedback field control", "INVALID", "INVALID"
+; possible application specific option bits
+ alternator_freq = bits, U08, 365, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ alternator_controlout = bits, U08, 366, [0:4], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_control_inv = bits, U08, 366, [6:6], "Normal", "Inverted"
+ alternator_lampout = bits, U08, 367, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ alternator_Kp = scalar, U16, 368, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Ki = scalar, U16, 370, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_Kd = scalar, U16, 372, "%", 0.1, 0.00000, 0, 200, 1
+ alternator_startdelay = scalar, U08, 374, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_ramptime = scalar, U08, 375, "s", 0.1, 0.00000, 0, 25.5, 1
+ alternator_wot = scalar, U16, 376, "%", 0.1, 0.00000, 0, 110, 1
+ alternator_wotv = scalar, U08, 378, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_overrv = scalar, U08, 379, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_wottimeout = scalar, U08, 380, "s", 1, 0.00000, 0, 30, 0
+ alternator_tempin = bits, U08, 381, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ alternator_freq_monin = bits, U08, 382, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_moninv = bits, U08, 382, [6:6], "Normal", "Inverted"
+ alternator_targv = scalar, U08, 383, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_ctl_ms = scalar, U16, 384, "ms", 0.128, 0.00000, 10, 500, 0
+ fp_ctl_ms = scalar, U16, 386, "ms", 0.128, 0.00000, 10, 500, 0
+ alternator_freq_currin = bits, U08, 388, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ alternator_freq_currinv = bits, U08, 388, [6:6], "Normal", "Inverted"
+ alternator_chargetime = scalar, U08, 389, "min", 1, 0.00000, 0, 30, 0
+ alternator_targvr = scalar, U08, 390, "V", 0.1, 0.00000, 10.0, 16.0, 1
+ alternator_diff = scalar, U08, 391, "V", 0.1, 0.00000, 0.1, 3.0, 1
+ alternator_maxload = scalar, U08, 392, "%", 1, 0.00000, 75, 101, 0
+ hpte_opt_on = bits, U08, 393, [0:0], "Off","On"
+ hpte_load = scalar, S16, 394, "%", 0.10000, 0, 0, {loadhigh}, 1
+ hpte_rpm = scalar, U16, 396, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_opt_pins = bits, U08, 398, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ shiftlight_opt_gear = bits, U08, 398, [7:7], "Off", "On"
+ fc_trans_time_ret = scalar, U08, 399, "s", 0.1, 0, 0.5, 5.0, 1
+ shiftlight_limit1 = scalar, U16, 400, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit2 = scalar, U16, 402, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit3 = scalar, U16, 404, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit4 = scalar, U16, 406, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit5 = scalar, U16, 408, "rpm", 1, 0, 0, {rpmhigh}, 0
+ shiftlight_limit6 = scalar, U16, 410, "rpm", 1, 0, 0, {rpmhigh}, 0
+ ltt_samp_time = scalar, U08, 412, "s", 1, 0, 0, 255, 0
+ ltt_agg = scalar, U08, 413, "", 1, 0, 10, 255, 0
+ oilpress_in = bits, U08, 414, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1
+ oilpress_out = bits, U08, 415, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelcalctime = scalar, U16, 416, "ms", 0.128, 0, 100, 8000, 0
+ alternator_sensitivity = scalar, U16, 420, "", 0.1, 0.00000, 0, 20, 0
+ idleminvss = scalar, U16, 422, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 200, 0
+
+ flex_baseline = scalar, U16, 424, "%", 0.1, 0.00000, 0, 100,1
+ fc_transition_time = scalar, U08, 426, "s", 0.1, 0, 0.5, 5.0, 1
+ fc_ae_time = scalar, U08, 427, "s", 0.01, 0, 0, 0.5, 2
+ fc_timing = scalar, S16, 428, "deg", 0.10000, 0.00000, -90.0, 180.00, 2
+ fc_ae_pct = scalar, U08, 430, "%ReqFuel", 1, 0.00000, 0, 255, 0
+ fp_off_duty = scalar, U08, 431, "%", 0.392, 0.00000, 0, 100, 1
+ fp_min_duty = scalar, U08, 432, "%", 0.392, 0.00000, 0, 100, 1
+ fp_max_duty = scalar, U08, 433, "%", 0.392, 0.00000, 0, 100, 1
+
+ tcs_in = bits, U08, 434, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tcs_moves = scalar, U08, 435, "", 1, 0, 1, 50, 0
+ tcs_offtime = scalar, U16, 436, "s", 0.001, 0, 0.005, 0.100, 3
+ tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.050, 0.200, 3
+
+ boost_geartarg1 = scalar, S16, 440, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg2 = scalar, S16, 442, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg3 = scalar, S16, 444, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg4 = scalar, S16, 446, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg5 = scalar, S16, 448, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ boost_geartarg6 = scalar, S16, 450, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ fp_drop_psig = scalar, U16, 452, "psi.g", 0.0147, 0.00000, 0, 100, 1
+ fp_drop_kpag = scalar, U16, 452, "kPa.g", 0.1, 0.00000, 0, 680, 1
+ fp_drop_load = scalar, U16, 454, "%", 0.1, 0, 0, {loadhigh}, 1
+ fp_drop_rpm = scalar, U16, 456, "rpm", 1, 0, 0, {rpmhigh}, 0
+ fp_drop_time = scalar, U16, 458, "s", 0.001,0, 0, 10, 2
+
+ pwm_opt_load_a_offset = scalar, U16, 460, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_b_offset = scalar, U16, 462, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_c_offset = scalar, U16, 464, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_d_offset = scalar, U16, 466, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_e_offset = scalar, U16, 468, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_f_offset = scalar, U16, 470, "", 1, 0, 0, 65535, 0
+ pwm_opt_load_a_size = scalar, U08, 472, "", 1, 0, 0, 255, 0
+ pwm_opt_load_b_size = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ pwm_opt_load_c_size = scalar, U08, 474, "", 1, 0, 0, 255, 0
+ pwm_opt_load_d_size = scalar, U08, 475, "", 1, 0, 0, 255, 0
+ pwm_opt_load_e_size = scalar, U08, 476, "", 1, 0, 0, 255, 0
+ pwm_opt_load_f_size = scalar, U08, 477, "", 1, 0, 0, 255, 0
+
+ can_gps_id = scalar, U08, 478, "", 1.00000, 0.00000, 0.00, 14, 0 ;
+ can_gps_table = scalar, U08, 479, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
+ can_gps_offset = scalar, U16, 480, "bytes", 1.00000, 0.00000, 0, 4095, 0
+ spkadj_max = scalar, S16, 482, "deg", 0.10000, 0.00000,0, 45, 1
+ spkadj_min = scalar, S16, 484, "deg", 0.10000, 0.00000,-45, 0, 1
+
+ can_outpc_msg = scalar, U16, 486, "", 1, 0.00000, 1, 2047, 0
+ can_outpc_gp00_master = bits, U08, 488, [7:7], "Off", "On"
+ can_outpc_gp00 = bits, U08, 488, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp01 = bits, U08, 489, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp02 = bits, U08, 490, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp03 = bits, U08, 491, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp04 = bits, U08, 492, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp05 = bits, U08, 493, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp06 = bits, U08, 494, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp07 = bits, U08, 495, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp08 = bits, U08, 496, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp09 = bits, U08, 497, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp10 = bits, U08, 498, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp11 = bits, U08, 499, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp12 = bits, U08, 500, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp13 = bits, U08, 501, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp14 = bits, U08, 502, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp15 = bits, U08, 503, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp16 = bits, U08, 504, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp17 = bits, U08, 505, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp18 = bits, U08, 506, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp19 = bits, U08, 507, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp20 = bits, U08, 508, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp21 = bits, U08, 509, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp22 = bits, U08, 510, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp23 = bits, U08, 511, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp24 = bits, U08, 512, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp25 = bits, U08, 513, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp26 = bits, U08, 514, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp27 = bits, U08, 515, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp28 = bits, U08, 516, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp29 = bits, U08, 517, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp30 = bits, U08, 518, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp31 = bits, U08, 519, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp32 = bits, U08, 520, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp33 = bits, U08, 521, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp34 = bits, U08, 522, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp35 = bits, U08, 523, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp36 = bits, U08, 524, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp37 = bits, U08, 525, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp38 = bits, U08, 526, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp39 = bits, U08, 527, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp40 = bits, U08, 528, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp41 = bits, U08, 529, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp42 = bits, U08, 530, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp43 = bits, U08, 531, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp44 = bits, U08, 532, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp45 = bits, U08, 533, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp46 = bits, U08, 534, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp47 = bits, U08, 535, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp48 = bits, U08, 536, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp49 = bits, U08, 537, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp50 = bits, U08, 538, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp51 = bits, U08, 539, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp52 = bits, U08, 540, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp53 = bits, U08, 541, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp54 = bits, U08, 542, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp55 = bits, U08, 543, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp56 = bits, U08, 544, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp57 = bits, U08, 545, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp58 = bits, U08, 546, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp59 = bits, U08, 547, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp60 = bits, U08, 548, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp61 = bits, U08, 549, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp62 = bits, U08, 550, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+ can_outpc_gp63 = bits, U08, 551, [0:2], "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz"
+
+ can_rcv_opt_on = bits, U08, 552, [0:0], "Off", "On"
+; engine_state_accel_fast_thresh = scalar, S16, 553, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_accel_slow_thresh = scalar, S16, 555, "rpm/sec", 10, 0, 0, 20000, 0
+; engine_state_decel_fast_thresh = scalar, S16, 557, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_decel_slow_thresh = scalar, S16, 559, "rpm/sec", 10, 0, -20000, 0, 0
+; engine_state_tps_closed_thresh = scalar, S16, 561, "%", 0.1, 0, 0, 5, 1
+; engine_state_overrun_map_thresh = scalar, S16, 563, "kPa", 0.1, 0, 0, 100, 1
+; engine_state_overrun_rpm_thresh = scalar, U16, 565, "rpm", 1, 0, 0, {rpmhigh}, 0
+
+ vss_samp_int = scalar, U16, 568, "ms", 0.05, 0, 10, 50, 2
+
+; somewhat big gap here
+; ###### ### ##### ##### # ######
+; # # # # # # # # # # #
+; # # # # # # # # #
+; ###### # # #### # #### # # ######
+; # # # # # # # ####### #
+; # # # # # # # # # #
+; ###### ### ##### ##### # # #
+;
+; big pad
+ dummyfield = bits, U08, 637, [0:0], "",""
+
+ staged_out2 = bits, U08, 638, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out2_inv = bits, U08, 638, [7:7], "Normal", "Inverted"
+ staged_out2_time = scalar, U08, 639, "s", 0.1, 0, 0, 1, 1
+ u16_debug640 = scalar, U16, 640, "", 1, 0.00000, 0, 65536, 0
+ staged_out1 = bits, U08, 642, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ staged_out1_inv = bits, U08, 642, [7:7], "Normal", "Inverted"
+ log_style4_opt = bits, U08, 643, [0:1], "RPM", "TPS", "MAP", "INVALID"
+ log_trig_rpm = scalar, U16, 644, "RPM", 1, 0, 0, {rpmhigh}, 0
+ log_trig_tps = scalar, U16, 646, "%", 0.1, 0, 0, 100, 0
+
+ baudhigh = scalar, U32, 648, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes)
+ fuelCorr_default = scalar, U08, 652, "%", 1.00000, 0.00000, 50, 255, 0
+ sdpulse_out = bits, U08, 653, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ fuelSpkDel_default = scalar, S16, 654, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
+ map_phase_thresh = scalar, S16, 656, "kPa", 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ flex_pct0 = scalar, U16, 658, "%", 0.1, 0.00000, 0, 100,1
+ flex_pct1 = scalar, U16, 660, "%", 0.1, 0.00000, 0, 100,1
+
+;generic sensors
+ sensor01_source = bits, U08, 662, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor02_source = bits, U08, 663, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor03_source = bits, U08, 664, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor04_source = bits, U08, 665, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor05_source = bits, U08, 666, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor06_source = bits, U08, 667, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor07_source = bits, U08, 668, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor08_source = bits, U08, 669, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor09_source = bits, U08, 670, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor10_source = bits, U08, 671, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor11_source = bits, U08, 672, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor12_source = bits, U08, 673, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor13_source = bits, U08, 674, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor14_source = bits, U08, 675, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor15_source = bits, U08, 676, [0:4], "Off", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ sensor16_source = bits, U08, 677, [0:4], "INVALID", "ECU temp", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ sensor01_trans = bits, U08, 678, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor02_trans = bits, U08, 679, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor03_trans = bits, U08, 680, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor04_trans = bits, U08, 681, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor05_trans = bits, U08, 682, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor06_trans = bits, U08, 683, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor07_trans = bits, U08, 684, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor08_trans = bits, U08, 685, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor09_trans = bits, U08, 686, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor10_trans = bits, U08, 687, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor11_trans = bits, U08, 688, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor12_trans = bits, U08, 689, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor13_trans = bits, U08, 690, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor14_trans = bits, U08, 691, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor15_trans = bits, U08, 692, [0:2], "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Same as MAF", "GM calibration"
+ sensor16_trans = bits, U08, 693, [0:2], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GM calibration"
+ sensor01_val0 = scalar, S16, 694, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_val0 = scalar, S16, 696, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_val0 = scalar, S16, 698, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_val0 = scalar, S16, 700, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_val0 = scalar, S16, 702, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_val0 = scalar, S16, 704, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_val0 = scalar, S16, 706, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_val0 = scalar, S16, 708, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_val0 = scalar, S16, 710, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_val0 = scalar, S16, 712, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_val0 = scalar, S16, 714, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+
+ sensor12_val0 = scalar, S16, 716, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_val0 = scalar, S16, 718, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_val0 = scalar, S16, 720, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_val0 = scalar, S16, 722, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_val0 = scalar, S16, 724, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01_max = scalar, S16, 726, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor02_max = scalar, S16, 728, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor03_max = scalar, S16, 730, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor04_max = scalar, S16, 732, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor05_max = scalar, S16, 734, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor06_max = scalar, S16, 736, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor07_max = scalar, S16, 738, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor08_max = scalar, S16, 740, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor09_max = scalar, S16, 742, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor10_max = scalar, S16, 744, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor11_max = scalar, S16, 746, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor12_max = scalar, S16, 748, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor13_max = scalar, S16, 750, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor14_max = scalar, S16, 752, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor15_max = scalar, S16, 754, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor16_max = scalar, S16, 756, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes)
+ sensor01LF = scalar, U08, 758, "", 1,0,10,100,0
+ sensor02LF = scalar, U08, 759, "", 1,0,10,100,0
+ sensor03LF = scalar, U08, 760, "", 1,0,10,100,0
+ sensor04LF = scalar, U08, 761, "", 1,0,10,100,0
+ sensor05LF = scalar, U08, 762, "", 1,0,10,100,0
+ sensor06LF = scalar, U08, 763, "", 1,0,10,100,0
+ sensor07LF = scalar, U08, 764, "", 1,0,10,100,0
+ sensor08LF = scalar, U08, 765, "", 1,0,10,100,0
+ sensor09LF = scalar, U08, 766, "", 1,0,10,100,0
+ sensor10LF = scalar, U08, 767, "", 1,0,10,100,0
+ sensor11LF = scalar, U08, 768, "", 1,0,10,100,0
+ sensor12LF = scalar, U08, 769, "", 1,0,10,100,0
+ sensor13LF = scalar, U08, 770, "", 1,0,10,100,0
+ sensor14LF = scalar, U08, 771, "", 1,0,10,100,0
+ sensor15LF = scalar, U08, 772, "", 1,0,10,100,0
+ sensor16LF = scalar, U08, 773, "", 1,0,10,100,0
+ sensor_temp = bits, U08, 774, [0:0], "degF", "degC"
+;pad
+#if PW_4X
+ injOpen1 = scalar, U16, 776, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ injOpen1 = scalar, U16, 776, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen2 = scalar, U16, 778, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen3 = scalar, U16, 780, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen4 = scalar, U16, 782, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen5 = scalar, U16, 784, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen6 = scalar, U16, 786, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen7 = scalar, U16, 788, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpen8 = scalar, U16, 790, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpena = scalar, U16, 792, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ injOpenb = scalar, U16, 794, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ injOpen11 = scalar, U16, 796, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen12 = scalar, U16, 798, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen13 = scalar, U16, 800, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen14 = scalar, U16, 802, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen15 = scalar, U16, 804, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen16 = scalar, U16, 806, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen17 = scalar, U16, 808, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ injOpen18 = scalar, U16, 810, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ shift_cut_on = bits, U08, 812, [0:0], "Off", "On"
+ shift_cut_auto = bits, U08, 812, [1:1], "Button", "Auto"
+ shift_cut_gear = bits, U08, 812, [2:2], "Off", "On"
+ shift_cut_fuel = bits, U08, 812, [3:3], "Off", "On"
+ shift_cut_in = bits, U08, 813, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_out = bits, U08, 814, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ shift_cut_rpm = scalar, U16, 815, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_tps = scalar, U16, 817, "%", 0.1, 0, 0, 100, 0
+ shift_cut_delay = scalar, U08, 819, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_time = scalar, U08, 820, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add12 = scalar, U08, 821, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add23 = scalar, U08, 822, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add34 = scalar, U08, 823, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add45 = scalar, U08, 824, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_add56 = scalar, U08, 825, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_soldelay=scalar, U08, 826, "s", 0.01024, 0, 0, 2.55, 2
+ shift_cut_rpm12 = scalar, U16, 827, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm23 = scalar, U16, 829, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm34 = scalar, U16, 831, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm45 = scalar, U16, 833, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_rpm56 = scalar, U16, 835, "RPM", 1, 0, 0, {rpmhigh}, 0
+ shift_cut_reshift= scalar, U08, 837, "s", 0.01024, 0, 0, 2.55, 2
+;open-loop PWM. all arrays
+ pwm_opt_on_a = bits, U08, 838, [0:0], "Off", "On"
+ pwm_opt_freq_a = bits, U08, 838, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_a = bits, U08, 838, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ pwm_opt_on_b = bits, U08, 839, [0:0], "Off", "On"
+ pwm_opt_freq_b = bits, U08, 839, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_b = bits, U08, 839, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_c = bits, U08, 840, [0:0], "Off", "On"
+ pwm_opt_freq_c = bits, U08, 840, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_c = bits, U08, 840, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_d = bits, U08, 841, [0:0], "Off", "On"
+ pwm_opt_freq_d = bits, U08, 841, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_d = bits, U08, 841, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_e = bits, U08, 842, [0:0], "Off", "On"
+ pwm_opt_freq_e = bits, U08, 842, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_e = bits, U08, 842, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+ pwm_opt_on_f = bits, U08, 843, [0:0], "Off", "On"
+ pwm_opt_freq_f = bits, U08, 843, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ pwm_opt_load_f = bits, U08, 843, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ pwm_opt2_a = bits, U08, 844, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_b = bits, U08, 845, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_c = bits, U08, 846, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_d = bits, U08, 847, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_e = bits, U08, 848, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_opt2_f = bits, U08, 849, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ pwm_onabove_a = scalar, U08, 850, "%", 1, 0, 0, 100, 0
+ pwm_onabove_b = scalar, U08, 851, "%", 1, 0, 0, 100, 0
+ pwm_onabove_c = scalar, U08, 852, "%", 1, 0, 0, 100, 0
+ pwm_onabove_d = scalar, U08, 853, "%", 1, 0, 0, 100, 0
+ pwm_onabove_e = scalar, U08, 854, "%", 1, 0, 0, 100, 0
+ pwm_onabove_f = scalar, U08, 855, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_a = scalar, U08, 856, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_b = scalar, U08, 857, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_c = scalar, U08, 858, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_d = scalar, U08, 859, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_e = scalar, U08, 860, "%", 1, 0, 0, 100, 0
+ pwm_offbelow_f = scalar, U08, 861, "%", 1, 0, 0, 100, 0
+
+ dualfuel_sw_on = bits, U08, 862, [0:0], "Off", "On"
+ dualfuel_sw_fuel = bits,U08, 862, [1:1], "Off", "On"
+ dualfuel_sw_spk = bits, U08, 862, [2:2], "Off", "On"
+ dualfuel_sw_afr = bits, U08, 862, [3:3], "Off", "On"
+ dualfuel_sw_rf = bits, U08, 862, [4:4], "Off", "On"
+ dualfuel_sw_stoich=bits,U08, 862, [5:5], "Off", "On"
+ dualfuel_sw_wue = bits, U08, 862, [6:6], "Off", "On"
+ dualfuel_sw_ase = bits, U08, 862, [7:7], "Off", "On"
+ dualfuel_sw2_prime=bits,U08, 863, [0:0], "Off", "On"
+ dualfuel_sw2_crank=bits,U08, 863, [1:1], "Off", "On"
+ dualfuel_sw2_injp =bits,U08, 863, [2:2], "Off", "On"
+ dualfuel_sw2_smpw =bits,U08, 863, [3:3], "Off", "On"
+ dualfuel_sw2_ob =bits ,U08, 863, [4:4], "Off", "On"
+ dualfuel_sw2_boosw=bits,U08, 863, [5:5], "Off", "On"
+ dualfuel_sw2_ae =bits,U08, 863, [6:6], "Off", "On"
+ opentime2_opt1_master = bits, U08, 864, [7:7], "Same", "Individual"
+ opentime2_opt1 = bits, U08, 864, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt2 = bits, U08, 865, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt3 = bits, U08, 866, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt4 = bits, U08, 867, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt5 = bits, U08, 868, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt6 = bits, U08, 869, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt7 = bits, U08, 870, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt8 = bits, U08, 871, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta = bits, U08, 872, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opta_pwm= bits, U08, 872, [4:4], "Off", "On"
+ opentime2_optb = bits, U08, 873, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_optb_pwm= bits, U08, 873, [4:4], "Off", "On"
+ opentime2_optb_own= bits, U08, 873, [5:5], "Off", "On"
+
+ opentime2_opt11 = bits, U08, 874, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt12 = bits, U08, 875, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt13 = bits, U08, 876, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt14 = bits, U08, 877, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt15 = bits, U08, 878, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ opentime2_opt16 = bits, U08, 879, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt17 = bits, U08, 880, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; opentime2_opt18 = bits, U08, 881, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt1_master = bits, U08, 864, [7:7], "Off", "On"
+ smallpw2_opt1 = bits, U08, 882, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt2 = bits, U08, 883, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt3 = bits, U08, 884, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt4 = bits, U08, 885, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt5 = bits, U08, 886, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt6 = bits, U08, 887, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt7 = bits, U08, 888, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt8 = bits, U08, 889, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opta = bits, U08, 890, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_optb = bits, U08, 891, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ smallpw2_opt11 = bits, U08, 892, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt12 = bits, U08, 893, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt13 = bits, U08, 894, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt14 = bits, U08, 895, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt15 = bits, U08, 896, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+ smallpw2_opt16 = bits, U08, 897, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt17 = bits, U08, 898, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+; smallpw2_opt18 = bits, U08, 899, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4"
+
+ dualfuel_pin = bits, U08, 900, [0:4], "INVALID", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ dualfuel_opt_temp= bits, U08, 901, [0:0], "Off", "On"
+ dualfuel_opt_press=bits, U08, 901, [1:1], "Off", "On"
+ dualfuel_opt_mode = bits,U08, 901, [2:3], "Switching", "Dual table", "Flex blend", "INVALID"
+ dualfuel_opt_out = bits,U08, 901, [4:4], "Shared outputs+relay", "Different outputs"
+
+#if PW_4X
+ inj2Open1 = scalar, U16, 902, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.004, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+
+ inj2Open13 = scalar, U16, 926, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open17 = scalar, U16, 934, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.004, 0.00000, 0.00, 25.50, 3
+#else
+ inj2Open1 = scalar, U16, 902, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open2 = scalar, U16, 904, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open3 = scalar, U16, 906, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open4 = scalar, U16, 908, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open5 = scalar, U16, 910, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open6 = scalar, U16, 912, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open7 = scalar, U16, 914, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Open8 = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Opena = scalar, U16, 918, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+ inj2Openb = scalar, U16, 920, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
+;next 8 not yet used
+ inj2Open11 = scalar, U16, 922, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open12 = scalar, U16, 924, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open13 = scalar, U16, 926, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open14 = scalar, U16, 928, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open15 = scalar, U16, 930, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open16 = scalar, U16, 932, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+
+ inj2Open17 = scalar, U16, 934, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+ inj2Open18 = scalar, U16, 936, "ms", 0.001, 0.00000, 0.00, 25.50, 3
+#endif
+
+ inj2PwmT = scalar, U08, 938, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd = scalar, U08, 939, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP = scalar, U08, 940, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmT2 = scalar, U08, 941, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
+ inj2PwmPd2 = scalar, U08, 942, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
+ inj2PwmP2 = scalar, U08, 943, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
+ dualfuel_temp_sens = bits, U08, 944, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_sens = bits, U08, 945, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15"
+ dualfuel_press_type = bits, U08, 945, [6:7], "Gauge", "Absolute", "Differential", "INVALID"
+; Leave these unused variables matching MS2 in case trans controller erroneously adjusts them
+; FuelAdj 946
+; SpkAdj, 948
+; IdleAdj, 950
+; SprAdj; 952
+
+ pwm_opt_curve_a = bits, U08, 954, [0:0], "Table", "Curve"
+ pwm_opt_curve_b = bits, U08, 954, [1:1], "Table", "Curve"
+ pwm_opt_curve_c = bits, U08, 954, [2:2], "Table", "Curve"
+ pwm_opt_curve_d = bits, U08, 954, [3:3], "Table", "Curve"
+ pwm_opt_curve_e = bits, U08, 954, [4:4], "Table", "Curve"
+ pwm_opt_curve_f = bits, U08, 954, [5:5], "Table", "Curve"
+;gap
+ ITB_load_mappoint = scalar, S16, 956, "% baro", 0.1000, 0, 30, 100.0, 1
+ ITB_load_idletpsthresh = scalar, S16, 958, "%", 0.1000, 0, -10, 100, 0
+ idle_voltage_comp_voltage = array, S16, 960, [6], "V", 0.1000, 0, 9, 17, 1
+ idle_voltage_comp_delta = array, S16, 972, [6], "%", 0.392, 0.00000, -20, 20, 1
+ ac_idleup_max_rpm = scalar, U16, 984, "rpm", 1, 0, 1000, {rpmhigh}, 0
+ llstg_in = bits, U08, 986, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ llstg_out = bits, U08, 987, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ kickdelay = scalar, U16, 988, "ms", 0.001,0.00000,0.1,35.00,3
+ log_trig_map = scalar, S16, 990, "%", 0.1, 0, 0, {loadhigh}, 0
+
+ page = 3 ; 8
+ boost_ctl_load_targets = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if PW_4X
+ primePWTable = array, S16, 256, [ 10], "ms", 0.40000, 0.00000, 0.00, 260.00, 1 ; * ( 20 bytes)
+#else
+ primePWTable = array, S16, 256, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+#endif
+ crankPctTable =array, U16, 276, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable =array, S16, 296, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable =array, S16, 316, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+
+#if CELSIUS
+ matTemps =array, S16, 336, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matTemps =array, S16, 336, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matRetard =array, U08, 348, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
+ EAEAWCRPMbins = array, U16, 354, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAESOCRPMbins = array, U16, 378, [ 12], "rpm", 1.00000, 0.00000,0, {rpmhigh}, 0 ; * (24 bytes)
+ EAEAWCKPAbins = array, U16, 402, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAESOCKPAbins = array, U16, 426, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, {loadhigh}, 0 ; * (24 bytes)
+ EAEBAWC = array, U08, 450, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
+ EAEBSOC = array, U08, 462, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
+ EAEAWN = array, U08, 474, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON = array, U08, 486, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAEAWW = array, U08, 498, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAESOW = array, U08, 510, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+
+ ; Supplemental corrections for barometer and MAT.
+ baroCorrVals = array , S16, 522, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
+#if CELSIUS
+ matCorrTemps2 = array , S16, 540, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps2 = array , S16, 540, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+
+#if CELSIUS
+ temp_table_p5 = array, S16, 558, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p5 = array, S16, 558, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+#if CELSIUS
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+
+ pwmidle_target_rpms = array, U16, 626, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
+#if CELSIUS
+ pwmidle_clt_temps = array, S16, 642, [8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ;
+ #else
+ pwmidle_clt_temps = array, S16, 642, [8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+;gap 20 bytes
+#if CELSIUS
+ RevLimLookup = array , S16, 678, [ 8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+ #else
+ RevLimLookup = array , S16, 678, [ 8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 ; * ( 16 bytes)
+#endif
+ RevLimRpm1 = array , U16, 694, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 16 bytes
+;gap 24 bytes
+ RotarySplitTable = array, S16, 734, [8x8], "deg", 0.10000, 0.00000, -60, 20, 1
+ RotarySplitLoad = array, U16, 862, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, {loadhigh}, 0
+ RotarySplitRPM = array, U16, 878, [ 8 ], "RPM", 1, 0.00000, 0, {rpmhigh}, 0
+
+ NoiseFilterRpm = array, U16, 894, [ 4], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ NoiseFilterLen = array, U16, 902, [ 4], "usec", 1.0, 0.00000, 0.00, 43000, 1
+
+ VariableLagTPSBins = array, U08, 910, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
+ VariableLagMapLags = array, U08, 914, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
+ pwmidle_crank_dutyorsteps_duty = array, U16, 918, [4], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_crank_dutyorsteps_steps = array, U16, 918, [4], "steps", 1, 0, 0, 512, 0
+
+#if CELSIUS
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1
+ #else
+ pwmidle_crank_clt_temps = array, S16, 926, [4], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+#endif
+ matclt_pct = array, U16, 934, [6], "%", 0.010, 0, 0, 100, 1
+ matclt_flow = array, U16, 946, [6], "load*rpm", 100, 0, 0, 6553500, 0
+ ;user defined
+; these are not used by the code and are provided for users to use and learn from
+; if you want to add more... you also have to make matching changes in ms2_extra.h
+; and ms2_extra_main.c
+; note that it you add an 'int' that two bytes are consumed and two of the following
+; spare array will need to be removed!
+ user_value1 = scalar, U16, 958, "", 1, 0, 0, 65535, 0
+ user_value2 = scalar, U16, 960, "", 1, 0, 0, 65535, 0
+ user_conf0 = bits, U08, 962, [0:0], "Off", "On"
+ user_conf1 = bits, U08, 962, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
+;spare 10 bytes
+;end user defined
+;pad1
+ baroCorrDelta = array , S16, 974, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+ matCorrDelta2 = array , S16, 992, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
+; space
+
+page = 4 ; 9 - injector channel trims
+ inj_trima = array , S08, 000, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimb = array , S08, 036, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimc = array , S08, 072, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimd = array , S08, 108, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trime = array , S08, 144, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimf = array , S08, 180, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimg = array , S08, 216, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimh = array , S08, 252, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimi = array , S08, 288, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimj = array , S08, 324, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimk = array , S08, 360, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_triml = array , S08, 396, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimm = array , S08, 432, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimn = array , S08, 468, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimo = array , S08, 504, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+ inj_trimp = array , S08, 540, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes)
+
+ inj_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ inj_trim_load =array, U16, 588, [6], { bitStringValue( algorithmUnits , algorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1
+ inj_timing = array, S16, 600, [12x12], "deg", 0.10000, 0.00000, -360.0, 720.0, 1
+ inj_timing_rpm = array, U16, 888, [12], "rpm", 1, 0, 0, {rpmhigh}, 0
+ inj_timing_load = array, S16, 912, [12], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_load = array, U16, 936, [6], "%", 0.10000, 0, 0, {loadhigh}, 1
+ maxafr1_rpm = array, U16, 948, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if LAMBDA
+ maxafr1_diff = array, U08, 960, [6x6], "Lambda", 0.006803, 0.00000, 0.00, 0.14, 3
+#else
+ maxafr1_diff = array, U08, 960, [6x6], "AFR", 0.10000, 0.00000, 0.00, 2.00, 1
+#endif
+ dwellrpm_dwell = array, U08, 996, [6], "ms", 0.1, 0, 1, 8, 1
+ dwellrpm_rpm = array, U16, 1002, [6], "RPM", 1, 0, 0, 15000, 0
+
+page = 5 ; 10
+ boost_ctl_load_targets2 = array, S16, 0, [8x8], "%", 0.1, 0, 0, {loadhigh}, 1
+ boost_ctl_loadtarg_tps_bins2=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_loadtarg_rpm_bins2=array, U16, 144, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_ctl_pwm_targets2 = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0
+ boost_ctl_pwmtarg_tps_bins2=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1
+ boost_ctl_pwmtarg_rpm_bins2=array, U16, 240, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ boost_timed_pct = array, U08, 256, [ 6 ], "%", 1, 0, 0, 100, 0
+ boost_timed_time= array, U16, 262, [ 6 ], "s", 0.001, 0, 0, 15, 1
+ boostvss_duty = array, U08, 274, [ 6 ], "%", 1, 0, 0, 100, 0
+ boostvss_target = array, U16, 280, [ 6 ], "kPa", 0.1, 0, 0, {loadhigh}, 1
+ boostvss_speed = array, U16, 292, [ 6 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ map_sample_rpms = array, U16, 304, [ 8 ], "rpm", 1, 0, 0, {rpmhigh}, 0
+ map_sample_timing = array, S16, 320, [ 8 ], "deg", 0.10000, 0, -360, 720, 1
+#if LAMBDA
+ afrTable1 = array , U08, 336, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+ afrTable2 = array , U08, 480, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
+#else
+ afrTable1 = array , U08, 336, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+ afrTable2 = array , U08, 480, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
+#endif
+ wueBins = array , U08, 624, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+;gap 8 bytes
+ iacstepTable = array , S16, 642, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
+ arpm_table1 = array , U16, 662, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ arpm_table2 = array , U16, 686, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ amap_table1 = array , S16, 710, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ amap_table2 = array , S16, 734, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ tempTable = array , S16, 758, [ 10], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE ; temp_table
+ #else
+ tempTable = array , S16, 758, [ 10], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1
+ #endif
+;gap
+ dwellvolts = array , U08, 794, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ dwellcorr = array , U08, 800, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
+ cold_adv_table = array , S16, 806, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
+ ipwmTable = array , S16, 826, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
+;846
+ opentimepct0 = array, U16, 846, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct1 = array, U16, 858, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct2 = array, U16, 870, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimepct3 = array, U16, 882, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1
+ opentimev = array, U16, 894, [ 6], "V", 0.100, 0.00000, 6, 19.2, 1
+
+#if PW_4X
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.004, 0.00000, 0.00, 2, 3
+#else
+ smallpw0 = array, U16, 906, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw1 = array, U16, 918, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw2 = array, U16, 930, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpw3 = array, U16, 942, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+ smallpwpw = array, U16, 954, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3
+#endif
+
+ waterinj_rpm = array, U16, 966, [ 8], "RPM", 1, 0.00000, 0.00, {rpmhigh}, 0
+ waterinj_map = array, U16, 982, [ 4], "kPa", 0.1, 0.00000, 0.00, {loadhigh}, 0
+ waterinj_duty = array, U08, 990, [8 x 4], "%", 1, 0, 0, 100, 0
+
+page = 6 ; 11 - spark channel trims
+ spk_trima = array , S08, 000, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimb = array , S08, 036, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimc = array , S08, 072, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimd = array , S08, 108, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trime = array , S08, 144, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimf = array , S08, 180, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimg = array , S08, 216, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimh = array , S08, 252, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimi = array , S08, 288, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimj = array , S08, 324, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimk = array , S08, 360, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_triml = array , S08, 396, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimm = array , S08, 432, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimn = array , S08, 468, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimo = array , S08, 504, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trimp = array , S08, 540, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes)
+ spk_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, {rpmhigh}, 0 ; * (12 bytes)
+ spk_trim_load = array, U16, 588, [6], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.1, 0.0000, 0, {loadhigh}, 1 ; * (12 bytes)
+ XAcc =array, U16, 600, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauAcc =array, U16, 610, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XDec =array, U16, 620, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes)
+ TauDec =array, U16, 630, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes)
+ XTrpms =array, U16, 640, [5], "rpm",1.00000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 10 bytes)
+ XClt =array, U16, 650, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+ TauClt =array, U16, 670, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes)
+#if CELSIUS
+ XClt_temps = array, S16, 690, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ TauClt_temps = array, S16, 710, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ XClt_temps = array, S16, 690, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ TauClt_temps = array, S16, 710, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ launch_time = array, U16, 730, [10], "s", 0.001, 0, 0, 15, 2
+ launch_retard = array, U16, 750, [10], "deg", 0.1, 0, 0, 30, 1
+;gap (68 bytes)
+; staged tables
+ staged_percents=array, U08, 838, [8x8], "%", 1, 0, 0, 100, 0
+ staged_rpms = array, U16, 902, [8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ staged_loads = array, S16, 918, [8], "%", 0.1, 0, 0, 250, 1
+ MAFFlow = array, U16, 934, [12], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 1
+ MAFCor = array, U08, 958, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
+;gap
+ cranktaper_time=array, U16, 994, [6], "s", 0.1, 0, 0, 15, 1
+ cranktaper_timeevents=array,U16, 994, [6], "events", 1, 0, 0, 1000, 0 ; same again, different units
+ cranktaper_pct =array, U16, 1006, [6], "%", 0.1, 0, 0, 500, 0
+
+page = 7 ; 12
+ veTable1 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ; * (512 bytes)
+ veTable2 = array , U16, 512, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+
+page = 8 ; 13
+ advanceTable1 = array , S16, 000, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+ advanceTable2 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes)
+
+page = 9 ; 18
+ veTable3 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable3 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 10 ; 19
+ frpm_table1 = array , U16, 000, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table2 = array , U16, 032, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ frpm_table3 = array , U16, 064, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ fmap_table1 = array , S16, 096, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table2 = array , S16, 128, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ fmap_table3 = array , S16, 160, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+
+ srpm_table1 = array , U16, 192, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table2 = array , U16, 224, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ srpm_table3 = array , U16, 256, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+
+ smap_table1 = array , S16, 288, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table2 = array , S16, 320, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ smap_table3 = array , S16, 352, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ EAEAWCRPMbins2 = array, U16, 384, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAESOCRPMbins2 = array, U16, 408, [ 12], "rpm", 1.0000, 0.00000, 0.00, {rpmhigh}, 0 ; * ( 24 bytes)
+ EAEAWCKPAbins2 = array, U16, 432, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAESOCKPAbins2 = array, U16, 456, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, {loadhigh}, 1
+ EAEBAWC2 = array, U08, 480, [ 12], "%", 1.0000, 0.00000, 0.00, 100.00, 0
+ EAEBSOC2 = array, U08, 492, [ 12], "%", 0.10000, 0.00000, 0.00, 25.5, 1
+ EAEAWN2 = array, U08, 504, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
+ EAESON2 = array, U08, 516, [ 12], "%", 1.00000, 0.00000,0, 200, 0
+ EAEAWW2 = array, U08, 528, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+ EAESOW2 = array, U08, 540, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0
+
+#if CELSIUS
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0
+ #else
+ EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+ EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ ITB_load_loadvals= array, S16, 600, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_switchpoints = array,S16, 624, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1
+ ITB_load_rpms = array, U16, 648, [ 12], "rpm", 1.0000, 0.000, 0, {rpmhigh}, 0
+ idleve_table1 = array, U16, 672, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_table2 = array, U16, 704, [4x4], "%", 0.10000, 0.000, 0, 200, 1
+ idleve_loads1 = array, S16, 736, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_loads2 = array, S16, 744, [4 ], "%", 0.10000, 0.000, 0, 255, 1
+ idleve_rpms1 = array, U16, 752, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+ idleve_rpms2 = array, U16, 760, [4 ], "rpm", 1.00000, 0.000, 0, {rpmhigh}, 0
+;TC
+ tc_perfect_vss = array, U16, 768, [ 10 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, 200, 1
+ tc_perfect_time = array, U16, 788, [ 10 ], "s", 0.001024, 0.00000, 0, 30, 1
+ tc_react_x = array, U16, 808, [ 4 ], "slip% x 0.01s", 0.1, 0.00000, 0, 10000, 1
+ tc_retard = array, U16, 816, [ 4 ], "deg", 0.1, 0.00000, 0, 30, 1
+ tc_spkcut = array, U08, 824, [ 4 ], "cut%", 1, 0.00000, 0, 100, 0
+ tc_addfuel = array, U08, 828, [ 4 ], "add%", 1, 0.00000, 0, 100, 1
+ tc_nitrous = array, U08, 832, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+ tc_boost = array, U08, 836, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1
+;840
+ knock_rpms = array, U16, 840, [10], "rpm", 1, 0, 0, {rpmhigh}, 0
+ knock_thresholds= array, U16, 860, [10], "%", 0.1, 0, 0, 100, 1
+ knock_starts= array, S16, 880, [10], "deg", 0.1, 0, -50, 50, 1
+ knock_durations = array, S16, 900, [10], "deg", 0.1, 0, 0, 50, 1
+;920
+ pwmidle_cl_initialvalue_rpms = array, U16, 920, [5], "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°C", 0.05555, -320, -40, 230, 0
+#else
+ pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°F", 0.10000, 0.000, -40, 450, 0
+#endif
+ pwmidle_cl_initialvalues_duties = array, U08, 940, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
+ pwmidle_cl_initialvalues_steps = array, U08, 940, [5 x 5], "steps", 1, 0, 0, 255, 0
+;pad
+#if CELSIUS
+ knock_clts = array, S16, 966, [ 4], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ knock_clts = array, S16, 966, [ 4], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ knock_upscale = array, U16, 974, [4], "%", 0.1, 0, 100, 600, 1
+ tc_perfect_rpm = array, U16, 982, [ 10 ], "rpm", 1.0000, 0.00000, 0, {rpmhigh}, 0
+ tc_boost_duty_delta = array, S08, 1002, [ 4 ], "+/-duty", 1, 0.00000, -100, 100, 0
+
+page = 11 ; 21
+ pwm_rpms_a = array, S16, 0, [6], "rpm",{ pwm_opt_curve_a == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_a_offset) } , { pwm_opt_curve_a == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_loadvals_a = array, S16, 12, [6], "%", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+ pwm_xaxis_a = array, S16, 0, [12], "", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) }
+
+ pwm_rpms_b = array, S16, 24, [6], "rpm",{ pwm_opt_curve_b == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_b_offset) } , { pwm_opt_curve_b == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_loadvals_b = array, S16, 36, [6], "%", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+ pwm_xaxis_b = array, S16, 24, [12], "", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) }
+
+ pwm_rpms_c = array, S16, 48, [6], "rpm",{ pwm_opt_curve_c == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_c_offset) } , { pwm_opt_curve_c == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_loadvals_c = array, S16, 60, [6], "%", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+ pwm_xaxis_c = array, S16, 48, [12], "", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) }
+
+ pwm_rpms_d = array, S16, 72, [6], "rpm",{ pwm_opt_curve_d == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_d_offset) } , { pwm_opt_curve_d == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_loadvals_d = array, S16, 84, [6], "%", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+ pwm_xaxis_d = array, S16, 72, [12], "", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) }
+
+ pwm_rpms_e = array, S16, 96, [6], "rpm",{ pwm_opt_curve_e == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_e_offset) } , { pwm_opt_curve_e == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_loadvals_e = array, S16, 108,[6], "%", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+ pwm_xaxis_e = array, S16, 96, [12], "", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) }
+
+ pwm_rpms_f = array, S16, 120, [6], "rpm",{ pwm_opt_curve_f == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_f_offset) } , { pwm_opt_curve_f == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? rpmhigh : getChannelMaxByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_loadvals_f = array, S16, 132, [6], "%", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+ pwm_xaxis_f = array, S16, 120, [12], "", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) }
+
+ pwm_duties_a = array, U08, 144, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_a = array, U08, 144, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_b = array, U08, 180, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_b = array, U08, 180, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_c = array, U08, 216, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_c = array, U08, 216, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_d = array, U08, 252, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_d = array, U08, 252, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_e = array, U08, 288, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_e = array, U08, 288, [12], "%", 1, 0, 0, 250, 0
+
+ pwm_duties_f = array, U08, 324, [6x6], "%", 1, 0, 0, 250, 0
+ pwm_yaxis_f = array, U08, 324, [12], "%", 1, 0, 0, 250, 0
+
+ primePWTable2 = array, S16, 360, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
+ crankPctTable2 = array, U16, 380, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
+ asePctTable2 = array, S16, 400, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
+ aseCntTable2 = array, S16, 420, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
+ wueBins2 = array, U08, 440, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes)
+#if CELSIUS
+ temp_table_p21 = array, S16, 450, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ temp_table_p21 = array, S16, 450, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ frpm_table4 = array , U16, 470, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ fmap_table4 = array , S16, 502, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+ srpm_table4 = array , U16, 534, [ 16], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 24 bytes)
+ smap_table4 = array , S16, 566, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1 ; * ( 24 bytes)
+#if CELSIUS
+ dualfuel_temp = array, S16, 598, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ dualfuel_temp = array, S16, 598, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ dualfuel_temp_adj=array, S16, 618, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ dualfuel_press = array, S16, 638, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ dualfuel_press_adj=array, S16, 658, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ inj_timing_sec=array, S16, 678, [12x12], "deg", 0.10000, 0.000, -360, 720, 1
+ inj_timing_sec_load=array, S16, 966, [ 12], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ inj_timing_sec_rpm=array, U16, 990, [ 12], "rpm", 1, 0, 0, {rpmhigh}, 0
+
+page = 12 ; 22
+ veTable4 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, {vehigh}, 1 ;
+ advanceTable4 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
+
+page = 13 ; 23
+ ; Generic on/off outputs "Spare Port Settings"
+ psEnabled = array , U08, 0, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psCondition = array , U08, 51, [ 51x2], "", 1, 0, 32, 124, 0, noSizeMutation
+ psConnector = array , U08, 153, [ 51], "", 1, 0, 32, 124, 0, noSizeMutation
+ psInitValue = array , U08, 204, [ 51], "", 1, 0 0, 1, 0, noSizeMutation
+ psPortValue = array , U08, 255, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation
+ psOutSize = array , U08, 306, [ 51x2], "", 1, 0, 0, 255, 0, noSizeMutation
+ psOutOffset = array , U16, 408, [ 51x2], "", 1, 0, 0, 1024, 0, noSizeMutation
+ psThreshold = array , S16, 612, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ psHysteresis = array , S16, 816, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation
+ ;next is 1020
+ vvt_softout1 = bits, U08, 1020, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout2 = bits, U08, 1021, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout3 = bits, U08, 1022, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ vvt_softout4 = bits, U08, 1023, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+page = 14 ; 24
+ narrowband_tgts = array, U16, 0, [12x12], "V", 0.00488, 0.00000, 0, 1, 3
+ narrowband_tgts_rpms = array, U16, 288, [ 12], "rpm", 1.00000, 0.00000, 0, {rpmhigh}, 0
+ narrowband_tgts_loads = array, S16,312, [ 12], "%", 0.10000, 0.00000, 0, {loadhigh}, 1
+ als_opt_fc = bits, U08, 336, [0:0], "Off", "On"
+ als_opt_sc = bits, U08, 336, [1:1], "Off", "On"
+ als_opt_idle = bits, U08, 336, [2:2], "Off", "On"
+ als_opt_fuel = bits, U08, 336, [3:3], "Off", "On"
+ als_opt_pwmout= bits, U08, 336, [4:4], "Off", "On"
+ als_opt_ri = bits, U08, 336, [5:5], "Off", "On"
+ als_maxtime = scalar, U08, 337, "s", 0.1, 0, 1, 25.5, 1
+; als_mintps = scalar, S16, 338, "%", 0.10000, 0.00000, 0, 100, 1
+ als_maxtps = scalar, S16, 340, "%", 0.10000, 0.00000, 0, 100, 1
+ als_iac_duty = scalar, U08, 342, "%", 0.392, 0.00000, 0, 100, 1
+ als_iac_steps = scalar, U08, 342, "steps", 1, 0, 0, 255, 0
+ als_in_pin = bits, U08, 343, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ als_out_pin = bits, U08, 344, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ als_pwm_duty = scalar, U08, 345, "%", 1, 0, 0, 100, 0
+ als_pausetime = scalar, U08, 346, "s", 0.1, 0, 0, 25.5, 1
+ vvt_slew = scalar, U08, 347, "deg", 0.1, 0, 0.1, 25.5, 1
+#if CELSIUS
+ als_minclt = scalar, S16, 348, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+ als_maxclt = scalar, S16, 350, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_minclt = scalar, S16, 348, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+ als_maxclt = scalar, S16, 350, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+;ALS tables
+ als_rpms = array, U16, 352, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_tpss = array, U16, 364, [6], "%", 0.1, 0, 0, 100, 0
+ als_timing = array, S16, 376, [6x6], "degrees", 0.10000,0.00000,-50.00, 50.00,1;
+ als_addfuel = array, S16, 448, [6x6], "%", 0.1, 0, 0, 100, 1
+ als_fuelcut = array, U08, 520, [6x6], "%", 1, 0, 0, 100, 0
+ als_sparkcut = array, U08, 556, [6x6], "%", 1, 0, 0, 100, 0
+ als_minrpm = scalar, U16, 592, "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_maxrpm = scalar, U16, 594, "rpm", 1, 0, 0, {rpmhigh}, 0
+#if CELSIUS
+ als_maxmat = scalar, S16, 596, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ als_maxmat = scalar, S16, 596, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_onoff_ang = scalar, S16, 598, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt1_on = bits, U08, 600, [0:1], "Off", "1", "2", "4"
+ vvt_opt1_filter = bits, U08, 600, [2:2], "Off", "On"
+ vvt_opt1_int = bits, U08, 600, [3:3], "Synced to cam", "Timed"
+ vvt_opt1_tst = bits, U08, 600, [4:6], "Off", "VVT1", "VVT2", "VVT3", "VVT4", "INVALID", "INVALID", "INVALID" ; 0, 1, 2, 3, 4
+ vvt_opt1_dir_exhaust = bits, U08, 600, [7:7], "Advance", "Retard"
+ vvt_hold_duty = scalar, U08, 601, "%", 0.392, 0, 0, 100, 1
+ vvt_out1 = bits, U08, 602, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out2 = bits, U08, 603, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out3 = bits, U08, 604, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out4 = bits, U08, 605, [0:3], "Off", "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ vvt_out1_dir = bits, U08, 602, [7:7], "Advance", "Retard"
+ vvt_out2_dir = bits, U08, 603, [7:7], "Advance", "Retard"
+ vvt_out3_dir = bits, U08, 604, [7:7], "Advance", "Retard"
+ vvt_out4_dir = bits, U08, 605, [7:7], "Advance", "Retard"
+ vvt_ctl_ms = scalar, U16, 606, "ms", 1, 0.00000, 10, 500, 0
+ vvt_ctl_Kp = scalar, U08, 608, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki = scalar, U08, 609, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd = scalar, U08, 610, "%", 1, 0.00000, 0, 200, 0
+ vvt_test_duty = scalar, U08, 611, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_min_ang1 = scalar, S16, 612, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang2 = scalar, S16, 614, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang3 = scalar, S16, 616, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_min_ang4 = scalar, S16, 618, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang1 = scalar, S16, 620, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang2 = scalar, S16, 622, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang3 = scalar, S16, 624, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_max_ang4 = scalar, S16, 626, "abs.deg.", 0.10000,0.00000,0, 720.00,1;
+ vvt_opt2_pid = bits, U08, 628, [0:0], "On/off", "PID"
+ vvt_opt2_pid2 = bits, U08, 628, [0:0], "On/Off", "Variable"
+ vvt_opt2_use_hold_intake = bits, U08, 628, [1:1], "Off", "On"
+ vvt_opt2_use_hold_exhaust = bits, U08, 628, [2:2], "Off", "On"
+ vvt_opt2_cam2pol = bits, U08, 628, [4:4], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam3pol = bits, U08, 628, [5:5], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam4pol = bits, U08, 628, [6:6], "Falling Edge", "Rising Edge"
+ vvt_opt2_cam1pol = bits, U08, 628, [7:7], "Falling Edge", "Rising Edge"
+ vvt_opt3_cam2 = bits, U08, 629, [0:1], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam3 = bits, U08, 629, [2:3], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam4 = bits, U08, 629, [4:5], "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3"
+ vvt_opt3_cam1 = bits, U08, 629, [6:6], "Main cam", "INVALID" ; for display only
+ vvt_timing_load = array, S16, 630, [ 8], "%", 0.10000, 0.000, 0, {loadhigh}, 1
+ vvt_timing_rpm = array, U16, 646, [ 8], "rpm", 1, 0, 0, {rpmhigh}, 0
+ vvt_timing1 = array, S16, 662, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_timing2 = array, S16, 790, [8x8], "deg", 0.10000, 0.000, -360, 720, 1
+ vvt_tth1 = scalar, U08, 918, "", 1, 0, 0, 24, 0
+ vvt_tth2 = scalar, U08, 919, "", 1, 0, 0, 24, 0
+ vvt_tth3 = scalar, U08, 920, "", 1, 0, 0, 24, 0
+ vvt_tth4 = scalar, U08, 921, "", 1, 0, 0, 24, 0
+
+ vvt_coldpos1 = scalar, S16, 922, "degrees", 0.10000,0.00000,0, 720.00,1;
+ vvt_coldpos2 = scalar, S16, 924, "degrees", 0.10000,0.00000,0, 720.00,1;
+
+ tclu_opt_vss = bits, U08, 926, [0:1], "Off", "VSS1", "VSS2", "INVALID"
+ tclu_opt_gear = bits, U08, 926, [2:2], "Off", "On"
+ tclu_brakepin = bits, U08, 927, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ tclu_enablepin = bits, U08, 928, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ tclu_outpin = bits, U08, 929, [0:5], "Off", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ tclu_gearmin = scalar, U08, 930, "", 1, 0, 0, 8, 0
+ tclu_delay = scalar, U08, 931, "s", 0.1, 0, 0, 10, 1
+ tclu_vssmin = scalar, U16, 932, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 1000, 0
+ tclu_tpsmin = scalar, S16, 934, "%", 0.1, 0, 0, 100, 1
+ tclu_tpsmax = scalar, S16, 936, "%", 0.1, 0, 0, 100, 1
+ tclu_mapmin = scalar, S16, 938, "%", 0.1, 0, 0, {loadhigh}, 1
+ tclu_mapmax = scalar, S16, 940, "%", 0.1, 0, 0, {loadhigh}, 1
+ vvt_opt4_decode = bits, U08, 942, [0:2], "Standard", "BMW V10", "BMW S54", "Hemi VVT", "Ford Coyote", "Ford Duratec 4 cyl", "INVALID", "INVALID"
+ vvt_opt5_add1 = bits, U08, 943, [0:1], "Off", "Cam 1", "Cam 2", "INVALID"
+ vvt_opt5_add2 = bits, U08, 943, [2:2], "Commanded", "Actual"
+ vvt_opt5_err = bits, U08, 943, [3:3], "Yes","No"
+ vvt_opt5_vvt1 = bits, U08, 943, [4:4], "Intake","Exhaust"
+ vvt_opt5_vvt2 = bits, U08, 943, [5:5], "Intake","Exhaust"
+ vvt_opt5_vvt3 = bits, U08, 943, [6:6], "Intake","Exhaust"
+ vvt_opt5_vvt4 = bits, U08, 943, [7:7], "Intake","Exhaust"
+ vvt_hold_duty_exh = scalar, U08, 944, "%", 0.392, 0, 0, 100, 1
+ vvt_ctl_Kp_exh = scalar, U08, 945, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Ki_exh = scalar, U08, 946, "%", 1, 0.00000, 0, 200, 0
+ vvt_ctl_Kd_exh = scalar, U08, 947, "%", 1, 0.00000, 0, 200, 0
+ vvt_cam1tth1 = scalar, U08, 948, "", 1, 0.00000, 0, 255, 0
+ vvt_cam1tth2 = scalar, U08, 949, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth1 = scalar, U08, 950, "", 1, 0.00000, 0, 255, 0
+ vvt_cam2tth2 = scalar, U08, 951, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth1 = scalar, U08, 952, "", 1, 0.00000, 0, 255, 0
+ vvt_cam3tth2 = scalar, U08, 953, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth1 = scalar, U08, 954, "", 1, 0.00000, 0, 255, 0
+ vvt_cam4tth2 = scalar, U08, 955, "", 1, 0.00000, 0, 255, 0
+ vvt_opt6_freq = bits, U08, 956, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz"
+ vvt_opt7_yaxis = bits, U08, 957, [0:2], "Fuelload", "MAP", "% baro", "TPS", "MAFload", "INVALID", "INVALID", "INVALID"
+ als_rifuelcut = array, U08, 958, [6x6], "%", 1, 0, 0, 100, 0
+ als_rirpms = array, U16, 994, [6], "rpm", 1, 0, 0, {rpmhigh}, 0
+ als_ritpss = array, U16, 1006, [6], "%", 0.1, 0, 0, 100, 0
+ als_pwm_opt_freq = bits, U08, 1018, [1:4], "On-Off", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ als_pwm_opt2 = bits, U08, 1019, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+#if CELSIUS
+ vvt_minclt = scalar, S16, 1020, "°C", 0.05555, -320.000, -40.00, 150.00, 1
+#else
+ vvt_minclt = scalar, S16, 1020, "°F", 0.10000, 0.000,-40.00, 300.00, 1
+#endif
+ vvt_minduty1 = scalar, U08, 1022, "%", 0.392, 0.00000, 0, 100, 1
+ vvt_maxduty1 = scalar, U08, 1023, "%", 0.392, 0.00000, 0, 100, 1
+
+page = 15 ; 25
+ mafv = array, U16, 0, [64], "V", 0.001, 0.00000, 0.00, 5, 3
+ maff = array, U16, 0, [64], "Hz", { (maf_freq1 - maf_freq0) / 5000 }, { maf_freq0 * 5000 / (maf_freq1 - maf_freq0) }, {maf_freq0}, { maf_freq1 }, 0
+ mafflow = array, U16, 128, [64], "g/sec", {0.01 * (maf_range + 1)}, -8192, {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 2
+ alphaMAPtable = array , S16, 256, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes)
+ amap_tps = array , S16, 328, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ amap_rpm = array , U16, 340, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+ tpswot_tps = array , S16, 352, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
+ tpswot_rpm = array , U16, 364, [ 6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0 ; * ( 12 bytes)
+#if CELSIUS
+ matCorrTemps = array , S16, 376, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
+#else
+ matCorrTemps = array , S16, 376, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
+#endif
+ matCorrDelta = array , S16, 388, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
+;next is 400
+ boost_ctl_cl_pwm_targs1 = array, U08, 400, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_targs2 = array, U08, 464, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
+ boost_ctl_cl_pwm_rpms1 = array, U16, 528, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_rpms2 = array, U16, 544, [8], "rpm", 1, 0, 0, 25000, 0
+ boost_ctl_cl_pwm_targboosts1 = array, S16, 560, [8], "%", 0.10000, 0, 0, 600, 0
+ boost_ctl_cl_pwm_targboosts2 = array, S16, 576, [8], "%", 0.10000, 0, 0, 600, 0
+ blendx1 = array, S16, 592, [9], "X", 1, 0, -32767, 32767, 0
+ blendx2 = array, S16, 610, [9], "X", 1, 0, -32767, 32767, 0
+ blendx3 = array, S16, 628, [9], "X", 1, 0, -32767, 32767, 0
+ blendx4 = array, S16, 646, [9], "X", 1, 0, -32767, 32767, 0
+ blendx5 = array, S16, 664, [9], "X", 1, 0, -32767, 32767, 0
+ blendx6 = array, S16, 682, [9], "X", 1, 0, -32767, 32767, 0
+ blendx7 = array, S16, 700, [9], "X", 1, 0, -32767, 32767, 0
+ blendx8 = array, S16, 718, [9], "Flex%", 0.1, 0, 0, 100, 1
+ blendy1 = array, U08, 736, [9], "VE2", 1, 0, 0, 100, 0
+ blendy2 = array, U08, 745, [9], "Spk2", 1, 0, 0, 100, 0
+ blendy3 = array, U08, 754, [9], "VE3/4", 1, 0, 0, 100, 0
+ blendy4 = array, U08, 763, [9], "Spk3/4", 1, 0, 0, 100, 0
+ blendy5 = array, U08, 772, [9], "AFR2", 1, 0, 0, 100, 0
+ blendy6 = array, U08, 781, [9], "Boost2", 1, 0, 0, 100, 0
+ blendy7 = array, U08, 790, [9], "Crank%2", 1, 0, 0, 100, 0
+ blendy8 = array, U08, 799, [9], "Blend%", 1, 0, 0, 100, 0
+ fpd_duty= array, U08, 808, [6x6], "%", 0.392, 0.00000, 0, 100, 1
+ fpd_load= array, S16, 844, [6], "%", 0.10000, 0.00000, 0.0,{loadhigh}, 1
+ fpd_rpm = array, U16, 856, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+#if CELSIUS
+ fp_temps = array, S16, 868, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ fp_temps = array, S16, 868, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ fp_temp_adj = array, S16, 888, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ fp_presss = array, S16, 908, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1
+ fp_press_adj = array, S16, 928, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1
+ hpte_times = array, S16, 948, [ 6], "s", 0.10000, 0.000, 0.00, 25.5, 1
+ hpte_afrs = array, U08, 960, [ 6], "AFR", 0.10000, 0.000, 0.00, 5.0, 1
+ oil_rpm = array, U16, 966, [6], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ oil_press_min = array, S16, 978, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ oil_press_max = array, S16, 990, [6], "", 0.10000, 0.00000, 0.0,3276, 1
+ alt_dutyin = array, U16, 1002, [7], "%", 1, 0, 0, 100, 0
+ alt_dutyout = array, U08, 1016, [7], "%", 1, 0, 0, 100, 0
+
+page = 16 ; 26 ; this is a RAM only page with no burnable flash
+; Quickform realtime data. Lower part of data is offset into outpc. Upper 3 bits are size. 0 = nothing, 1 = 1 byte, 2 = 2 bytes, 3 = 4 bytes
+ qfrtfielddata= array, U16, 0, [ 256], "", 1.0000, 0.00000, 0.00, 65535, 0, noMsqSave
+ ltt_table1 = array , S08, 512, [16x16], "%", 0.10000, 0.00000, -12.7, 12.7, 1, noMsqSave ; * (512 bytes)
+ ltt_rpms = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00, {rpmhigh}, 0, noMsqSave ; * ( 24 bytes)
+ ltt_loads = array , S16, 800, [ 16], "%", 0.10000, 0.00000, 0.00, {loadhigh}, 1, noMsqSave ; * ( 24 bytes)
+
+ portusage = array, U08, 832, [ 148], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_a = array, U08, 832, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_b = array, U08, 840, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_e = array, U08, 848, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_h = array, U08, 856, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_j = array, U08, 864, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_k = array, U08, 872, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_m = array, U08, 880, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_p = array, U08, 888, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_t = array, U08, 896, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0h=array, U08, 904, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_ad0l=array, U08, 912, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canin=array, U08, 920, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canout=array,U08, 928, [16], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canadc=array,U08, 944, [24], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_canpwm=array,U08, 968, [ 8], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_pwmscl=array,U08, 976, [ 4], "", 1, 0, 0, 255, 0, noMsqSave
+ portusage_loop =array, U08, 980, [ 3], "", 1, 0, 0, 255, 0, noMsqSave
+
+page = 17 ; 27
+ ego_auth_table = array, U08, 0, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1
+ ego_auth_rpms = array, U16, 144, [ 12], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ ego_auth_loads = array, S16, 168, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+ vsslaunch_vss = array, U16, 192, [ 10], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ vsslaunch_rpm = array, U16, 212, [ 10], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ vsslaunch_retard = array, U16, 232, [ 10], "deg", 0.10000, 0.00000, 0.00, 50, 1
+ ego_delay_table = array, U08, 252, [12x12], "ms", 10.00000, 0, 0, 2550, 0
+ ego_delay_rpms = array, U16, 396, [ 12], "rpm", 1.00000, 0, 0, {rpmhigh}, 0
+ ego_delay_loads = array, S16, 420, [ 12], "%", 0.10000, 0, 0, {loadhigh}, 0
+ ego_sensor_delay = scalar,U08, 444, "ms", 2, 0, 0, 510, 0
+
+; 2 Generic PID channels
+ generic_pid_flags_a_on = bits,U08, 445, [0:0], "Off", "On"
+ generic_pid_flags_a_type = bits, U08, 445, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_a_direction = bits, U08, 445, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_a_output_type = bits, U08, 445, [4:4], "PWM", "Stepper"
+ generic_pid_flags_a_lookup_type = bits, U08, 445, [5:5], "Table", "Curve"
+ generic_pid_flags_b_on = bits,U08, 446, [0:0], "Off", "On"
+ generic_pid_flags_b_type = bits, U08, 446, [1:2], "INVALID","Type B","Type C", "INVALID"
+ generic_pid_flags_b_direction = bits, U08, 446, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)"
+ generic_pid_flags_b_output_type = bits,U08, 446, [4:4], "PWM", "Stepper"
+ generic_pid_flags_b_lookup_type = bits, U08, 446, [5:5], "Table", "Curve"
+
+ generic_pid_pwm_opts_freq_a = bits, U08, 447, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_a = bits, U08, 447, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden
+ generic_pid_pwm_opts_freq_b = bits, U08, 448, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
+ generic_pid_pwm_opts_load_b = bits, U08, 448, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT"
+
+ generic_pid_pwm_outs_a = bits, U08, 449, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+ generic_pid_pwm_outs_b = bits, U08, 450, [0:5], "INVALID", "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8", "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16"
+
+ generic_pid_load_offset_a = scalar, U16, 451, "", 1, 0, 0, 65535, 0
+ generic_pid_load_offset_b = scalar, U16, 453, "", 1, 0, 0, 65535, 0
+ generic_pid_load_size_a = scalar, U08, 455, "", 1, 0, 0, 255, 0
+ generic_pid_load_size_b = scalar, U08, 456, "", 1, 0, 0, 255, 0
+
+; These are positioned here so that TS reads them in the correct order and the autoscaling on the next block function
+ generic_pid_PV_offset_a = scalar, U16, 469, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_offset_b = scalar, U16, 471, "", 1, 0, 0, 65535, 0
+ generic_pid_PV_size_a = scalar, U08, 473, "", 1, 0, 0, 255, 0
+ generic_pid_PV_size_b = scalar, U08, 474, "", 1, 0, 0, 255, 0
+
+ generic_pid_upper_inputlim_a = scalar, S16, 457, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_upper_inputlim_b = scalar, S16, 459, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_lower_inputlim_a = scalar, S16, 461, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_lower_inputlim_b = scalar, S16, 463, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+ generic_pid_output_upperlim_a = scalar, U08, 465, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_upperlim_b = scalar, U08, 466, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_a = scalar, U08, 467, "%", 0.392, 0.00000, 0, 100, 1
+ generic_pid_output_lowerlim_b = scalar, U08, 468, "%", 0.392, 0.00000, 0, 100, 1
+ ;
+ ; not a gap!
+ ;
+ generic_pid_rpms_a = array, S16, 475, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_a = array, S16, 491, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_a) } , { getChannelTranslateByOffset(generic_pid_load_offset_a) }, { getChannelMinByOffset(generic_pid_load_offset_a) }, { getChannelMaxByOffset(generic_pid_load_offset_a) }, { getChannelDigitsByOffset(generic_pid_load_offset_a) }
+ generic_pid_rpms_b = array, S16, 507, [8], "rpm", 1, 0, 0, rpmhigh, 0
+ generic_pid_loadvals_b = array, S16, 523, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_b) } , { getChannelTranslateByOffset(generic_pid_load_offset_b) }, { getChannelMinByOffset(generic_pid_load_offset_b) }, { getChannelMaxByOffset(generic_pid_load_offset_b) }, { getChannelDigitsByOffset(generic_pid_load_offset_b) }
+
+ generic_pid_targets_a = array, S16, 539, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) }
+ generic_pid_targets_b = array, S16, 667, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) }
+
+ generic_pid_control_interval_a = scalar, U08, 795, "ms", 1, 0, 10, 255, 0
+ generic_pid_control_interval_b = scalar, U08, 796, "ms", 1, 0, 10, 255, 0
+
+ generic_pid_P_a = scalar, U08, 797, "%", 1, 0, 0, 255, 0
+ generic_pid_P_b = scalar, U08, 798, "%", 1, 0, 0, 255, 0
+ generic_pid_I_a = scalar, U08, 799, "%", 1, 0, 0, 255, 0
+ generic_pid_I_b = scalar, U08, 800, "%", 1, 0, 0, 255, 0
+ generic_pid_D_a = scalar, U08, 801, "%", 1, 0, 0, 255, 0
+ generic_pid_D_b = scalar, U08, 802, "%", 1, 0, 0, 255, 0
+;gap
+ tcslipx = array, U16, 804, [9], "Knob%", 0.0978, 0, 0, 100, 0
+ tcslipy = array, U08, 822, [9], "Slip threshold %", 1, 0, 0, 100, 0
+;gap
+; 4 outmsg
+ outmsg1_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
+ outmsg1_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
+ outmsg1_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
+ outmsg1_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
+ outmsg1_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
+ outmsg1_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
+ outmsg1_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
+ outmsg1_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
+ outmsg1_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
+ outmsg1_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
+ outmsg1_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
+ outmsg1_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
+ outmsg1_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
+ outmsg1_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
+ outmsg1_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
+ outmsg1_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
+ outmsg1_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
+ outmsg1_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
+ outmsg1_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
+ outmsg1_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
+ outmsg1_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
+ outmsg1_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
+ outmsg1_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
+ outmsg1_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
+ outmsg1_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
+ outmsg1_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
+ outmsg1_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
+ outmsg1_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
+ outmsg1_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
+ outmsg1_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
+ outmsg1_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
+ outmsg1_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
+ outmsg2_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
+ outmsg2_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
+ outmsg2_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
+ outmsg2_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
+ outmsg2_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
+ outmsg2_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
+ outmsg2_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
+ outmsg2_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
+ outmsg2_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
+ outmsg2_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
+ outmsg2_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
+ outmsg2_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
+ outmsg2_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
+ outmsg2_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
+ outmsg2_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
+ outmsg2_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
+ outmsg2_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
+ outmsg2_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
+ outmsg2_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
+ outmsg2_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
+ outmsg2_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
+ outmsg2_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
+ outmsg2_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
+ outmsg2_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
+ outmsg2_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
+ outmsg2_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
+ outmsg2_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
+ outmsg2_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
+ outmsg2_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
+ outmsg2_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
+ outmsg2_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
+ outmsg2_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
+ outmsg3_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
+ outmsg3_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
+ outmsg3_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
+ outmsg3_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
+ outmsg3_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
+ outmsg3_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
+ outmsg3_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
+ outmsg3_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
+ outmsg3_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
+ outmsg3_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
+ outmsg3_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
+ outmsg3_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
+ outmsg3_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
+ outmsg3_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
+ outmsg3_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
+ outmsg3_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
+ outmsg3_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
+ outmsg3_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
+ outmsg3_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
+ outmsg3_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
+ outmsg3_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
+ outmsg3_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
+ outmsg3_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
+ outmsg3_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
+ outmsg3_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
+ outmsg3_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
+ outmsg3_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
+ outmsg3_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
+ outmsg3_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
+ outmsg3_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
+ outmsg3_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
+ outmsg3_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
+ outmsg4_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
+ outmsg4_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
+ outmsg4_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
+ outmsg4_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
+ outmsg4_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
+ outmsg4_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
+ outmsg4_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
+ outmsg4_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
+ outmsg4_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
+ outmsg4_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
+ outmsg4_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
+ outmsg4_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
+ outmsg4_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
+ outmsg4_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
+ outmsg4_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
+ outmsg4_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
+ outmsg4_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
+ outmsg4_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
+ outmsg4_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
+ outmsg4_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
+ outmsg4_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
+ outmsg4_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
+ outmsg4_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
+ outmsg4_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
+ outmsg4_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
+ outmsg4_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
+ outmsg4_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
+ outmsg4_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
+ outmsg4_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
+ outmsg4_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
+ outmsg4_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
+ outmsg4_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0
+
+page = 18 ; 28
+ dwell_table_values = array, U08, 262, [8x8], "%", 0.10000, 0.00000, 0.5, 25.5, 1
+ dwell_table_rpms = array, U16, 326, [ 8], "RPM", 1.00000, 0.00000, 0.00,{rpmhigh}, 0
+ dwell_table_loads = array, S16, 342, [ 8], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, {loadhigh}, 1
+
+ can_rcv_id1 = scalar, U16, 358, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id2 = scalar, U16, 360, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id3 = scalar, U16, 362, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id4 = scalar, U16, 364, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id5 = scalar, U16, 366, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id6 = scalar, U16, 368, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id7 = scalar, U16, 370, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id8 = scalar, U16, 372, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id9 = scalar, U16, 374, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id10= scalar, U16, 376, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id11= scalar, U16, 378, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id12= scalar, U16, 380, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id13= scalar, U16, 382, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id14= scalar, U16, 384, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id15= scalar, U16, 386, "", 1, 0.00000, 0, 2047, 0
+ can_rcv_id16= scalar, U16, 388, "", 1, 0.00000, 0, 2047, 0
+
+ can_rcv_var1 = bits, U08, 390, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var2 = bits, U08, 391, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var3 = bits, U08, 392, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var4 = bits, U08, 393, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var5 = bits, U08, 394, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var6 = bits, U08, 395, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var7 = bits, U08, 396, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var8 = bits, U08, 397, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var9 = bits, U08, 398, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var10 = bits, U08, 399, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var11 = bits, U08, 400, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var12 = bits, U08, 401, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var13 = bits, U08, 402, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var14 = bits, U08, 403, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var15 = bits, U08, 404, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+ can_rcv_var16 = bits, U08, 405, [0:4], "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "INVALID", "INVALID", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24"
+
+ can_rcv_off1 = scalar, U08, 406, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off2 = scalar, U08, 407, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off3 = scalar, U08, 408, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off4 = scalar, U08, 409, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off5 = scalar, U08, 410, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off6 = scalar, U08, 411, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off7 = scalar, U08, 412, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off8 = scalar, U08, 413, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off9 = scalar, U08, 414, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off10 = scalar, U08, 415, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off11 = scalar, U08, 416, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off12 = scalar, U08, 417, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off13 = scalar, U08, 418, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off14 = scalar, U08, 419, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off15 = scalar, U08, 420, "", 1, 0.00000, 0, 7, 0
+ can_rcv_off16 = scalar, U08, 421, "", 1, 0.00000, 0, 7, 0
+
+ can_rcv_size1 = bits, U08, 422, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size2 = bits, U08, 423, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size3 = bits, U08, 424, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size4 = bits, U08, 425, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size5 = bits, U08, 426, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size6 = bits, U08, 427, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size7 = bits, U08, 428, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size8 = bits, U08, 429, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size9 = bits, U08, 430, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size10 = bits, U08, 431, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size11 = bits, U08, 432, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size12 = bits, U08, 433, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size13 = bits, U08, 434, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size14 = bits, U08, 435, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size15 = bits, U08, 436, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ can_rcv_size16 = bits, U08, 437, [0:3], "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+
+ can_rcv_mult1 = scalar, S16, 438, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult2 = scalar, S16, 440, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult3 = scalar, S16, 442, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult4 = scalar, S16, 444, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult5 = scalar, S16, 446, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult6 = scalar, S16, 448, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult7 = scalar, S16, 450, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult8 = scalar, S16, 452, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult9 = scalar, S16, 454, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult10 = scalar, S16, 456, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult11 = scalar, S16, 458, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult12 = scalar, S16, 460, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult13 = scalar, S16, 462, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult14 = scalar, S16, 464, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult15 = scalar, S16, 466, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_mult16 = scalar, S16, 468, "", 1, 0.00000, -32767, 32767,0
+
+ can_rcv_div1 = scalar, U16, 470, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div2 = scalar, U16, 472, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div3 = scalar, U16, 474, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div4 = scalar, U16, 476, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div5 = scalar, U16, 478, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div6 = scalar, U16, 480, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div7 = scalar, U16, 482, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div8 = scalar, U16, 484, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div9 = scalar, U16, 486, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div10 = scalar, U16, 488, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div11 = scalar, U16, 490, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div12 = scalar, U16, 492, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div13 = scalar, U16, 494, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div14 = scalar, U16, 496, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div15 = scalar, U16, 498, "", 1, 0.00000, 1, 32767,0
+ can_rcv_div16 = scalar, U16, 500, "", 1, 0.00000, 1, 32767,0
+
+ can_rcv_add1 = scalar, S16, 502, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add2 = scalar, S16, 504, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add3 = scalar, S16, 506, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add4 = scalar, S16, 508, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add5 = scalar, S16, 510, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add6 = scalar, S16, 512, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add7 = scalar, S16, 514, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add8 = scalar, S16, 516, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add9 = scalar, S16, 518, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add10 = scalar, S16, 520, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add11 = scalar, S16, 522, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add12 = scalar, S16, 524, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add13 = scalar, S16, 526, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add14 = scalar, S16, 528, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add15 = scalar, S16, 530, "", 1, 0.00000, -32767, 32767,0
+ can_rcv_add16 = scalar, S16, 532, "", 1, 0.00000, -32767, 32767,0
+ can_bcast_user_id = scalar, U16, 534, "", 1, 0, 1, 2047, 0
+ can_bcast_user_d0 = scalar, U08, 536, "", 1, 0, 0, 255, 0
+ can_bcast_user_d1 = scalar, U08, 537, "", 1, 0, 0, 255, 0
+ can_bcast_user_d2 = scalar, U08, 538, "", 1, 0, 0, 255, 0
+ can_bcast_user_d3 = scalar, U08, 539, "", 1, 0, 0, 255, 0
+ can_bcast_user_d4 = scalar, U08, 540, "", 1, 0, 0, 255, 0
+ can_bcast_user_d5 = scalar, U08, 541, "", 1, 0, 0, 255, 0
+ can_bcast_user_d6 = scalar, U08, 542, "", 1, 0, 0, 255, 0
+ can_bcast_user_d7 = scalar, U08, 543, "", 1, 0, 0, 255, 0
+
+ iobox_opta1 = bits, U08, 544, [0:0], "Off", "On"
+ iobox_opta1adv = bits, U08, 544, [1:1], "Automatic", "Advanced"
+ iobox_opta1canin = bits, U08, 544, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta1canout= bits, U08, 544, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta1canadc= bits, U08, 544, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta2 = bits, U08, 545, [0:0], "Off", "On"
+ iobox_opta2adv = bits, U08, 545, [1:1], "Automatic", "Advanced"
+ iobox_opta2canin = bits, U08, 545, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta2canout= bits, U08, 545, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta2canadc= bits, U08, 545, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta3 = bits, U08, 546, [0:0], "Off", "On"
+ iobox_opta3adv = bits, U08, 546, [1:1], "Automatic", "Advanced"
+ iobox_opta3canin = bits, U08, 546, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta3canout= bits, U08, 546, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta3canadc= bits, U08, 546, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+ iobox_opta4 = bits, U08, 547, [0:0], "Off", "INVALID"
+ iobox_opta4adv = bits, U08, 547, [1:1], "Automatic", "Advanced"
+ iobox_opta4canin = bits, U08, 547, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off"
+ iobox_opta4canout= bits, U08, 547, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID"
+ iobox_opta4canadc= bits, U08, 547, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID"
+
+ iobox_optb1tachrate= bits, U08, 548, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb1inrate = bits, U08, 548, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1outrate = bits, U08, 548, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb1vss = bits, U08, 548, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb2tachrate= bits, U08, 549, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb2inrate = bits, U08, 549, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2outrate = bits, U08, 549, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb2vss = bits, U08, 549, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4"
+
+ iobox_optb3tachrate= bits, U08, 550, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb3inrate = bits, U08, 550, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3outrate = bits, U08, 550, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb3vss = bits, U08, 550, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_optb4tachrate= bits, U08, 551, [0:1], "50Hz", "100Hz", "INVALID", "INVALID"
+ iobox_optb4inrate = bits, U08, 551, [2:3], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4outrate = bits, U08, 551, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+ iobox_optb4vss = bits, U08, 551, [6:7], "Off", "INVALID", "INVALID", "INVALID"
+
+ iobox_id1 = scalar, U16, 552, "", 1, 0.00000, 0, 2047, 0
+ iobox_id2 = scalar, U16, 554, "", 1, 0.00000, 0, 2047, 0
+ iobox_id3 = scalar, U16, 556, "", 1, 0.00000, 0, 2047, 0
+ iobox_id4 = scalar, U16, 558, "", 1, 0.00000, 0, 2047, 0
+ pitlim_opt_on = bits, U08, 560, [0:0], "Off", "On"
+ pitlim_opt_mode = bits, U08, 560, [1:1], "Fixed", "Holding"
+ pitlim_opt_retard=bits, U08, 560, [2:2], "Off", "On"
+ pitlim_opt_spkcut=bits, U08, 560, [3:3], "Off", "On"
+ pitlim_opt_fuelcut=bits,U08, 560, [4:4], "Off", "On"
+ pitlim_opt_fuelprog=bits,U08, 560, [5:5], "Off", "On"
+ pitlim_opt_vssrpm= bits,U08, 560, [6:6], "VSS", "RPM"
+ pitlim_enin = bits, U08, 561, [0:4], "Off", "Digital Switched In 3", "INVALID", "INVALID", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
+ pitlim_speed = scalar, U16, 562, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,1000, 0
+ pitlim_retardmax= scalar, S16, 564, "deg", 0.1, 0.00000, 0, 30, 1
+ pitlim_sensitivity=scalar, U16, 566, "", 0.1, 0.00000, 0, 20, 0
+ pitlim_speed_range=scalar, U16, 568, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00,20, 1
+ pitlim_rpm_range=scalar, U16, 570, "RPM", 1.00000, 0.00000, 200, 1000, 0
+;accel wizard mini tables
+ taeBins = array , U08, 572, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins = array , U08, 576, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates = array , S16, 580, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates = array , S16, 588, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+;accel wizard #2
+ taeBins2 = array , U08, 596, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ maeBins2 = array , U08, 600, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes)
+ taeRates2 = array , S16, 604, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
+ maeRates2 = array , S16, 612, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
+ accel_mapdots = array, S16, 620, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots = array, S16, 636, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts = array, S16, 652, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts = array, S16, 668, [8], "%", 0.1, 0, -500, 500, 1
+ accel_mapdots2 = array, S16, 684, [8], "kpa/sec", 1, 0, -5000, 5000, 0
+ accel_tpsdots2 = array, S16, 700, [8], "%/sec", 0.1, 0, -3000, 3000, 1
+ accel_mapdot_amts2 = array, S16, 716, [8], "%", 0.1, 0, -500, 500, 1
+ accel_tpsdot_amts2 = array, S16, 732, [8], "%", 0.1, 0, -500, 500, 1
+ dashbcast_id1 = scalar, U16, 748, "", 1, 0.00000, 0, 2047, 0
+ dashbcast_opta1 = bits, U08, 750, [0:0], "Off", "On"
+ dashbcast_opta1adv = bits, U08, 750, [1:1], "Automatic", "Advanced"
+ dashbcast_opta4outrate=bits, U08, 750, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
+;next is 751
+
+;768-1023 reserved
+
+ page = 19 ; 29
+
+; dome settings
+
+;progressive nitrous tables
+ n2o1_time = array, U16, 346, [10], "s", 0.001, 0, 0, 15, 2
+ n2o1_rpm = array, U16, 366, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o1_vss = array, U16, 386, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o1_duty = array, U08, 406, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o1_pw = array, S16, 416, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o1_pw = array, S16, 416, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o1_retard = array, U16, 436, [10], "deg", 0.1, 0, 0, 30, 1
+ n2o2_time = array, U16, 456, [10], "s", 0.001, 0, 0, 15, 2
+ n2o2_rpm = array, U16, 476, [10], "RPM", 1, 0, 0, {rpmhigh}, 0
+ n2o2_vss = array, U16, 496, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, 1000, 1
+ n2o2_duty = array, U08, 516, [10], "%", 1, 0, 0, 100, 1
+#if PW_4X
+ n2o2_pw = array, S16, 526, [10], "ms", 0.004, 0, -20, 80, 3
+#else
+ n2o2_pw = array, S16, 526, [10], "ms", 0.001, 0, -5, 20, 3
+#endif
+ n2o2_retard = array, U16, 546, [10], "deg", 0.1, 0, 0, 30, 1
+ alternator_fvolts = array , U16, 566, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_freqv = array , U08, 578, [ 6], "", 1, 0.00000,0, 255, 0 ; * ( 6 bytes)
+#if CELSIUS
+ alternator_temp = array, S16, 584, [ 6], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0
+#else
+ alternator_temp = array, S16, 584, [ 6], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1
+#endif
+ alternator_targvolts = array , U08, 596, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dvolts = array , U16, 602, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
+ alternator_dutyv = array , U08, 614, [ 6], "", 1, 0.00000,0, 255, 1 ; * ( 6 bytes)
+; next is 620
+ ; watch out for dome settings
+
+[ConstantsExtensions]
+ requiresPowerCycle = nCylinders
+ requiresPowerCycle = ICIgnCapture
+ requiresPowerCycle = engineType
+ requiresPowerCycle = divider
+ requiresPowerCycle = spkout_hi_lo2
+; requiresPowerCycle = triggerOffset
+ requiresPowerCycle = triggerTeeth
+ requiresPowerCycle = No_Miss_Teeth
+ requiresPowerCycle = IdleCtl
+ requiresPowerCycle = IdleCtl_alg
+ requiresPowerCycle = IACcurlim
+ requiresPowerCycle = IAC_tinitial_step
+ requiresPowerCycle = hardware_spk
+ requiresPowerCycle = hardware_cam
+ requiresPowerCycle = hardware_fuel
+ requiresPowerCycle = baroCorr
+ requiresPowerCycle = egoType
+; requiresPowerCycle = alternate
+ requiresPowerCycle = twoStroke
+ requiresPowerCycle = nInjectors
+ requiresPowerCycle = OddFireang
+ requiresPowerCycle = algorithm
+ requiresPowerCycle = algorithm2
+ requiresPowerCycle = IgnAlgorithm
+ requiresPowerCycle = IgnAlgorithm2
+ requiresPowerCycle = AfrAlgorithm
+ requiresPowerCycle = opt142_rtc
+ requiresPowerCycle = mycan_id
+ requiresPowerCycle = flexFuel
+ requiresPowerCycle = flexport
+ requiresPowerCycle = dwellmode
+ requiresPowerCycle = knk_option
+ requiresPowerCycle = knkDirection
+ requiresPowerCycle = knkpull
+ requiresPowerCycle = knk_option_an
+ requiresPowerCycle = knkport
+ requiresPowerCycle = spk_conf2_gmtfi
+ requiresPowerCycle = spk_conf2_oddodd
+ requiresPowerCycle = spk_conf2_dli
+ requiresPowerCycle = spk_config_campol
+ requiresPowerCycle = spk_config_camcrank
+ requiresPowerCycle = spk_config_trig2
+ requiresPowerCycle = spk_config_trig2l
+ requiresPowerCycle = spk_config_resetcam
+ requiresPowerCycle = spk_mode0
+ requiresPowerCycle = spk_mode3
+ requiresPowerCycle = spk_mode3_hirespol
+ requiresPowerCycle = rtbaroport
+ requiresPowerCycle = map2port
+ requiresPowerCycle = ego2port
+ requiresPowerCycle = mapport
+ requiresPowerCycle = mapport_t
+ requiresPowerCycle = mapport_f
+ requiresPowerCycle = knkport_an
+
+ requiresPowerCycle = feature4_0igntrig
+ requiresPowerCycle = tsw_pin_f
+ requiresPowerCycle = tsw_pin_s
+ requiresPowerCycle = tsw_pin_rf
+ requiresPowerCycle = tsw_pin_ob
+ requiresPowerCycle = tsw_pin_afr
+ requiresPowerCycle = tsw_pin_stoich
+ requiresPowerCycle = f5_0_tsf
+ requiresPowerCycle = f5_0_tsf_opt
+ requiresPowerCycle = f5_0_tss
+ requiresPowerCycle = f5_0_tss_opt
+
+ requiresPowerCycle = tacho_opt3f
+ requiresPowerCycle = tacho_optvar
+ requiresPowerCycle = launch_opt_on
+ requiresPowerCycle = launch_opt_pins
+ requiresPowerCycle = launch_opt_vss
+ requiresPowerCycle = N2Oopt_2
+ requiresPowerCycle = N2Oopt_3
+ requiresPowerCycle = N2Oopt_pins
+ requiresPowerCycle = pwmidle_freq_scale
+ requiresPowerCycle = boost_ctl_pins_pwm
+ requiresPowerCycle = boost_ctl_pins
+ requiresPowerCycle = boost_ctl_pwm_scale
+ requiresPowerCycle = boost_ctl_pwm
+ requiresPowerCycle = boost_ctl_settings_invert_new
+ requiresPowerCycle = afrload
+ requiresPowerCycle = eaeload
+ requiresPowerCycle = log_style_led
+ requiresPowerCycle = log_style2_but
+ requiresPowerCycle = log_style_on2
+ requiresPowerCycle = log_style3_adc
+ requiresPowerCycle = sequential
+ requiresPowerCycle = boost_feats_tsw
+ requiresPowerCycle = launch_3step_in
+ requiresPowerCycle = maxafr_opt1_led
+ requiresPowerCycle = vss1_pos
+ requiresPowerCycle = vss2_pos
+ requiresPowerCycle = launch_var_on
+ requiresPowerCycle = reluctorteeth1
+ requiresPowerCycle = reluctorteeth2
+ requiresPowerCycle = vss_opt1
+ requiresPowerCycle = vss_opt2
+ requiresPowerCycle = vss1_an
+ requiresPowerCycle = vss2_an
+ requiresPowerCycle = vss1_can_scale
+ requiresPowerCycle = vss2_can_scale
+ requiresPowerCycle = ss_opt1
+ requiresPowerCycle = ss_opt2
+ requiresPowerCycle = wheeldia1
+ requiresPowerCycle = wheeldia2
+ requiresPowerCycle = fdratio1
+ requiresPowerCycle = vss1_can_id
+ requiresPowerCycle = vss1_can_offset
+ requiresPowerCycle = vss2_can_offset
+ requiresPowerCycle = vss3_can_offset
+ requiresPowerCycle = vss4_can_offset
+ requiresPowerCycle = vss_opt0_1
+ requiresPowerCycle = vss_opt0_2
+ requiresPowerCycle = vss_opt0_3
+ requiresPowerCycle = vss_opt0_4
+ requiresPowerCycle = ss_opt1_spd
+ requiresPowerCycle = ss1_pwmseq
+ requiresPowerCycle = ss2_pwmseq
+ requiresPowerCycle = gear_can_offset
+ requiresPowerCycle = n2o1n_pins
+ requiresPowerCycle = n2o1f_pins
+ requiresPowerCycle = n2o2n_pins
+ requiresPowerCycle = n2o2f_pins
+ requiresPowerCycle = water_freq_on
+ requiresPowerCycle = water_pins_pump
+ requiresPowerCycle = water_pins_valve
+ requiresPowerCycle = water_pins_in_shut
+ requiresPowerCycle = egt_num
+ requiresPowerCycle = accXport
+ requiresPowerCycle = accYport
+ requiresPowerCycle = accZport
+ requiresPowerCycle = egt1port
+ requiresPowerCycle = egt2port
+ requiresPowerCycle = egt3port
+ requiresPowerCycle = egt4port
+ requiresPowerCycle = egt5port
+ requiresPowerCycle = egt6port
+ requiresPowerCycle = egt7port
+ requiresPowerCycle = egt8port
+ requiresPowerCycle = egt9port
+ requiresPowerCycle = egt10port
+ requiresPowerCycle = egt11port
+ requiresPowerCycle = egt12port
+ requiresPowerCycle = egt13port
+ requiresPowerCycle = egt14port
+ requiresPowerCycle = egt15port
+ requiresPowerCycle = egt16port
+ requiresPowerCycle = MAFOption
+ requiresPowerCycle = MAFOption_t
+ requiresPowerCycle = MAFOption_f
+ requiresPowerCycle = vssout_opt
+ requiresPowerCycle = vssout_optunits
+ requiresPowerCycle = gear_method
+ requiresPowerCycle = gear_port_an
+ requiresPowerCycle = ac_idleup_io_in
+ requiresPowerCycle = ac_idleup_settings
+ requiresPowerCycle = ac_idleup_io_out
+ requiresPowerCycle = fanctl_settings_on
+ requiresPowerCycle = fanctl_settings_pin
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = boost_ctl_settings_on2
+ requiresPowerCycle = boost_ctl_settings_cl2
+ requiresPowerCycle = boost_ctl_pins_pwm2
+ requiresPowerCycle = boost_ctl_pins2
+ requiresPowerCycle = boost_ctl_sensor2
+ requiresPowerCycle = egoport1
+ requiresPowerCycle = egoport2
+ requiresPowerCycle = egoport3
+ requiresPowerCycle = egoport4
+ requiresPowerCycle = egoport5
+ requiresPowerCycle = egoport6
+ requiresPowerCycle = egoport7
+ requiresPowerCycle = egoport8
+ requiresPowerCycle = egoport9
+ requiresPowerCycle = egoport10
+ requiresPowerCycle = egoport11
+ requiresPowerCycle = egoport12
+ requiresPowerCycle = egoport13
+ requiresPowerCycle = egoport14
+ requiresPowerCycle = egoport15
+ requiresPowerCycle = egoport16
+ requiresPowerCycle = tc_opt_on
+ requiresPowerCycle = tc_led_out
+ requiresPowerCycle = tc_opt_method
+ requiresPowerCycle = tc_enin
+ requiresPowerCycle = fueltemp1
+ requiresPowerCycle = sensor01_source
+ requiresPowerCycle = sensor02_source
+ requiresPowerCycle = sensor03_source
+ requiresPowerCycle = sensor04_source
+ requiresPowerCycle = sensor05_source
+ requiresPowerCycle = sensor06_source
+ requiresPowerCycle = sensor07_source
+ requiresPowerCycle = sensor08_source
+ requiresPowerCycle = sensor09_source
+ requiresPowerCycle = sensor10_source
+ requiresPowerCycle = sensor11_source
+ requiresPowerCycle = sensor12_source
+ requiresPowerCycle = sensor13_source
+ requiresPowerCycle = sensor14_source
+ requiresPowerCycle = sensor15_source
+ requiresPowerCycle = sensor16_source
+ requiresPowerCycle = shift_cut_on
+ requiresPowerCycle = shift_cut_gear
+ requiresPowerCycle = shift_cut_in
+ requiresPowerCycle = shift_cut_out
+ requiresPowerCycle = shift_cut_fuel
+ requiresPowerCycle = pwm_opt_on_a
+ requiresPowerCycle = pwm_opt_on_b
+ requiresPowerCycle = pwm_opt_on_c
+ requiresPowerCycle = pwm_opt_on_d
+ requiresPowerCycle = pwm_opt_on_e
+ requiresPowerCycle = pwm_opt_on_f
+ requiresPowerCycle = pwm_opt2_a
+ requiresPowerCycle = pwm_opt2_b
+ requiresPowerCycle = pwm_opt2_c
+ requiresPowerCycle = pwm_opt2_d
+ requiresPowerCycle = pwm_opt2_e
+ requiresPowerCycle = pwm_opt2_f
+ requiresPowerCycle = dualfuel_sw_on
+ requiresPowerCycle = dualfuel_pin
+ requiresPowerCycle = dualfuel_opt_mode
+ requiresPowerCycle = dualfuel_opt_out
+ requiresPowerCycle = dualfuel_temp_sens
+ requiresPowerCycle = dualfuel_press_sens
+
+ requiresPowerCycle = dualfuel_sw_fuel
+ requiresPowerCycle = dualfuel_sw_spk
+ requiresPowerCycle = dualfuel_sw_afr
+ requiresPowerCycle = dualfuel_sw_rf
+ requiresPowerCycle = dualfuel_sw_stoich
+ requiresPowerCycle = dualfuel_sw_wue
+ requiresPowerCycle = dualfuel_sw_ase
+ requiresPowerCycle = dualfuel_sw2_prime
+ requiresPowerCycle = dualfuel_sw2_crank
+ requiresPowerCycle = dualfuel_sw2_injp
+ requiresPowerCycle = dualfuel_sw2_smpw
+ requiresPowerCycle = dualfuel_sw2_ob
+ requiresPowerCycle = dualfuel_sw2_boosw
+ requiresPowerCycle = dualfuel_sw2_ae
+
+ requiresPowerCycle = als_opt_pwmout
+ requiresPowerCycle = als_in_pin
+ requiresPowerCycle = als_out_pin
+ requiresPowerCycle = als_pwm_opt_freq
+ requiresPowerCycle = als_pwm_opt2
+ requiresPowerCycle = vvt_opt1_on
+ requiresPowerCycle = vvt_out1
+ requiresPowerCycle = vvt_out2
+ requiresPowerCycle = vvt_out3
+ requiresPowerCycle = vvt_out4
+ requiresPowerCycle = vvt_opt2_cam1pol
+ requiresPowerCycle = vvt_opt2_cam2pol
+ requiresPowerCycle = vvt_opt2_cam3pol
+ requiresPowerCycle = vvt_opt2_cam4pol
+ requiresPowerCycle = vvt_opt3_cam2
+ requiresPowerCycle = vvt_opt3_cam3
+ requiresPowerCycle = vvt_opt3_cam4
+ requiresPowerCycle = tclu_brakepin
+ requiresPowerCycle = tclu_enablepin
+ requiresPowerCycle = tclu_outpin
+ requiresPowerCycle = vvt_opt4_decode
+ requiresPowerCycle = vvt_opt6_freq
+ requiresPowerCycle = vvt_softout1
+ requiresPowerCycle = vvt_softout2
+ requiresPowerCycle = vvt_softout3
+ requiresPowerCycle = vvt_softout4
+ requiresPowerCycle = knk_pin_out
+ requiresPowerCycle = ltt_opt_on
+ requiresPowerCycle = ltt_but_in
+ requiresPowerCycle = ltt_led_out
+ requiresPowerCycle = timedout1_in
+ requiresPowerCycle = timedout1_out
+ requiresPowerCycle = tstop_out
+ requiresPowerCycle = NoiseFilterOpts
+ requiresPowerCycle = map_phase_thresh
+ requiresPowerCycle = staged_extended_opts_use_v3
+ requiresPowerCycle = staged_extended_opts_simult
+ requiresPowerCycle = staged_extended_opts_pw1off
+ requiresPowerCycle = staged_first_param
+ requiresPowerCycle = staged_second_param
+ requiresPowerCycle = staged_transition_on
+ requiresPowerCycle = staged_pw1_0
+ requiresPowerCycle = staged_out1
+ requiresPowerCycle = fp_opt_mode
+ requiresPowerCycle = fp_opt_inv
+ requiresPowerCycle = fp_out1
+ requiresPowerCycle = alternator_opt_mode
+ requiresPowerCycle = alternator_controlout
+ requiresPowerCycle = alternator_control_inv
+ requiresPowerCycle = alternator_freq
+ requiresPowerCycle = alternator_lampout
+ requiresPowerCycle = alternator_freq_monin
+ requiresPowerCycle = alternator_freq_moninv
+ requiresPowerCycle = alternator_freq_currin
+ requiresPowerCycle = alternator_freq_currinv
+ requiresPowerCycle = oilpress_in
+ requiresPowerCycle = oilpress_out
+ requiresPowerCycle = cel_port
+ requiresPowerCycle = generic_pid_flags_a_on
+ requiresPowerCycle = generic_pid_flags_b_on
+ requiresPowerCycle = generic_pid_flags_a_direction
+ requiresPowerCycle = generic_pid_flags_b_direction
+ requiresPowerCycle = generic_pid_pwm_opts_freq_a
+ requiresPowerCycle = generic_pid_pwm_opts_freq_b
+ requiresPowerCycle = generic_pid_pwm_outs_a
+ requiresPowerCycle = generic_pid_pwm_outs_b
+ requiresPowerCycle = can_rcv_opt_on
+ requiresPowerCycle = iobox_opta1
+ requiresPowerCycle = iobox_opta2
+ requiresPowerCycle = iobox_opta3
+ requiresPowerCycle = iobox_opta4
+ requiresPowerCycle = iobox_optb1vss
+ requiresPowerCycle = iobox_optb2vss
+ requiresPowerCycle = iobox_optb3vss
+ requiresPowerCycle = iobox_optb4vss
+ requiresPowerCycle = pitlim_opt_on
+ requiresPowerCycle = pitlim_enin
+
+ defaultValue = tsCanId, "CAN ID 0"
+ defaultValue = rpmhigh, 9000
+ defaultValue = rpmwarn, 3000
+ defaultValue = rpmdang, 5000
+ defaultValue = loadhigh, 400
+ defaultValue = wue_lpg, "No"
+ defaultValue = vehigh, 255
+ defaultValue = clt_exp, 0
+ defaultValue = sensor01Alias, "Sensor 01"
+ defaultValue = sensor02Alias, "Sensor 02"
+ defaultValue = sensor03Alias, "Sensor 03"
+ defaultValue = sensor04Alias, "Sensor 04"
+ defaultValue = sensor05Alias, "Sensor 05"
+ defaultValue = sensor06Alias, "Sensor 06"
+ defaultValue = sensor07Alias, "Sensor 07"
+ defaultValue = sensor08Alias, "Sensor 08"
+ defaultValue = sensor09Alias, "Sensor 09"
+ defaultValue = sensor10Alias, "Sensor 10"
+ defaultValue = sensor11Alias, "Sensor 11"
+ defaultValue = sensor12Alias, "Sensor 12"
+ defaultValue = sensor13Alias, "Sensor 13"
+ defaultValue = sensor14Alias, "Sensor 14"
+ defaultValue = sensor15Alias, "Sensor 15"
+ defaultValue = sensor16Alias, "Sensor 16"
+ defaultValue = prefSpeedUnits, 0
+ defaultValue = prefLengthUnits, 0
+ defaultValue = scatterRuntimeEnabled, 1
+
+[SettingContextHelp]
+; constantName = "Help Text"
+; tool tips tooltips
+;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable.
+ nCylinders = "The number of cylinders or rotors in your engine."
+ engineType = "Most engines are Even Fire. Typical odd-fire engines are V-twin, some V4, Vmax, some V6, V10."
+ reqFuel = "Global fuel constant. Use the ReqFuel calculator. (Technically related to a pulsewidth at 100%VE)\n\nFirst, fill in all settings below and then click the [Required Fuel] button."
+ tempTable = ""
+ map0 = "MAP reading at 0V, typically pick a sensor from 'common MAP sensors.'"
+ mapmax = "MAP reading at 5V, typically pick a sensor from 'common MAP sensors.'"
+ clt0 = ""
+ cltmult = ""
+ mat0 = ""
+ matmult = ""
+ tpsMin = "With engine off, set TPS at minimum (foot off pedal) then click 'get current'"
+ tpsMax = "With engine off, set TPS at maximum (foot to floor) then click 'get current'"
+ batt0 = "Can be used to correct battery voltage readings."
+ battmax = "Can be used to correct battery voltage readings."
+ ego0 = ""
+ egomult = ""
+ baro0 = "Baro reading at 0V, typically pick a sensor from 'common Baro sensors.'"
+ baromax = "Baro reading at 5V, typically pick a sensor from 'common Baro sensors.'"
+ bcor0 = "The barometeric correction to fuel at a total vacuum.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ bcormult = "The rate of change of correction.\nFor new installs set these two settings to zero and the barometric correction curve to 100% across the board.\nImported settings from older code versions use a vacuum of 147, a rate of -47 and have the curve at zero."
+ crankTolerance = "Percentage tolerance for next input pulse while cranking."
+ asTolerance = "Percentage tolerance for next input pulse during after start period."
+ pulseTolerance = "Percentage tolerance for next input pulse while running."
+
+ IdleCtl = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve = basic open or closed valve (rare)\nPWM valve (2,3 wire) = common from Ford or Bosch.\nStepper (4,6 wire) = common with GM, Subaru "
+ IdleCtl_alg = "Open-Loop controls the valve purely based on temperature.\nClosed-Loop adjusts the valve position to achieve a target RPM"
+ IACtstep = "Time between each stepper motor step.\nIncrease this if the motor appears to behave intermittently."
+ IAC_tinitial_step = "The length of the first motor step. Typically set a little longer to improve reliability."
+ IACminstep = "Minimum number of steps to move in one go."
+ IACStart = "On startup the stepper motor will move this many steps to ensure it has reached the home position. Set the value to a number larger than the number of steps required for full travel. (This was formerly called 'Start Value')"
+ IdleCtl_home = "Whether to home the valve to the fully closed or fully open position."
+ IACcurlim = "Stepper motor current control when not stepping.\nMoving only: turns off power between steps, motor stays cooler but may be unreliable.\nHold current: a holding current is applied between steps.\nAlways on: full current is always applied. Most heat, but reliable."
+ iacfullopen = "Number of steps from closed to full open. Homing steps must be set to a larger number."
+ IdleHyst = "Amount the coolant temperature must move before idle position is changed."
+ IACcrankxt = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidlecranktaper = "After the engine starts, the idle valve moves from the 'cranking position' to the 'run' position. This setting controls how long that transition takes."
+ pwmidleset_inv = "Most valves work with 0% = closed. A few valve may work in the opposite direction."
+ pwmidle_freq_pin = "Output for idle valve."
+ pwmidle_freq_pin3 = "Second output for idle valve in 3-wire mode."
+ pwmidle_freq_scale = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz."
+ pwmidle_freq_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
+ fastIdleT = "Open the idle valve below this temperature for fast-idle."
+ divider = ""
+ alternate = "Sets injector staging in non-sequential modes. For Sequential set 2 Squirts/Alternating or 1 Squirt/Simultaneous."
+ twoStroke = "Four-Stroke (most engines), Two-stroke or Rotary."
+; injType = "Not used presently."
+ nInjectors = "Number of primary injectors i.e. not any secondary staged injectors you may have."
+ rpmLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mapLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ mafLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ tpsLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ egoLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ adcLF = "Smoothing factors. 100% = no smoothing. 10% = highly smoothed."
+ feature3_tps = "Automatically recalibrate TPS if negative TPS values are seen. This can be useful if the zero position on your TPS varies.\n(The temporary recalibration is not saved.)"
+ baud = "This should be set to 115200."
+ baudhigh = "Optional faster baudrate for SDcard datalog readback.\nUseful options are 115200, 230400, 460800.\nUse the quickest that works reliably on your hardware. A direct USB cable is likely to work best."
+; These tips for on/off outputs do not show up in 2.1.13, but added for the future
+ psEnabled = "Enables this output for programmable control. Do NOT enable an output here that is already is use for another feature e.g. idle, boost etc."
+ psCondition = "The variable to the left (like in a datalog) is compared with the target value, the output triggers if:\n> variable is greater than target.\n= variable equals target precisely (useless)\n< variable is less than target\nAnd logical bitwise AND with the target."
+ psConnector = "Whether to include a second condition and whether condition 1 AND condition 2 must be true or condition 1 OR condition 2."
+ psInitValue = "Typically this is set to 0 which means the output is off."
+ psPortValue = "Typically this is set to 1 which means the output is on when triggered."
+ psOutSize = ""
+ psOutOffset = ""
+ psThreshold = "This is the target value that the variable is compared against."
+ psHysteresis = "A deadband to prevent the output bouncing on and off."
+
+ firea = "Firing order is used for trim and per-cylinder corrections so the adjustment is applied to the correct cylinder number. Injectors and coils must still be wired in firing order sequence. i.e. InjA = cyl1, InjB = next cylinder to fire"
+ enginesize = "Engine size or displacement in cc. Fill this in before using the ReqFuel calculator.\nTo convert from cu.in to cc, multiply by 16.39"
+ staged_pri_size = "The size of each of your main/primary injectors in cc/min.\nTypical conversion from lbs/hr is multiply by 10.5"
+
+ sequential = "Off - disables sequential fuel and runs batch fire. Semi-sequential - fires injectors in pairs spread over a crank rotation (Requires a crank wheel.) Fully-Sequential - fires each injector in turn spread over a full engine cycle (requires a cam sensor on 4-stroke for phase information.)"
+ sequential_angle_spec = "Whether to time the injection by the start, middle or end of the pulse. End is most common and typically arranged so that injection has finished just before the inlet valve opens."
+ sequential_trim_on_off = "Whether to enable per-cylinder trim tables. This allows each cylinder to be tuned individually if you have per-cylinder widebands or EGT."
+ baroCorr = "Enables or disables fuel adjustment for barometer (altitude.)\nOff = ignore baro\nInitial MAP reading = take a sample from the MAP sensor at power-on. Not recommended as this can easily get an incorrect reading if you are quick on the key or powercycle while the engine is running.\nTwo independent sensors = use a second dedicated barometer sensor.\n\nIt is strongly recommended to use a dedicated baro sensor if your vehicle will see altitude changes."
+ rtbaroport = "The connection to an external or internal barometer sensor."
+
+ baro_upper = "Maximum possible barometer reading that the engine will see. (typ. 102kPa) Limits faulty readings."
+ baro_lower = "Lowest possible barometer reading that the engine will see. (typ. 68-80kPa) Limits faulty readings."
+ baro_default = "Fixed barometer reading for when barometric correction is disabled."
+ mapport_t = "Selects voltage (common) or frequency (rare) type MAP sensor input.\nOff disables the MAP input. e.g. for pure Alpha-N or MAF installs."
+ mapport = "The connection to an external or internal voltage MAP sensor."
+ mapport_f = "The connection to an external or internal frequency MAP sensor."
+ map_freq0 = "The low frequency corresponding to the least MAP."
+ map_freq1 = "The high frequency corresponding to the most MAP."
+ map2port = "If fitted, the connection to a second voltage MAP sensor.\nDo not confuse this with baro sensing.\nThis is for a second sensor measuring manifold pressure. Typically this would only be used on engines with two runners or plenums and no balance tube."
+ tempUnits = "Selects the temperature units displayed on the optional MegaView."
+
+ algorithm = "The calculation method for fuel. The choices are:\nSpeed Density (uses MAP sensor)\nPercent Baro (Speed-Density but with barometric pressure difference included)\nAlpha-N (uses TPS)\nMAF (uses MAF)\nITB (a mode specifically for Independent Throttle Bodies)"
+ algorithm2 = "Enables a second modifier or blended fuel table (VE2)\n\nAdvanced use only."
+ loadCombine = "Selects the modifier or blend method"
+ loadMult = "Normal Speed-Density should enable 'Multiply MAP'. In rare circumstances, this can be disabled. %baro works the same. With Alpha-N, enabling multiply MAP gives 'Hybrid Alpha-N' : disabling multiply MAP gives 'Pure Alpha-N'. MAF never multiplies in MAP."
+ loadMult2 = "The same as Multiply MAP, but this setting controls the secondary blended tables VE2 and VE4 - allowing for example Speed-Density (with MAP) on VE1 to be blended with a Pure Alpha-N (without MAP) on VE2."
+ loadStoich = "Including the AFR target with the speed-density algorithm allows the VE table to be a 'real' VE table and the desired AFR to be specified in the AFR table.\nWith AFR not included, the AFR table is for reference only and the 'VE' table takes full control.\n\nWith the MAF algorithm, this MUST be enabled to factor the target AFR into the fuel equation."
+ loadopts_oldbaro = "Enables old-style compatability barometric calculations. Not recommended for new installs."
+ stoich = "The stoichiometric (chemical ideal) AFR for the fuel in use. This is only used when 'incorporate AFR target' is enabled. For gasoline use 14.7. For alternate fuels, alter this number, alter the AFR target table and set your wideband calibration appropriately."
+ IgnAlgorithm = "The load Y-axis for ignition table lookups"
+ IgnAlgorithm2 = "Enables a second modifier or blended fuel table (Spk2)\n\nAdvanced use only."
+ loadCombineign = "Selects the modifier or blend method"
+ afrload = "The load Y-axis for AFR table lookups"
+ eaeload = "The load Y-axis for EAE curve lookups"
+ OvrRunC = "Over-run fuel cut is a method to totally cut off fuel during over-run situations such as coasting down a hill in gear. Be sure to set the parameters so that it is only triggered under true over-run conditions and not during regular driving."
+ OvrRunC_progcut = "Allows sequential injectors to be cut progressively for a smoother activation."
+ OvrRunC_progret = "Allows sequential injectors to be returned progressively for a smoother return. Does not make sense to use this with the accel-event option."
+ OvrRunC_progign = "Allows ignition timing transition during fuel cut."
+ OvrRunC_retign = "Allow ignition timing transition during fuel return."
+
+ fc_rpm = "Typically a number of hundred RPM above idle."
+ fc_kpa = "Typically this will be below your idle kPa."
+ fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
+ fc_clt = "Set this to prevent over-run operation on a cold engine."
+ fc_delay = "The delay prevents jerky on/off operation during transients."
+ fc_ego_delay = "Over-run will give a full-lean EGO reading and closed-loop EGO should be disabled until a sensible reading is available. Set this long enough so that the EGO sensor is returning a true reading."
+ fc_rpm_lower = "Allows a dead-band of RPM for smoother operation. Typically set this a few hundred RPM below your minimum RPM setting."
+ fc_transition_time = "Once main fuel cut delay timer has run, this sets a transition time from normal spark advance to the advance during overrun. The timer is also used for the progressive fuel cut.\nTypically set a retarded timing for overrun with a second time for smooth activation."
+ fc_trans_time_ret = "This sets a transition time from overrun to normal conditions and is used with progressive spark return and progressive fuel return.\nIf the throttle is applied above the threshold, the fuel and timing are immediately returned cancelling this timer."
+ fc_ae_time = "The length of time that additional fuel is added after over-run ends to avoid a lean-spike."
+ fc_timing = "The ignition advance during overrun. Typically set to a low number or ATDC timing."
+ fc_ae_pct = "Fuel adder after over-run ends to avoid a lean-spike."
+
+ RevLimOption_retard = "Options for spark retardation to limit revs.\nOff = no spark retard used\nProgressive Retard = timing is progressively retarded above the set RPM\nFixed angle = above the set RPM the timing is immediately changed to the angle you specify."
+ RevLimMaxRtd = "Maximum timing retard."
+ RevLimRtdAng = "Timing value used in Fixed angle."
+ RevLimOption_spkcut = "Enables spark-cut limiting.\nCaution! This can cause catalyst damage and is noisy in operation.\nWill not work with EDIS, TFI or GMDIS"
+ RevLimNormal2 = "Specifies the revlimiter max RPM.\nYou MUST also select a rev-limiter type below.\n\nSee the 'Gauge and Settings Limits' page to alter the maximum allowed RPM number."
+ RevLimNormal2_hyst = "Sets an RPM deadband, soft limiters start this many RPM below the hard limit. If full fuel cut the RPMs must fall by this much before fuel is re-enabled. A number of hundred RPM is suggested."
+ RevLimCLTbased = "Enables optional coolant based rev limiter, so that the rev limit can be lowered when the engine is cold. The curve itself sets the hard rev limit at your chosen temperatures."
+ TpsBypassCLTRevlim = "Above this TPS% the coolant curve is ignored and the normal hard rev limit is used. This should be set to a high %age number, so that only in an emergency when you really need full throttle on a cold engine can you override the cold limit. Or set to over 100% so that the limit in the curve is always used whatever the throttle position."
+ RevLimOption_fuelcut = "Whether fuel-cut rev limiting is enabled."
+ RevLimOption_fuelprog = "Enables a progressive non-rotational fuel cut that drops cylinders as revs rise between the lower and hard fuel cut limits.\nMUST NOT be used with staged or throttle-body injection."
+
+ tacho_opt80 = "Enables the tacho output"
+ tacho_opt3f = "Selects the output pin"
+ tacho_opt40 = "Normal - an output pulse is generated matching each cylinder event. i.e. 4 cylinder engines have 4 pulses per engine cycle.\nHalf speed - output runs at half speed. This can enable a 4-cyl tacho to be used on an 8-cyl engine."
+ tacho_optvar = "Fixed = Use a fixed tachometer scaling of full speed or half speed.\nVariable = fully variable tachometer output.\nTypical settings are 'Fixed' and 'Normal'"
+ tacho_scale = "Percentage scaling of tachometer output, 100% means a true output. Adjust up or down to correct inaccuracies in your tachometer."
+
+ fanctl_settings_on = "Enables fan control"
+ fanctl_settings_idleup = "Whether the fan activation should also raise the idle"
+ fanctl_settings_pin = "Selects the output pin for the fan relay"
+ fanctl_idleup_delay = "How long to wait after raising idle before turning on fan"
+ fanctl_idleup_adder_duty = "PWM open-loop duty cycle to increase by"
+ fanctl_idleup_adder_steps = "Additional stepper idle steps to open"
+ fan_idleup_cl_targetadder = "Target rpm to increase by"
+ fanctl_ontemp = "Turn fan on above this temperature"
+ fanctl_offtemp = "Turn fan off below this temperature (must be lower than "on" temperature)"
+ fanctl_opt2_engineoff = "Allows fan to run in key-on, engine-off situation"
+ fan_ctl_settings_acfan = "Whether the fan should be automatically turned on to help cool the A/C radiator."
+ fan_idleup_tps_offpoint = "Disable fan above this TPS% (reduces load on engine when max power desired.)"
+ fan_idleup_tps_hyst = "Deadband of TPS% "
+ fan_idleup_vss_offpoint = "Disable fan above this vehicle speed (at high speeds airflow through radiator will be sufficient on its own.)"
+ fan_idleup_vss_hyst = "Deadband of VSS"
+
+ tclu_outpin = "Selects output port to connect to lockup solenoid "
+ tclu_enablepin = "Selects optional input port for enable switch (could be used for 4th gear pressure switch.) "
+ tclu_brakepin = "Selects optional input port for brake light switch (brake light unlocks convertor.) "
+ tclu_tpsmin = "Minimum TPS to enable lockup "
+ tclu_tpsmax = "Maximum TPS to enable lockup "
+ tclu_mapmin = "Minimum MAP to enable lockup "
+ tclu_mapmax = "Maximum MAP to enable lockup "
+ tclu_opt_vss = "Optionally allow VSS1 or VSS2 speed input as criteria "
+ tclu_vssmin = "Sets minimum speed for lockup. (Requires VSS input in speed/gear sensors.) "
+ tclu_opt_gear = "Optionally allows gear number as criteria. (Requires gear to be enable in speed/gear sensors.) "
+ tclu_gearmin = "Minimum gear to enable lockup "
+ tclu_delay = "Wait this long after conditions are met before locking up."
+ MAFOption_t = "Selects between 0-5V voltage input (e.g. most MAFs) or frequency input (e.g. GM)\nOff disables the MAF input. "
+ MAFOption = "Selects the hardware input pin where the voltage MAF is connected."
+ MAFOption_f = "Selects from four possible frequency input pins."
+ maf_freq0 = "The frequency the MAF outputs to indicate least air flow."
+ maf_freq1 = "The frequency the MAF outputs to indicate greatest air flow."
+ feature7_mafmat = "Optionally enables a trim curve based on MAT sensor input."
+ feature7_maftrim = "Optionally enables VE table 1 as a trim table. Fill the table with 100% to begin with. "
+ maf_range = "Sets the range to match your MAF sensor. Set this before loading a MAF calibration curve. On gasoline, 650g/s ~800hp; 1300g/s ~1600hp; 1950g/s ~2400hp and 2600g/s ~3200hp. Use the lowest range suitable for better low-end precision. "
+ feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
+ opentime_opt1_master = "Same = one dead-time across all injectors. Most common.\n\nIndividual = the dead time for each injector is set individually."
+ opentime_opt1 = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)"
+ opentime_opta_pwm = "Enables PWM current limiting (peak and hold) for low ohm injectors."
+ injPwmPd = "The period/frequency during the hold phase. Safe to leave at 66us."
+ injPwmT = "This the 'peak' time and is typically set to 1-1.5ms"
+ injPwmP = "This is the 'hold' percentage current. 30-50% is typical."
+ opentime_optb_own = "Enables different settings for bank 2. Only applicable if physically different injectors are on the second bank. Could be used with staged injection.\nFor most engines, this should be set to Off."
+ opentime_opta = "You can choose one of the four battery voltage correction curves. (If in doubt pick curve 1 and leave the curve alone.)"
+ smallpw_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. "
+ smallpw2_opt1_master = "The Injector Small Pulsewidths feature allows the user to make a correction and make the non-linear region more linear in nature. Unless you have calibration data for your injectors measured on your Megasquirt, this feature should be left turned off. \n\nThis setting applies to table switched different injectors."
+ staged_first_param = "This setting enables staged injection and sets the primary staging parameter, which is used to determine when to engage the secondary injectors.\nFor table-based staging, 0% means not staged at all, and 100% means fully staged, between is partially staged."
+ staged_sec_size = "Size of secondary injectors in cc/min"
+
+ staged_extended_opts_pw1off = "Off = when staged, primary and secondary pulse-widths are equal.\n\nOn = when staged, primaries are shut down completely and just secondary injectors are used."
+ staged_extended_opts_use_v3 = "Whether the secondaries are connected to MS3X outputs or to the InjI/J batch fire outputs."
+ staged_extended_opts_simult = "Whether the batch fire outputs alternate during an engine cycle or fire once together."
+ staged_transition_on = "Allows a gradual transition into staging instead of a hard switch point."
+ staged_transition_events = "how many ignition events it will take to go from no staging to fully staged."
+ staged_primary_delay = "Delays the reduction of the primary pulse width by a number of ignition events after the secondaries start coming online."
+ staged_secondary_enrichment = "This setting is used to inject more fuel on the secondaries than the fully staged calculation determines. This is useful when there is a small lean spot just after staged injection fully engages."
+ staged_param_1 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_1 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_param = "This setting is used to add a second method for determining when to stage."
+ staged_param_2 = "Used to determine when staged injection engages when using RPM, MAP, TPS, or Duty."
+ staged_hyst_2 = "Used as a deadband to determine when staged injection shuts off."
+ staged_second_logic = "Whether both parameters or either parameter will enable staging."
+ staged_out1 = "Use a relay output to enable secondary injectors (GM systems) where primary and secondary injectors are wired to the same injector output."
+ staged_out2 = "Use a relay output earlier than secondary injectors (GM air-flaps)."
+ staged_out1_inv = "Allows output polarity sense to be swapped"
+ staged_out2_inv = "Allows output polarity sense to be swapped"
+ staged_out2_time = "How long the pre-output is active before the staging transition begins."
+ flexFuel = "This enables or disables the Flex Fuel system."
+ flexport = "Selects where the sensor is connected."
+ fueltemp1 = "If used, specifies a sensor input for fuel temperature."
+ fuelFreq0 = "The low and high frequencies generated by the sensor (e.g. 50Hz, 150Hz for the GM sensor)"
+ flex_pct0 = "The ethanol percentage corresponding to the low and high frequencies."
+ fuelCorr0 = "The fuel multiplier. 100% means no change. The default of 163% for fully ethanol gives 63% additional fuel."
+ fuelSpkDel0 = "The timing addition in degrees. E85 burns more slowly than pure gasoline and will require more advance."
+ ff_tpw0 = "The pulsewidth from the sensor at low and high temperatures (1.0, 5.0ms for GM)"
+ ff_temp0 = "The low/high temperatures at low/high pulsewidths"
+ fuelCorr_default = "Multiplier to be used if the sensor sends an out of range frequency. (Faulty sensor or an error condition.)"
+ fuelSpkDel_default = "Timing to add under fault conditions. (Expected to be 0 or negative.)"
+ fuelFreq1 = ""
+ flex_pct1 = ""
+ fuelCorr1 = ""
+ fuelSpkDel1 = ""
+ flex_baseline = "Ethanol percentage in regular fuel, assumes that the main fuel and spark tables are tuned for regular fuel. Allows flex-fuel system to be enabled without retuning base tables. Set to 0 for backwards compatability."
+
+ egoAlgorithm = "None - no fuel changes are made in response to oxygen sensor readings.\nSimple - This method of closed-loop EGO control is well-suited to use with a narrowband O2 sensor. \nPID - This method incorporates a Proportional Integral Derivative control loop which tuned properly, adjusts the amount of fuel being injected to quickly get to the target, and then maintains the target without any oscillation."
+ egoAlgorithm_auth = "Enables a table of EGO authority based on RPM/load. This allows greater control over when closed-loop EGO is operational and permits variable authority. An authority of zero means there will be no correction made. Normally the RPM and load axes should be set the same as the AFR tables."
+ egoCount = "The number of ignition events between each correction."
+ egoDelta = "controls how large each correction 'step' is."
+ egoLimit = "The maximum amount of adjustment performed by the closed-loop algorithm."
+ ego_lower_bound = "Only correct above this AFR"
+ ego_upper_bound = "Only correct below this AFR"
+ egoTemp = "Only correct above this temperature."
+ egoRPM = "Only correct above this RPM."
+ TPSOXLimit = "Only correct below this throttle position."
+ MAPOXLimit = "Only correct below this load."
+ MAPOXMin = "Only correct above this load."
+ ego_startdelay = "Only correct when engine has been running at least this long."
+ egoKP = "Proportional term"
+ egoKI = "Integral term"
+ egoKD = "Differential term"
+ egoType = "Disabled - No EGO sensor enabled.\nNarrowband = Enable narrowband sensor/s.\nWideband = Enable wideband sensor/s"
+ egonum = "Selects the number of oxygen sensors in use."
+ egoport1 = "Selects where the sensor or controller is connected."
+ egomap1 = "Selects which oxygen sensor applies to this cylinder if multiple sensors are used. When only a single sensor is fitted, ensure all cylinders are set to EGO1."
+
+ spk_mode0 = "Sets the type of tach input pattern decoder to be used."
+ triggerOffset = "In 'Basic Trigger' and 'Trigger Return' this specifies the engine angle BTDC that each trigger pulse is received. (0-19 or 50-80 degrees for best results.)\n\nIn 'Toothed Wheel' this should always be set to zero - use tooth#1 angle instead.\n\nIn other modes this setting can make a +/- 20 degree adjustment to the built-in reference angle."
+ trigret_ang = "This is only used in CAS 4/1 mode and specifies the angular length of each tooth."
+ OddFireang = "For oddfire engines this specifies the angle the engine must rotate from spark A output to spark B output."
+ spk_conf2_gmtfi = "GM HEI, Ford TFI and Buick C3I specific options.\nWith HEI7/8 and GM-DIS, this setting enables the 'bypass' output on spark B.\nThe C3I mode enables the 'bypass' and also quick-sync after the cam signal is received.\n Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors (where one vane is shorter than the others) for sequential fuel."
+ spk_conf2_oddodd = "Alternate = most oddfires such as Ford V4, Chevy V6, Viper V10\n\nPaired = Yamaha Vmax\n\nCustom = set your own oddfire angles."
+ no_skip_pulses = "The number of tach input pulses at start-up that are ignored before ignition calculations and wheel decoding begins. The default value of 3 is suitable for most applications."
+ ICIgnCapture = "This must be matched to your tach input. If it is set incorrectly you can experience timing drift with rpms or misdetection of missing teeth on a missing tooth wheel. The tooth logger can be used to confirm polarity is correct."
+ spkout_hi_lo2 = "This setting is CRITICAL or you will melt your ignition coils. For 99% of installs, this should be set to 'Going high'"
+ spk_mode3 = "Specifies the type of ignition coils in use. TFI, HEI, EDIS, GMDIS must set 'single coil'"
+ hardware_spk = "Selects what outputs are used for ignition.\nSpark = normal logic spark outputs\nTacho = single channel output suitable for TFI and CDI boxes."
+ hardware_cam = "Selects where the cam input is connected.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only. Enable 'Timed min' MAP sampling. Set the MAP sensor phase threshold on the MAP Sample settings page."
+ spk_mode3_tach3 = "Selects where the tertiary tach input is connected"
+ spk_mode3_hirespol = "Selects whether to flip polarity on cam or hi-res tach input.\n\nThe custom wheel decoders require that crank and cam signals are of the same input polarity, in cases where a mix of sensors makes this impossible, this setting can be used to flip the cam input. Does not apply to all decoders."
+ spk_mode3_kick = "Primarily for kick-start engines, the enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
+ kickdelay = "How long after the trigger-return to wait before starting the coil dwell in kick-start mode."
+
+ timing_flags = "Fixed Advance = locks timing to the value set below. This is used for confirming timing with a strobe timing light during setup.\n\nUse table = normal operation where the spark advance table is used."
+
+ use_prediction = "1st Deriv Prediction = engine accleration deceleration is allowed for in timing calculation. (Normal setting)\n\nNo Prediction = no allowance."
+ fixed_timing = "The timing to lock to in 'Fixed' mode"
+ crank_dwell = "Specifies the base coil dwell time during cranking before battery correction is applied."
+ crank_timing = "Specifies the ignition advance to be used while cranking. Typically 5-10 deg BTDC"
+ spk_conf2_dli = "Enables specific multiplexed outputs for use with the Toyota ignition module such as used on the 7MGTE."
+ dwellmode = "Standard Dwell - this is the setting to use for most installs.\nFixed Duty - locks the spark output to a constant duty cycle instead of controlling dwell. e.g. Ford's 'Push Start' TFI modules, Bosch 'smart' ignition modules, or MSD and other CD boxes.\n\nTime After Spark - only intended for Saab Tri-Ionic DI cassettes.\nCharge at trigger - rarely used. Could be used with MSD type CDI boxes when running Basic Trigger only."
+ spk_conf2_dwell = "For time-after-spark, the dwell can be varied with rpm."
+ spk_conf2_dwelltbl = "For 'standard dwell', a table of dwell values can be used. Normally a single dwell value is used."
+ max_coil_dur = "The base dwell time before battery voltage correction. Typical values are 3-4 ms."
+ max_spk_dur = "The time required for the spark to complete, typically in the order of 1 millisecond."
+ dwelltime = "The backwards dwell time for Time-After-Spark"
+ dwellduty = "For fixed duty, this specifies the %age duty cycle of the output signal."
+ hw_latency = "If you notice a slight retarding of ignition timing with rpm while strobing with fixed timing, you can enter a small number in here to remedy it."
+ feature4_0igntrig = "This is not used on MS3-Pro."
+ spk_mode3_trim = "Enables the adjustment of timing per individual cylinder."
+
+ spk_config_trig2 = "Single wheel with missing tooth = typically a crank wheel such as 36-1 or 60-2\n\nDual wheel = two wheels without missing teeth e.g. Nippodenso 24/1 CAS\n\nDual wheel with missing tooth = typically a 36-1, 60-2 crank wheel and an additional cam wheel."
+ triggerTeeth = "The number of effective teeth, counting the missing teeth as if they existed. i.e. a 36-1 wheel has 35 physical teeth, but enter 36."
+ No_Miss_Teeth = "The number of missing teeth. Common are 1 for 36-1, or 2 for 60-2 or 36-2"
+ Miss_ang = "See the 'Trigger Wheel' section of the manual for more detail on this important setting."
+ spk_config_camcrank = "Does the main wheel rotate at crankshaft speed or camshaft (distributor) speed."
+ spk_config_trig2l = "Like ignition input capture above, specifies which voltage level is considered 'active'"
+ spk_config_campol = "In 'Poll level' mode specifies which voltage level is used for each engine phase."
+ spk_config_resetcam = "How often are second trigger (e.g. cam) input pulses received."
+ poll_level_tooth = "Which crank tooth number to poll the cam level at. Default is 1.\nRover 4.6 try 17.\nChanging the tooth no. may also change the phase."
+ oddfireangs1 = "Number of crank degrees engine rotates from Spk A to Spk B"
+ oddfireangs2 = "Number of crank degrees engine rotates from Spk B to next cyl"
+ oddfireangs3 = "Number of crank degrees engine rotates from Spk C to next cyl"
+ oddfireangs4 = "Number of crank degrees engine rotates from Spk D to next cyl"
+ mapsample_opt2 = "'Use event average' is useful for most engines.\n\n'Use timed min' is intended for 1cyl, V twins with highly cyclic MAP signals."
+ map_sample_duration = "How many degrees to sample over. The starting angle is set in the curve above."
+ mapsample_opt1 = "How many ignition events to sample over. Typically set to 1 for large engines or 2 for 1,2 cylinder."
+ map_phase_thresh = "When using the MAP sensor to detect engine phase, this sets a pressure threshold that can identify the intake vs. exhaust phases. Will be highly engine dependent, 80kPa worked on a small 1-cyl."
+
+ fp_opt_mode = "On/Off is used for basic control where the Megasquirt controls the negative side of a relay.\nOpen-Loop PWM provides a table based duty cycle for a fuel pump controller.\nClosed-Loop PWM monitors actual rail pressure and adjusts the duty cycle output to the pump controller to maintain a set differential pressure."
+ fp_ctl_ms = "How often to run the control calculations"
+ fp_out1 = "The output used to control the fuel pump (either to the relay or to a controller.)"
+ fp_freq = "For PWM outputs, this sets the output frequency."
+ fp_opt_inv = "Set to 'Normal' for On/Off. This setting is useful for PWM outputs and should be set to 'Invert' when using one of the mid-current ECU outputs as they invert the signal. The Spark or Digital outputs do not invert the signal and 'Normal' should be used. Note that the on/off fuel pump output is always a low-side driver and connects to the negative side of the relay - changing this setting will have no impact on that."
+ fp_opt_reg = "By preference, fuel systems use a vacuum/boost referenced regulator that maintains line pressure Xbar above inlet pressure. Some GM fuel systems use a fixed fuel pressure referenced to ambient air pressure instead. The vac referenced systems give even injector flow across all inlet pressure conditions. The un-referenced systems give a varying flow and require a calculation within the ECU to compensate. Enabling 'Fixed' here turns on that automatic compensation."
+ fp_opt_safety = "Enables fuel pressure safety system.\nIf the measured fuel pressure drops too low for more than a set time, the engine is shutdown."
+ rail_pressure_psig = "The fuel rail pressure in PSI referenced to manifold pressure. Typically 43.5PSI for many installs."
+ rail_pressure_kpag = "The fuel rail pressure in kPa referenced to manifold pressure. Typically 304kPa for many installs."
+ fp_prime_duty = "The PWM duty cycle used during the priming pulse."
+ fp_off_duty = "The PWM duty cycle used when the pump should be off. Set to 0 for most applications, or 75% for Ford FPDM modules."
+ fp_min_duty = "The minimum PWM duty cycle to be used when running. Set to 0 for most applications, or 5% for Ford FPDM modules."
+ fp_max_duty = "The maximum PWM duty cycle to be used when running. Set to 100 for most applications, or 50% for Ford FPDM modules."
+ fp_press_in = "If used, specifies a Generic Sensor that is configured for fuel pressure in kPa."
+ fp_press_type = "'Gauge' sensors are referenced to atmospheric pressure - with a vac referenced regulator, the reported pressure will drop under vacuum and increase under boost.\n'Differential' sensors are referenced to manifold vacuum/boost - this pressure will typically remain static e.g. 43psi, 3bar.\n'Absolute' sensors are referenced to true vaccum and will read about 14.7psi/1bar when there is no fuel pressure."
+ fueltemp1_corr = "Enables fuel correction based on fuel temperature."
+ fp_Kp = "Closed-loop Proportional term"
+ fp_Ki = "Closed-loop Integral term"
+ fp_Kd = "Closed-loop Differential term"
+
+ hpte_opt_on = "Allows richer mixture after prolonged high power operation to cool piston crown. The richer mixture is calculated by decreasing the AFR target using the number from the curve. The 'high power timer' counts up when above the load/rpm points and counts down below those points. The relevant enrichment is applied until the counter returns to zero."
+ hpte_load = "Only enable above this fuel-load."
+ hpte_rpm = "Only enable above this RPM."
+ shiftlight_opt_pins = "Allows a specific output to be used to switch a shift light. (Do not also enable the same output in the generic on/off outputs.)"
+ shiftlight_opt_gear = "Allows per-gear limits, can be useful to set a lower limit in lower gears to avoid overshooting."
+ shiftlight_limit1 = "Light is on above this RPM."
+ ltt_opt_on = "Enables the long-term fuel trim. This is intended to automatically make minor corrections in fuelling AFTER the engine is fully tuned. It requires EGO control to be enabled and operational."
+ ltt_opt_feedback = "Reports the total %change in 'sensor15' - mainly for testing."
+
+ ltt_samp_time = "How often (in seconds) the code checks the current EGO correction."
+ ltt_agg = "How softly the trim correction is applied."
+ ltt_opt_mode = "Timed - if needed, the trim table is automatically saved to flash\nButton - an external button is used to save the trim table to flash."
+ ltt_but_in = "User operated button to burn trim table from RAM to flash so it is used at next power-on."
+ ltt_int = "Minimum time between automatic burns to flash."
+ ltt_led_out = "LED output is illuminated when RAM trim table exceeds change threshold. The user can then choose to Burn to flash."
+ ltt_thresh = "If the sum of all changes exceeds this threshold than a burn to flash is requested - either automatically or by lighting the LED for user intervention. The purpose is to only make permanent changes if there was a widespread change."
+ pwmidle_closed_duty = "The duty below which changes in duty no longer have an effect on RPM"
+ pwmidle_closed_steps = "The number of steps below which changes in duty no longer have an effect on RPM"
+ pwmidle_open_duty = "The duty above which changes in duty no longer have an effect on RPM"
+ pwmidle_open_steps = "The number of steps above which changes in duty no longer have an effect on RPM"
+ pwmidle_dp_adder = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_dp_adder_steps = "The amount to increase the idle valve duty/steps by when throttle is lifted. Should be set to a value that results in RPM being slightly above the target RPM."
+ pwmidle_close_delay = "This setting controls the amount of time between pressing the throttle and closing the valve while driving. A value of 0 disables this setting. NOTE: The timer does not start until actual RPM is 200 RPM above the target."
+ pwmidle_max_rpm_new = "Use this setting to tune how agressively the idle speed controller tries to reach the target RPM. Adjust the slider up until the idle speed starts oscillating, then back down until it stops. Wait 5-10 seconds between each adjustment to give the controller a chance to settle."
+ pwmidle_cl_opts_initvaluetable = "This setting controls whether the initial duty value used upon entering closed-loop idle is taken from the last time in closed-loop or taken from the initial value table."
+ pwmidle_cl_opts_initval_clt = "This setting is used to set whether the initial values table y-axis lookup is done using CLT or MAT."
+ pwmidle_shift_lower_rpm = "The RPM above which the idle valve will remain closed when shifting gears."
+ pwmidle_shift_open_time = "The longest amount of time that a shift takes. After this timer expires, the valve will follow normal dashpot behavior."
+ pwmidle_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
+ pwmidle_Kp_new = "Proportional gain for closed-loop idle PID loop. Reacts immediately to change in RPM."
+ pwmidle_Ki_new = "Integral gain for closed-loop idle PID loop. Reacts to sustained difference between target RPM and actual RPM."
+ pwmidle_Kd_new = "Derivative gain for closed-loop idle PID loop. Reacts to rate of change of RPM."
+ pwmidle_pid_wait_timer = "Controls how long all conditions for entering closed-loop idle must be met for before entering closed-loop control."
+ pwmidle_targ_ramptime = "How long after entering closed-loop idle it will take for actual RPM to match target RPM."
+ pwmidle_ms = "Controls how often the closed-loop idle algorithm runs."
+ pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle does not leave PID running. Avoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
+ IdleCtl_vss = "Controls whether the VSS activates closed-loop idle."
+ idleminvss = "Closed-loop idle is disabled above this VSS."
+ pwmidle_tps_threshold = "The TPS value below which the other factors for entering closed-loop idle are considered."
+ pwmidle_rpmdot_threshold = "The value RPMdot must be below before closed-loop idle can be activated."
+ pwmidle_decelload_threshold = "The value load must be above before closed-loop idle can be activated."
+ boost_ctl_settings_on = "Controls whether boost control is enabled."
+ boost_ctl_pwm = "Controls the frequency range allowed on the boost control output(s). Mid allows 12-1021 Hz. Slow allows 11.1-78Hz. Most installs use Slow."
+ boost_ctl_pwm_scale = "Frequencies available with Mid solenoid frequency range. Frequency is shared with other pins in the same PWM group\rPWM group A : High Current 1/2, InjI/J\rPWM group B : High Current Out 3, PWM Out 2, PWM / Idle Out 1, PWM Out 3"
+ boost_ctl_pins_pwm = "Output pins available when using the Mid frequency range."
+ boost_ctl_settings_freq = "Frequencies available when using the Slow frequency range."
+ boost_ctl_pins = "Output pins available when using the Slow frequency range.\nThe 'Off' setting is only useful when using CAN broadcasting to send the turbo vane position."
+ boost_ctl_settings_invert_new = "Set this so that higher duty yields higher boost."
+ boost_ctl_closeduty = "(Closed-loop) The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty = "(Closed-loop) The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_clt_threshold = "Coolant temperature must be above this value before boost control will work."
+ boost_ctl_lowerlimit = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_flags = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_flags2 = "Choose setup mode to configure the closed-loop bias table. Basic mode allows tuning with only the sensitivity slider. Advanced mode starts with the sensitivity specified with the slider and allows fine-tuning of the individual PID gains."
+ boost_ctl_sensitivity = "Use this setting to tune how agressively the boost controller tries to reach the target boost. Adjust the slider up until the boost oscillates around the target, then back down until it stops."
+ OverBoostOption = "Selection can be fuel cut, spark cut, or both. Fuel cut only cuts fuel, spark cut only cuts spark, both cuts both fuel and spark."
+ OverBoostKpa = "Maximum desired MAP reading (absolute) before overboost protection cuts fuel/spark."
+ OverBoostHyst = "After overboost protection is enabled, how far below the maximum boost must boost drop before spark/fuel are re-enabled."
+ OverBoostOption_tol = "Trips the overboost protection if boost is a certain pressure above boost target. Allows overboost to track the boost target table."
+ boosttol = "How far MAP can exceed the boost target before overboost cuts in."
+ tsw_pin_ob = "Allows an input pin to toggle maximum boost to an alternate value."
+ OverBoostKpa2 = "The alternate maximum desired MAP reading (absolute) before overboost protection cuts fuel/spark."
+; overboostcutx = "When using spark cut, controls the number of sparks to cut."
+; overboostcuty = "When using spark cut, controls the number of potential spark events from which to cut spark."
+ boost_feats_tsw = "Allow boost tables to be switched when an input is toggled on/off."
+ boost_gear_switch = "Selects which gear to switch tables on when gear-based boost table switching is enabled."
+ boost_feats_timed = "Launch control must be enabled to use this feature. Times the amount of boost from launch."
+ boost_feats_launch = "Allow a specific target (closed-loop) or duty (open loop) to be specified when launch control is active."
+ boost_launch_duty = "Duty to use when launch is active."
+ boost_launch_target = "Target to use when launch is active."
+ boost_vss = "Requires VSS to be enabled. Allows boost target to be controlled based on vehicle speed or detected gear."
+ boost_vss_tps = "TPS must be above this value for the VSS target boost to be used."
+ boost_geartarg1 = "Boost target for each gear.\n\nTo use these settings you need:\n Boost = On\nClosed-Loop Boost\nGear detection\n Boost vs speed/gear = Gear."
+ boost_ctl_settings_on2 = "Controls whether the second channel of boost control is enabled."
+ boost_ctl_pins_pwm2 = "Output for solenoid."
+ boost_ctl_pins2 = "Output for solenoid."
+ boost_ctl_closeduty2 = "The duty below which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_openduty2 = "The duty above which changes in duty no longer cause changes in boost pressure."
+ boost_ctl_lowerlimit2 = "(Closed-loop) Boost pressure must be within this many kPa of the target boost before closed-loop control will activate.\n\nOutside of this range the valve is held wide open (keeping the wastegate shut) for fastest spooling."
+ boost_ctl_settings_cl2 = "Controls whether open loop or closed-loop control algorithm is used."
+ boost_ctl_Kp2 = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in boost error."
+ boost_ctl_Ki2 = "Integral gain for closed-loop control. Integral control causes changes in duty with boost error over time. The longer boost is off target, the stronger the reaction due to the integral term."
+ boost_ctl_Kd2 = "Derivative gain for closed-loop control. Derivative control causes larger reactions in boost duty with faster rate of change of boost error. The faster error changes, the more duty will change to counteract."
+ boost_ctl_sensor2 = "MAP sensor input to monitor."
+
+ alternator_opt_mode = "Control mode for alternator.\nOff = disabled\nOn-Off = most basic control, typically on the 'L' lamp terminal\nOpen-loop frequency = Frequency applied sets target voltage (Ford)\nOpen-loop duty = Duty cycle applied sets target voltage (GM)\nClosed-loop field control = MS3 uses a closed-loop algorithm to control the alternator field to target a voltage (Chrysler)\nHigh-speed feedback field switching = MS3 monitors the voltage at 20kHz and switches the field on or off to match the monitored voltage to the target voltage. (99-05 Miata)"
+ alternator_ctl_ms = "How often to run the control calculations"
+ alternator_controlout = "Output connection to the alternator"
+ alternator_control_inv = "Whether a positive or negative active edge is used"
+ alternator_freq = "Frequency used for control output signal"
+ alternator_lampout = "Output for charge/warning light"
+ alternator_freq_currin = "PWM digital input used for monitoring battery current. (Display only.)"
+ alternator_diff = "Light warning lamp if actual voltage is too far away from target."
+ alternator_freq_monin = "PWM digital input from alternator as load sense - often the 'F' terminal."
+ alternator_freq_moninv = "Whether a positive or negative capture edge is used"
+ alternator_maxload = "Light warning lamp if sensed load is above this limit."
+ alternator_Kp = "Closed-loop Proportional term"
+ alternator_Ki = "Closed-loop Integral term"
+ alternator_Kd = "Closed-loop Differential term"
+ alternator_sensitivity = "Overall sensitivity"
+ alternator_freq_currinv = "Whether a positive or negative capture edge is used"
+ alternator_startdelay = "How long after start before alternator control is enabled. Allows engine to stabilise before alternator load is applied."
+ alternator_ramptime = "Time to ramp up to target voltage"
+ alternator_tempin = "If used, specifies a Generic Sensor that is configured for battery temperature. The temperature is then used to lookup a target charging voltage from the upper curve."
+ alternator_targv = "Target voltage when in 'Charge' mode"
+ alternator_chargetime = "How long after start is considered 'Charge' before transitioning to 'Run' mode."
+ alternator_targvr = "Target voltage during 'Run' mode."
+ alternator_wot = "TPS% to trigger Wide Open Throttle (WOT) mode"
+ alternator_wotv = "Target voltage when in WOT mode, typically set lower than normal to free up some engine power."
+ alternator_wottimeout = "Timeout before WOT mode ends and target voltage returns to charge or run mode."
+ alternator_overrv = "Target voltage when over-run fuel cut is active. Setting a slightly higher voltage here will give a minor 'regenerative braking' effect."
+ rpmhigh = "The maximum for RPM on gauges, tables, curves and entry boxes.\nAdjust to suit your engine."
+ rpmwarn = "The RPM 'warning' on gauges - yellow"
+ rpmdang = "The RPM 'danger' on gauges - red"
+ loadhigh = "The maximum 'load' value e.g. kPa on gauges, tables, curves and entry boxes."
+ vehigh = "The maximum for VE values."
+ wue_lpg = "For most installs, setting warmup enrichment (WUE) to below 100% indicates a serious tuning mistake and the code will flag up a 'Configuration Error' to alert the user. In rare conditions such as using LPG (propane) for fuel, it can be valid. This setting disables the Config Error warning message."
+ prefSpeedUnits = "Chooses the speed units - either Mile-per-hour or Kilometres-per-hour\nClose the page and re-open after changing."
+ prefLengthUnits = "Chooses the size units - either metres or inches\nClose the page and re-open after changing."
+ clt_exp = "Allows gauges and curves to use an expanded coolant temperature range for air-cooled engines using the CLT sensor to measure oil or head-temperature."
+ maxafr_opt1_on = "Enables the AFR safety system"
+ maxafr_opt1_led = "Sets an on/off warning output"
+ maxafr_opt1_load = "Selects the load axis on the AFR difference table"
+ maxafr_en_load = "Only check above this TPS/kPa"
+
+ maxafr_en_rpm = "Only check above this RPM"
+ maxafr_en_time = "Specifies a wait time before taking action, to prevent transients from tripping."
+ maxafr_spkcut_time = "Cuts spark as the first stage in the system for this long."
+ maxafr_ret_tps = "throttle is below this limit."
+ maxafr_ret_map = "Fuel and spark remain cut until MAP (boost) is below this limit."
+ maxafr_ret_rpm = "Fuel and spark remain cut until RPM is below this limit."
+ feature3_3 = "Sequenced batch fire can be useful to give more repeatable engine operation. On every startup the batch firing is aligned to the same ignition event (cylinder). Without this feature the alignment is random."
+ trig_init = "Specifies the ignition 'trigger'. Typically try 0 or 1."
+ dlyct = "Sets the CPU hardware based noise filter. Typically a small number or zero."
+ NoiseFilterOpts = "Enables the noise filtering. Uses the curve to set the filter period. The filter measures the width of the tach-in pulse in order to reject short noise spikes and allow through valid wider tach-in pulses. Typically set to 1000us or more at low revs and 100us or more at high revs. Basic distributor setups can use far larger numbers."
+ NoiseFilterOpts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ NoiseFilterOpts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ ICISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ ICISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+ secondtrigopts = "Enables a simple noise filter on the cam tach input."
+ TC5_required_width = "Equivalent to the time on the curve used for the crank input."
+ secondtrigopts1 = "Enables ignoring of bogus tach pulses, they will still be recorded in the composite logger."
+ secondtrigopts2 = "The tach input is disabled for a short period of time after a valid tach pulse to mask out any bogus tach pulses."
+ IC2ISR_tmask = "The absolute time after a valid tach pulse when new pulses are ignored. The time value here depends greatly on the type of tach input in use.\ne.g. a 60-2 wheel spinning at 10000rpm has a real tach pulse every 0.1ms. A distributor pickup on a 4-cyl at 600rpm has a real tach pulse every 50ms.\nThis value must be set to less than the shortest ever valid time on your install."
+ IC2ISR_pmask = "This works as a percentage of the last valid tooth time. 30-50% are typical values."
+
+ crankingRPM = "Set this a few hundred RPM above your typical fast cranking speed."
+ floodClear = "Above this throttle position no fuel will be injected during cranking to help clear a flood situation. It will also disable priming."
+ feature7_batchcrank = "Allows fuel to be fired on each tach event in a batch-fire mode on a sequential install. Can be useful in cold climates to allow large cranking fuel flow."
+ feature7_cranktaper = "Allows a taper curve on crank pulsewidth, either to reduce pulsewidth over time, or to allow an initial large shot of fuel."
+ feature7_crtpunits = "Selects units of ignition events or 0.1 seconds."
+ alternate_blend = "Enables a blend curve between cranking curves."
+ altcrank = "Engines with many cylinders such as V12 may find that the injecting fuel on every tach event gives difficult hot starting due to small pulsewidths.\nThis option allows the fuel to be injected on alternate events (with twice the pulse width)"
+ primedelay = "Delays the priming pulses to allow a lazy fuel pump to build pressure."
+ feature3_matase = "Can be used to help with perceived heat-soak issues."
+ feature3_aseunit = "Selects whether After Start Enrichment (ASE) uses Seconds or Ignition Events as the timer."
+
+ shift_cut_on = "Enables the sequential / bike shift cut system."
+ shift_cut_auto = "Whether the system operates from a pushbutton or automatically."
+ shift_cut_fuel = "Whether to also cut fuel."
+ shift_cut_in = "Input used for the button."
+ shift_cut_out = "Output to the shift solenoid."
+ shift_cut_rpm = "Minimum RPM to allow shifting."
+ shift_cut_tps = "Minimum throttle to allow shifting."
+ shift_cut_delay = "The solenoid is activated immediately, then wait this long before cutting spark."
+ shift_cut_time = "How long to cut spark for."
+ shift_cut_gear = "Option to add additional spark cut time per gear."
+ shift_cut_add12 = "Additional time to cut spark for this shift."
+ shift_cut_add23 = "Additional time to cut spark for this shift."
+ shift_cut_add34 = "Additional time to cut spark for this shift."
+ shift_cut_add45 = "Additional time to cut spark for this shift."
+ shift_cut_add56 = "Additional time to cut spark for this shift."
+ shift_cut_soldelay = "How long to keep the solenoid powered after the spark is returned."
+ shift_cut_reshift = "Ignore button for this long after shifting - to prevent a false shift."
+ shift_cut_rpm12 = "Shift at this rpm."
+ shift_cut_rpm23 = "Shift at this rpm."
+ shift_cut_rpm34 = "Shift at this rpm."
+ shift_cut_rpm45 = "Shift at this rpm."
+ shift_cut_rpm56 = "Shift at this rpm."
+
+ ac_idleup_settings = "Enables the A/C idle-up feature."
+ ac_idleup_settings_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Normal' settings should be used. In certain installations with appropriate wiring, the 'Inverted' setting can be required."
+ ac_idleup_io_out = "Output to engage compressor."
+ ac_idleup_io_in = "Switch input."
+ ac_idleup_delay = "Delay after switch is pressed before engaging compressor."
+ ac_idleup_min_rpm = "Lowest RPM that AC compressor can be turned on."
+ ac_delay_since_last_on = "Sets a delay to prevent rapid cycling on/off."
+ ac_idleup_adder_duty = "Additional PWM idle duty cycle to add when A/C is active."
+ ac_idleup_adder_steps= "Additional idle steps to add when A/C is active."
+ ac_idleup_cl_targetadder= "Bump up RPM by this much when A/C is active."
+ ac_idleup_cl_lockout_mapadder = "When A/C is active the engine load will increase. Set this number so that the additional load doesn't kick you out of closed-loop idle."
+ ac_idleup_tps_offpoint = "Disable A/C when TPS is above this. (Reduces load on engine when driver demands full power.)"
+ ac_idleup_tps_hyst = "Deadband in TPS to prevent bouncing on/off."
+ ac_idleup_vss_offpoint = "Disable A/C above this speed."
+ ac_idleup_vss_hyst = "Deadband in VSS to prevent bouncing on/off."
+ ac_idleup_max_rpm = "Maximum allowed RPM for AC."
+
+ idleadvance_on = "Enables Idle-advance feature"
+ idle_special_ops_timing_assist = "Enables additional advance curve linked to closed-loop idle target. This allows you to use timing control to assist with idle speed regulation."
+ idleveadv_to_pid_idleadv = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleadvance_tps = "Only activate below this TPS."
+ idleadvance_rpm = "Only activate below this RPM."
+ idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleadvance_clt = "Only activate above this coolant temperature. (Typically idle-advance does not work too well during warmup.)"
+ idleadvance_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ idleve_on = "Enables Idle-VE feature"
+ idleveadv_to_pid_idleve = "Either links idle-advance with closed-loop idle or allows idle advance to have its own conditions."
+ idleve_tps = "Only activate below this TPS."
+ idleve_rpm = "Only activate below this RPM."
+ idleve_load = "Only activate above this load. (Helps code ignore over-run situations.)"
+ idleve_clt = "Only activate above this coolant temperature. (Typically idle-VE does not work too well during warmup.)"
+ idleve_vsson = "Selects whether VSS1 must be zero before idle-VE is activated."
+ idleve_delay = "After the conditions are met, wait this long before enabling idle-advance. This helps reduce false activations."
+
+ knk_option = "Disabled: do not use knock feedback for ignition advance control\nSafe Mode: use knock retard, but keep the advance below that which caused knock. This backs the advance 1 small step back and leaves it at that until TPS or MAP changes - or knock comes back. This is 'safe mode' scheme is the safest thing for a DIY set-up.\nAggressive Mode: use knock retard, but keep advance at threshold of knock occurring. That is, the program advances (up to the timing table value) if it doesn't see knock, and retards if does see knock. The difference from safe mode is that the timing can be advance all the way to the table value after knock, not just up to one step below knock. This may result in the knock returning, in which case the timing is retarded again, then advanced slowly, and so on."
+ knk_option_an = "On/Off: basic on/off 'knock' or 'no-knock' external input.\nAnalogue: external analogue input proportional to knock signal level\nInternal: internal knock module."
+ knkport = "Input for knock on/off signal"
+ knkDirection = "The logic input level. i.e. when set to 'low' then a 0V signal means there is knock. This matches the GM module"
+ knkpull = "Whether an internal pull-resistor should be applied. When using the suggested Datalog/Tableswitch/Launch input pin set to 'None'"
+ knkport_an = "Input for knock analogue signal"
+ knk_option_wind = "Either read single analogue value at end knock window or peak detect."
+ knk_pin_out = "Optional digital output for knock window signal."
+ knk_ndet = "Number of knock events detected before control is started."
+ knk_maxmap = "Disable knock retard above this MAP."
+ knk_lorpm = "Knock control is implemented above this RPM"
+ knk_hirpm = "Knock control is implemented below this RPM"
+ knk_maxrtd = "Maximum total retard when knock occurs."
+ knk_trtd = "The time between knock retard corrections"
+ knk_step1 = "How much to retard by on each correction step when knock is first detected. Make it large to quickly retard the timing and stop knock."
+ knk_step2 = "How much to retard by on each correction step if knock restarts after it had stopped."
+ knk_tadv = "The time between knock advance corrections (i.e. timing return to normal)"
+ knk_step_adv = "The ignition advance step size after knock has stopped."
+ knk_dtble_adv = "If ignition table timing changes by this much then return to normal timing as operating in different area."
+ knock_bpass = "This should be adjusted to suit the resonant frequency of you engine."
+ knock_int = "How long the signal is sampled for."
+ knock_conf_num = "How many knock sensors (1 or 2)"
+ knock_conf_launch = "Knock detection can be disabled when launch/flatshift are active to prevent false detection."
+ knock_conf_percyl = "Enables linking of knock signal to cylinder number. This only works if coil-on-plug or sequential fuel are enabled."
+ knock_conf_percylact = "Enables per-cylinder timing adjustment for knock.\nRequires a knock feedback system such as the internal one that reports knock per-cylinder."
+ knock_conf_debug = "Debug option to record per-cylinder knock retards into 'sensors' variables."
+ knock_gain01 = "Compensate for sensor sensitivity and distance between cylinder and sensor."
+ knock_sens01 = "Pick which sensor to use for each cylinder."
+ AE_options = "Selects between time-based accel enrichment or pump-style enrichment."
+ EAEOption = "Enables a well-wetting transient system."
+ feature7_aetpswot = "Enables a curve to model effective 100% TPS for a given RPM. This allows smaller throttle movements to be more responsive at lower RPMs and ignores changes in throttle above 'wide-open'."
+ mapThresh = "Trigger enrichment above this MAPdot value."
+ aeEndPW = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested."
+ feature7_aeevents = "Length of enrichment pulse is measured in ignition events or seconds.\n(Primary and secondary fuel.)"
+ tpsasync_events = "Length of enrichment pulse."
+ tpsasync2_events = "Length of enrichment taper."
+ taeTime = "Length of main enrichment pulse."
+ aeTaperTime = "Length of 'taper' time after main enrichment pulse.\n0 is suggested."
+ tpsThresh = "Trigger enrichment above this TPSdot value."
+ tdePct = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested."
+ taeColdA = "At full cold (-40C/F), add this amount to the enrichment."
+ taeColdM = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+
+ mapThresh2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ aeEndPW2 = "After main enrichment event, taper down to this amount of enrichment.\n0 is suggested.\n(Second fuel.)"
+ taeTime_events2 = "Length of enrichment pulse.\n(Second fuel.)"
+ aeTaperTime_events2 = "Length of enrichment taper.\n(Second fuel.)"
+ taeTime2 = "Length of main enrichment pulse.\n(Second fuel.)"
+ aeTaperTime2 = "Length of 'taper' time after main enrichment pulse.\n0 is suggested.\n(Second fuel.)"
+ tpsThresh2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ tdePct2 = "Deceleration fuel cut amount in percent. 100% is no cut, 0% is complete cut of fuel.\n100% is suggested.\n(Second fuel.)"
+ taeColdA2 = "At full cold (-40C/F), add this amount to the enrichment.\n(Second fuel.)"
+ taeColdM2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ ae_lorpm2 = "Below this RPM full enrichment is enabled.\n(Second fuel.)"
+ ae_hirpm2 = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale.\n(Second fuel.)"
+ tpsProportion2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+
+ accel_mapdot_threshold = "Trigger enrichment above this MAPdot value."
+ accel_tpsdot_threshold = "Trigger enrichment above this TPSdot value."
+ accel_CLT_multiplier = "At full cold (-40C/F), multiply the enrichment by this percentage."
+ accel_blend_percent = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot."
+ accel_mapdot_threshold2 = "Trigger enrichment above this MAPdot value.\n(Second fuel.)"
+ accel_tpsdot_threshold2 = "Trigger enrichment above this TPSdot value.\n(Second fuel.)"
+ accel_CLT_multiplier2 = "At full cold (-40C/F), multiply the enrichment by this percentage.\n(Second fuel.)"
+ accel_blend_percent2 = "The balance between MAPdot and TPSdot for accel enrichment. 0% is fully MAPdot, 100% is fully TPSdot.\n(Second fuel.)"
+ als_in_pin = "Enables the Anti-Lag system and selects the Enable input."
+ als_maxtps = "Disable ALS above this TPS%."
+ als_minrpm = "Disable ALS below this RPM."
+ als_maxrpm = "Disable ALS above this RPM."
+ als_maxmat = "Disable ALS above this manifold temperature."
+ als_maxtime = "Only allow ALS to be active for this long to reduce temperature build-up."
+ als_pausetime = "Enforce a minimum time between activations to reduce temperature build-up."
+ als_minclt = "Disable ALS below this coolant temperature."
+ als_maxclt = "Disable ALS above this coolant temperature."
+ als_opt_fc = "Whether cyclic fuel cut should be used. ONLY for use with sequential fuel."
+ als_opt_sc = "Whether cyclic spark cut should be used."
+ als_opt_ri = "Whether roving idle fuel cut should be used."
+ als_opt_idle = "Enables the idle valve in ALS mode."
+ als_iac_duty = "What valve duty should be used to give the extra air needed for ALS."
+ als_iac_steps = "What valve steps should be used to give the extra air needed for ALS."
+ als_out_pin = "Enables an additional output in ALS mode for extra-air valve."
+ als_opt_pwmout = "Enables an additional pulsed output in ALS mode."
+ als_pwm_opt2 = "Pulsed output."
+ als_pwm_duty = "Duty cycle on pulsed output when ALS is active."
+ als_pwm_opt_freq = "Frequency on pulsed output."
+
+ vvt_opt1_on = "Enables VVT control and selects number of cams to control."
+ vvt_opt1_filter = "Enables a filter on the VVT teeth to reject false triggers."
+ vvt_opt4_decode = "Enables a special decoder if applicable.\n\nThe BMW S54 decoder also supports S62. Wire main VVT outputs to opening solenoids 1, wire the complementary outputs to closing solenoids 2. Use 20Hz."
+ vvt_opt6_freq = "VVT solenoid PWM frequency."
+ vvt_opt2_pid2 = "Chooses between basic on/off mode or variable position control."
+ vvt_opt5_add1 = "Whether to adjust injection timing based on cam position and which cam."
+ vvt_opt5_add2 = "If injector timing is being adjusted, whether to adjust it based on target or actual current position."
+ vvt_onoff_ang = "Angle to advance injector timing by when VVT is active."
+ vvt_opt7_yaxis = "The load unit used for the Y-axis on the lookup tables."
+ vvt_opt1_int = "How often to run the calculations.\nSynced to cam is most typical meaning that the calculations are run as soon as new cam tooth passes the sensor."
+ vvt_ctl_ms = "Specifies a fixed calculation interval."
+ vvt_opt5_err = "Whether error checking should be applied to the measured cam angles."
+ vvt_opt1_tst = "Selects a cam output to test."
+ vvt_test_duty = "What duty cycle to output to the VVT solenoid."
+ vvt_opt2_use_hold_intake = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty = "Specific hold duty."
+ vvt_ctl_Kp = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt2_use_hold_exhaust = "Some VVT systems will hold at a fixed position when a certain duty cycle is applied, enable this on those systems. Others have no specific hold-duty."
+ vvt_hold_duty_exh = "Specific hold duty."
+ vvt_ctl_Kp_exh = "Proportional gain for closed-loop control. Proportional control causes immediate changes to output duty with changes in VVT position difference."
+ vvt_ctl_Ki_exh = "Integral gain for closed-loop control. Integral control causes changes in duty with VVT position difference over time. The longer VVT is off target, the stronger the reaction due to the integral term."
+ vvt_ctl_Kd_exh = "Derivative gain for closed-loop control. Derivative control causes larger reactions in duty with faster rate of change of VVT position difference. The faster the difference changes, the more duty will change to counteract."
+ vvt_opt1_dir_exhaust = "Whether the exhaust cam table is a table of advances (old method) or a table of retards (matches most exhaust VVTs.)"
+ vvt_opt3_cam1 = "Cam1 is always the main cam input."
+ vvt_opt2_cam1pol = "Cam1 capture polarity is defined on the Ignition Options page."
+ vvt_tth1 = "The number of teeth on the cam1 trigger wheel."
+ vvt_out1 = "VVT1 solenoid output"
+ vvt_min_ang1 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang1 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt1 = "Whether this is an intake or exhaust cam."
+ vvt_cam1tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam1tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out1_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam2 = "The input for cam2."
+ vvt_opt2_cam2pol = "The capture polarity for cam2.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth2 = "The number of teeth on the cam2 trigger wheel."
+ vvt_out2 = "VVT2 solenoid output"
+ vvt_min_ang2 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang2 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt2 = "Whether this is an intake or exhaust cam."
+ vvt_cam2tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam2tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out2_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam3 = "The input for cam3."
+ vvt_opt2_cam3pol = "The capture polarity for cam3.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth3 = "The number of teeth on the cam3 trigger wheel."
+ vvt_out3 = "VVT3 solenoid output"
+ vvt_min_ang3 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang3 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt3 = "Whether this is an intake or exhaust cam."
+ vvt_cam3tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam3tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out3_dir = "What direction the cam moves with output duty."
+ vvt_opt3_cam4 = "The input for cam4."
+ vvt_opt2_cam4pol = "The capture polarity for cam4.\n(If reported cam angle changes unexpectedly with RPM while the cam is stationary, try swapping polarity."
+ vvt_tth4 = "The number of teeth on the cam4 trigger wheel."
+ vvt_out4 = "VVT4 solenoid output"
+ vvt_min_ang4 = "The minimum absolute angle from the cam sensor."
+ vvt_max_ang4 = "The maximum absolute angle from the cam sensor."
+ vvt_opt5_vvt4 = "Whether this is an intake or exhaust cam."
+ vvt_cam4tth1 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_cam4tth2 = "Application specific, look for cam tooth after this crank tooth."
+ vvt_out4_dir = "What direction the cam moves with output duty."
+ vvt_minclt = "VVT only operates when coolant is above this temperature."
+ vvt_minduty1 = "Minimum duty cycle for VVT solenoids"
+ vvt_maxduty1 = "Maximum duty cycle for VVT solenoids"
+ vvt_slew = "Limits rate of change of VVT target to minimise overshoot caused by rapid target changes or low oil pressure at low rpms.\nDefault is 2.0deg per cam event."
+ vvt_softout1 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout2 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout3 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+ vvt_softout4 = "Complementary (Closing) Solenoid Output for dual-solenoid VANOS systems S54, S62."
+
+ f5_0_tsf = "Enables fuel table switching."
+ f5_0_tsf_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_f = "Table switch input."
+ tsf_rpm = "RPM threshold."
+ tsf_kpa = "kPa threshold."
+ tsf_tps = "TPS threshold."
+ f5_0_tss = "Enables spark table switching."
+ f5_0_tss_opt = "Hardware = Physical switch or blend curve\nRPM,kPa,TPS allow switching above threshold set below."
+ tsw_pin_s = "Table switch input."
+ tss_rpm = "RPM threshold."
+ tss_kpa = "kPa threshold."
+ tss_tps = "TPS threshold."
+ tsw_pin_rf = "Enables ReqFuel switch input."
+ ReqFuel_alt = "ReqFuel to use when switched."
+ tsw_pin_afr = "Enables AFR table switch input."
+ tsw_pin_stoich = "Enables Stoich switch input."
+ stoich_alt = "Stoich to use when switched."
+ dualfuel_sw_on = "Enables Dual Fuel support (e.g. LPG or secondary race fuel on a different system.)"
+ dualfuel_opt_mode = "Switching = swaps from fuel 1 to fuel 2.\nDual Table = parallel fuel tables allowing simultaneous control of both fuels. e.g. mapped methanol under boost.\nFlex Blend = ethanol %age from flex fuel sensor is used to blend between two sets of tables."
+ dualfuel_opt_out = "Shared outputs = used when two sets of injectors share one set of control wires from the ECU and have a relay to switch +12V.\nDifferent outputs = where each main and secondary injectors are wired to different outputs."
+ dualfuel_pin = "Input for Dual Fuel switching."
+ dualfuel_sw_fuel = "Whether to switch fuel tables."
+ dualfuel_sw_spk = "Whether to switch spark tables."
+ dualfuel_sw_afr = "Whether to switch AFR tables."
+ dualfuel_sw_rf = "Whether to switch ReqFuel."
+ dualfuel_sw_stoich = "Whether to switch Stoich."
+ dualfuel_sw_wue = "Whether to switch warmup curves."
+ dualfuel_sw_ase = "Whether to switch afterstart curves."
+ dualfuel_sw2_prime = "Whether to switch priming curves."
+ dualfuel_sw2_crank = "Whether to switch cranking pulse curves."
+ dualfuel_sw2_injp = "Whether to switch injector parameters."
+ dualfuel_sw2_smpw = "Whether to switch small pulsewidth curves."
+ dualfuel_sw2_ob = "Whether to switch overboost limits."
+ dualfuel_sw2_boosw = "Whether to switch boost tables."
+ dualfuel_sw2_ae = "Whether to switch accel enrich settings and curves."
+ dualfuel_opt_temp = "Enable secondary fuel temperature adjustment."
+ dualfuel_temp_sens = "Secondary fuel temperature input."
+ dualfuel_opt_press = "Enable secondary fuel pressure adjustment."
+ dualfuel_press_sens = "Secondary fuel pressure input."
+ dualfuel_press_type = "Sensor type: Gauge, Absolute, Differential"
+
+ vss_opt0_1 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss1_an = "Input for analogue 0-5V speed sensor."
+ vss1_an_max = "Speed at 5V input."
+ vss_opt1 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia1 = "Overall diameter of wheel and tyre."
+ vss1_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth1 = "Number of teeth on speed pickup reluctor."
+ vss1_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss1_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_2 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss2_an = "Input for analogue 0-5V speed sensor."
+ vss2_an_max = "Speed at 5V input."
+ vss_opt2 = "Selects digital pulse input or input via CAN from expansion board."
+ wheeldia2 = "Overall diameter of wheel and tyre."
+ vss2_pos = "Whether speed sensor teeth are mounted\n-Directly on the wheel\n-on the driveline/trans\n-as pulses per mile\n-as pulse per km."
+ reluctorteeth2 = "Number of teeth on speed pickup reluctor."
+ vss2_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss2_can_scale = "Scaler to convert from one unit system to another. (Megasquirt uses 0.1 ms-2 internally, so to convert from 0.1 mph use 45.6%"
+ vss1_can_scale_pulse = "Number of pulses per mile/km"
+ vss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ vss_opt0_3 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss3_an = "Input for analogue 0-5V speed sensor."
+ vss_opt3 = "Selects digital pulse input or input via CAN from expansion board."
+ vss3_pwmseq = "CAN PWM port for capturing from expansion board."
+ vss_opt0_4 = "Type of speed sensor connection.\nDigital = any pulse input or capture from an expansion board.\nAnalogue = 0-5V input directly reporting speed (rare.)"
+ vss4_an = "Input for analogue 0-5V speed sensor."
+ vss_opt4 = "Selects digital pulse input or input via CAN from expansion board."
+ vss4_pwmseq = "CAN PWM port for capturing from expansion board."
+ vssout_opt = "Digital pulsed output to drive a speedometer."
+ vssout_optunits = "Type of output conversion."
+ vssout_scale = "Scaling factor."
+ vssdot_int = "How often to calculate VSSdot (acceleration.)"
+ vssdotLF = "Smoothing factor on VSSdot. 100% = no smoothing, 15% = maximum smoothing."
+ fdratio1 = "Final drive gear ratio."
+ gear_method = "How to determine gear no.\nVSS/RPM - compares the vehicle speed with RPM and the gear ratio table.\nAnalogue - uses a 0-5V analogue gear-position-sensor input.\nCAN gear# - fetches a gear number from an expansion board over CAN."
+ gear_no = "How many gears."
+ gear1ratio = "Ratio of each gear."
+ gear_port_an = "Analogue input for gear-position-sensor."
+ gear0v = "Nominal voltage in each position."
+ vss_samp_int = "How often to sample/accumulate VSS teeth. Normally 50ms is ok and gives smoothing.\nHard accelerating vehicles will need to lower this number for improved zero-speed response."
+
+ ss_opt1 = "Selects digital pulse input."
+ reluctorteeth3 = "Number of pickup teeth on reluctor."
+ ss_opt1_spd = "Where possible, configures this as a high-speed input."
+ ss1LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ ss_opt2 = "Selects digital pulse input."
+ reluctorteeth4 = "Number of pickup teeth on reluctor."
+ ss_opt2_spd = "Where possible, configures this as a high-speed input."
+ ss2LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ accXport = "Analogue 0-5V input for X-axis."
+ accYport = "Analogue 0-5V input for Y-axis."
+ accZport = "Analogue 0-5V input for Z-axis."
+ accXcal1 = "Calibration value when X is -1g. See the manual."
+ accXcal2 = "Calibration value when X is +1g. See the manual."
+ accYcal1 = "Calibration value when Y is -1g. See the manual."
+ accYcal2 = "Calibration value when Y is +1g. See the manual."
+ accZcal1 = "Calibration value when Z is -1g. See the manual."
+ accZcal2 = "Calibration value when Z is +1g. See the manual."
+ accxyzLF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+
+ log_style_on2 = "Enables SDcard datalogging.\nAlways - log always.\nButton - use a button to start and stop logs.\nTrigger - start logs when trigger condition is met."
+ log_style2_but = "Digital switch input."
+ log_style4_opt = "Type of trigger to start logging."
+ log_trig_rpm = "Start logging above this RPM."
+ log_trig_tps = "Start logging above this TPS or MAP kPa"
+ log_trig_map = "Start logging above this MAP"
+ sdpulse_out = "Typically used to synchronise a video camera recording, sends a low pulse at the start of a datalog."
+
+ log_style_led = "Output for LED or indicator lamp."
+ log_style_block = "Type of datalog to record.\n64byte = regular SDcard datalog.\n64byte+stream = datalog plus simulataneous audio soundtrack."
+ log_style2_samp = "Timed = suitable for all installs.\nCycle/tooth = for developer use."
+ log_int = "How often to record data.\nLower limit for most cards is 3ms."
+ log_length = "How long each datalog file should be. After this time a new logfile is started."
+ log_style3_adc = "Optional analogue (sound) stream input."
+ log_style_ledspd = "Unless advised otherwise, use 'Normal'"
+ log_style_gps = "Enables the recording of interleaved GPS data.\n\nRequires a CAN connected GPS module."
+
+ egt_num = "Number of EGT channels to enable."
+ egtcal_temp0 = "Temperature at 0V."
+ egtcal_tempmax = "Temperature at 5V - depends on interface design."
+ egt_conf_action = "EGT over-temperature reactions"
+ egt_warn = "Turn on warning output above this temperature."
+ egt_addfuel = "Bump up pulsewidth on over-temperature."
+ egt_conf_bank = "Most installs should use 'Both' Bank1,2 only apply to Staged primary and secondaries."
+ egt_conf_shutdown = "Enables engine shutdown if above max temperature or too long above warning limit."
+ egt_conf_percyl = "For sequential fuel ONLY, allows fuel to be added per cylinder.\nRequires that EGT1 = #1, EGT2 = #2 etc."
+ egt_time = "Shutdown if above warning temperature for this long."
+ egt_max = "Shutdown if temperature exceeds this maximum (even for a split second.)"
+ egt1port = "Analogue 0-5V input from thermocouple. (Note that an interface circuit is required.)"
+
+ sensor01_source = "Analogue 0-5V input."
+ sensor01Alias = "User defined name assigned to this sensor input. e.g. pre-intercooler air temperature."
+ sensor01_trans = "Type of transformation from raw input to useful numbers.\nRaw = raw 0-1023 ADC count\nLinear = useful for many ratiometric sensors with a linear scale.\nSame as XXX applies the same transform as other sensors on your ECU.\nGM calibration = same transform as GM air/coolant thermistor sensors."
+ sensor01_val0 = "The number you want to see when 0V is applied"
+ sensor01_max = "The number you want to see when 5V is applied"
+ sensor01LF = "Smoothing factor. 100% = no smoothing, 15% = maximum smoothing."
+ opt142_gs_share = "Normally each input can only be used by one feature. This setting allows inputs to be shared between generic sensors and other features. (Obviously you can still only connect one sensor to each input!)"
+ sensor_temp = "Selects degF/degC for temperature units when using CLT/MAT calibrations. This is set on the Generic Sensors page."
+
+ tc_opt_on = "Enables traction control"
+ tc_led_out = "Light output when traction is active."
+ tc_opt_method = "Traction control method:\nPerfect Run = a drag race strategy for a single pass comparing actual VSS against best possible.\nVSS %slip = compares VSS1 to VSS2 and detects slip%.\nPerfect Run RPM = similar to perfect run but without VSS for classes where that is not allowed.\nSwitch input = for use with an external slip detector."
+ tc_enin = "Optional digital switch input"
+ tc_mintps = "Only enable traction control above this TPS%"
+ tc_minmap = "Only enable traction control above this MAP"
+ tc_minvss = "Only enable traction control above this VSS"
+ tc_opt_slipcurve = "Whether to use a fixed slip% limit or an adjustable curve."
+ tc_slipthresh = "Fixed slip% limit."
+ tc_opt_n2o = "Only on/off control is presently supported."
+ tc_opt_bank = "Which bank of injectors to add fuel to.\nNormally select 'Both'\nWhen staging bank 1 = primary, bank 2 = secondary"
+
+ launch_opt_on = "Off - all of launch is turned off\nLaunch - launch only, no flat shift\nLaunch/flatshift - launch and flat shift.\n(Flat shift is used on manual gearboxes for full throttle shifts with a clutch switch to engage the limiter.)"
+ launch_opt_vss = "Enables wheel speed based launch instead of switch input. Select the wheel-speed sensor for a non-driven wheel."
+ launch_opt_pins = "Input for launch switch."
+ launch_sft_zone = "The soft limit is this many rpm below the hard limit. (This is sometimes called the control range.) 200rpm is typical."
+ launch_sft_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ launch_opt_bank = "Allows fuelling to be changed while the launch limiter is on."
+ launch_addfuel = "The raw millisecond pulsewidth change to make (+/-)"
+ launch_tps = "Launch is only active when the throttle is open a certain percentage. Most users can safely set this to a very low number."
+ launch_hrd_lim = "Above this rpm the hard limiter methods are used when the launch conditions are met."
+ launchlimopt = "-None - do not use \n-Spark cut - drop sparks, this is the most common limiter used. (Will not work with EDIS ignition.)\n-Fuel cut - cuts fuel.\n-Spark and fuel - both"
+ launchlimopt_adv = "Basic = limiter type is automatically set\nAdvanced = Choice of hard limiter type and spark cut zone.\n\nApplies to launch and flat-shift."
+ launchlimopt_cut = "Selects the spark cut limiter type.\nRandom Progressive = random cut that increases linearly across the spark cut zone.\nRandom Ramped = random cut that ramps up across the spark cut zone.\nFixed 5/7 = non-progressive rotational cut. 5 missed sparks, 2 actual sparks, repeat.\nFixed 4/5 = non-progressive rotational cut. 4 missed sparks, 1 actual spark, repeat."
+ launchvsstime = "Once you have been moving for this number of seconds, VSS based launch control is locked out until next stop.\nSet to zero to make it permanently active (no timeout.)"
+ launch_fcut_rpm = "During the flat-shift up-shift and the revs are falling, the fuel is cut off until the revs have fallen below this set point to reduce exhaust explosions."
+ launch_maxvss = "Prevents launch from activating once you are rolling."
+ launchvss_minvss = "Below this speed the wheel speed launch is re-armed.\n\nTypically set to a very low number."
+ launch_opt_vssgear = "Enables/disables checking of gear no.\n\n(Requires gear detection to be enabled.)"
+ launchvss_maxgear = "Wheel speed launch is applied up to this gear number.\n\ne.g. 2 means launch can be used in 1st and 2nd."
+ launchcutzone = "The RPM band below the hard limit where spark cutting begins.\nCan be set to 0 to apply spark cutting only at the hard limit when using the fixed limiter types.\nThe random cuts need an RPM band to operate across 200+ RPM suggested."
+ launchcuttiming = "The ignition timing during the cut zone and at the hard limit.\nOnly applies to launch - not flat-shift."
+ flats_minvss = "Prevents flat-shift from activating at low speeds e.g. just after launch"
+ flats_arm = "This rpm set point is used to differentiate between a flat shift and launch condition, typically set to a few hundred RPM above idle."
+ flats_deg = "The absolute timing to retard to. i.e. 5 gives 5 BTDC timing."
+ flats_hrd = "Above this rpm the hard limiter methods are used when the flat-shift conditions are met."
+ launch_opt_retard = "Enables feature to feed in timing after launch."
+ launch_var_on = "Input for 0-5V potentiometer used to vary launch RPM."
+ launch_var_low = "With a 0V input, the launch hard limit is set to this RPM."
+ launch_var_up = "With a 5V input, the launch hard limit is set to this RPM."
+ launch_3step_in = "Input for 3-step switch. Could be used as burnout limiter."
+ launch_sft_deg3 = "The timing is retarded to this angle when the 3-step is on."
+ launch_hrd_lim3 = "Sets the hard limit RPM when the 3-step is on."
+ timedout1_in = "Input for transbrake button."
+ timedout1_out = "Output for transbrake solenoid."
+ timedout1_offdelay = "Delay between button release and transbrake release."
+ tcs_in = "Input for Turbo Staging control"
+ tcs_offtime = "How long to release trans-brake for on each move step. This should be set long enough to move the car a little without gaining any speed."
+ tcs_ontime = "How long the trans-brake should be re-activated for between each step. This should be set long enough to fully grab again."
+ tcs_moves = "How many moves (trans-brake release steps) on the first press of the button. Each subsequent press of the button gives a single move."
+ tstop_out = "Output for throttle-stop solenoid."
+ tstop_delay = "Delay after launch before solenoid is activated."
+ tstop_hold = "How long to keep solenoid on for."
+
+ N2Oopt_2 = "Enables the feature."
+ N2ORpm = "The minimum RPM to enable nitrous."
+ N2OClt = "The minimum coolant temperature to enable nitrous."
+ N2OTps = "The minimum throttle position to enable nitrous."
+ N2ORpmMax = "The maximum RPM to enable nitrous."
+ N2Oopt_01 = "Set to 'Both' for most installs. If 'dual table' or Staging are in use it selects which injector bank receives any additional fuel pulsewidth."
+ N2Oopt2_prog = "Selects between On/Off or Progressive control mode."
+ N2Oopt2_prog_time = "Chooses between Time, RPM or VSS as control factor."
+ N2Oopt2_prog_freq = "Selects solenoid frequency. Typically around 13Hz."
+ N2Oopt2_prog_freqf = "Allows a different fuel solenoid frequency if different fuel and nitrous outputs are used. Typically around 13Hz."
+ N2Oopt_4 = "Allows optional AFR safety system to use alternate AFR targets when nitrous is active."
+ N2Oopt_5 = "Allows nitrous stage 1 during launch (2-step)."
+ N2Olaunchmaxmap = "Maximimum MAP when nitrous is used during launch to build boost."
+ n2o1n_pins = "Output for stage 1 nitrous solenoid."
+ n2o1f_pins = "Output for stage 1 fuel solenoid."
+ N2Oopt_pins = "Input to use to enable the nitrous system. (Expects a 12V signal.)"
+ N2OPWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2OPWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+ N2OAngle = "Sets a fixed ignition retard when nitrous is active."
+ N2Odel_launch = "Sets a minimum time after launch control is released before nitrous can activate."
+ N2Odel_flat = "Sets a minimum time after flat-shift is released before nitrous can activate."
+ N2Oopt_3 = "Enables the second stage."
+ n2o2n_pins = "Output for stage 2 nitrous solenoid."
+ n2o2f_pins = "Output for stage 2 fuel solenoid."
+ N2O2Rpm = "The activation RPM for stage 2."
+ N2O2RpmMax = "The maximum RPM for stage 2."
+ N2O2delay = "Sets a minimum time delay after stage 1 activates before stage 2 can activate."
+ N2O2Angle = "Sets an additional ignition retard when stage2 is active."
+ N2O2PWLo = "Fuel PW to add at the min RPM. (Tapers down between min and max.)"
+ N2O2PWHi = "Fuel PW to add at the max RPM. (Tapers down between min and max.)"
+
+ water_freq_on = "Enables the feature."
+ water_pins_pump = "Output to pump relay."
+ water_freq_type = "'Off' - no valve output (used fixed nozzle)\n'Slow' - slow speed valve output with chosen PWM duty cycle\n'Fast' - valve switches at injector speed with chosen PWM duty cycle."
+ water_freq = "Valve operating frequency."
+ water_pins_valve = "Output for valve."
+ water_tps = "Only enable above this TPS%."
+ water_rpm = "Only enable above this RPM."
+ water_map = "Only enable above this MAP."
+ water_mat = "Only enable above this MAT."
+ water_pins_in_shut = "Allows a low fluid level sensor switch input.\n\nThe switch must be wired so that the input is grounded when the level is ok and no connection is made in low or fault conditions.\n\nIf fluid reserve is low when water injection is required, for safety the engine will be shutdown using the parameters in the AFR Safety System."
+
+ oilpress_in = "Sensor channel used for oil pressure input."
+ oilpress_out = "Output for warning lamp."
+
+ fp_drop_load = "Only check for low pressure above this engine load (e.g. MAP, TPS, MAFload)"
+ fp_drop_rpm = "Only check for low pressure above this RPM."
+ fp_drop_psig = "Allowed drop in pressure below target."
+ fp_drop_kpag = "Allowed drop in pressure below target."
+ fp_drop_time = "If fuel pressure stays too low for more than this time, the engine is shutdown using the AFR safety settings."
+
+ pwm_opt_on_a = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_a = "Output for relay/solenoid."
+ pwm_opt_freq_a = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_a = "Output is on when the table/curve is above this number."
+ pwm_offbelow_a = "Output is off when the table/curve is below this number."
+ pwm_opt_load_a = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_a = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_b = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_b = "Output for relay/solenoid."
+ pwm_opt_freq_b = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_b = "Output is on when the table/curve is above this number."
+ pwm_offbelow_b = "Output is off when the table/curve is below this number."
+ pwm_opt_load_b = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_b = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_c = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_c = "Output for relay/solenoid."
+ pwm_opt_freq_c = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_c = "Output is on when the table/curve is above this number."
+ pwm_offbelow_c = "Output is off when the table/curve is below this number."
+ pwm_opt_load_c = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_c = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_d = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_d = "Output for relay/solenoid."
+ pwm_opt_freq_d = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_d = "Output is on when the table/curve is above this number."
+ pwm_offbelow_d = "Output is off when the table/curve is below this number."
+ pwm_opt_load_d = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_d = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_e = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_e = "Output for relay/solenoid."
+ pwm_opt_freq_e = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_e = "Output is on when the table/curve is above this number."
+ pwm_offbelow_e = "Output is off when the table/curve is below this number."
+ pwm_opt_load_e = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_e = "Chooses between a 3D mapped table or a 2D curve."
+
+ pwm_opt_on_f = "Enables Generic PWM feature.\n\nA table or curve is used to plot the desired output based on a lookup from the input variables."
+ pwm_opt2_f = "Output for relay/solenoid."
+ pwm_opt_freq_f = "Selects:\nOn-Off - output is turned on or off based on the table/curve.\nVariable frequency - output runs at the frequency set by the table/curve with 50% duty.\nxxHz - output runs at a fixed frequency with duty set by the table/curve."
+ pwm_onabove_f = "Output is on when the table/curve is above this number."
+ pwm_offbelow_f = "Output is off when the table/curve is below this number."
+ pwm_opt_load_f = "The variable used for the load axis on the table/curve."
+ pwm_opt_curve_f = "Chooses between a 3D mapped table or a 2D curve."
+
+ mycan_id = "Set to 0 unless specifically wanting to configure this as a secondary data capture ECU."
+ enable_pollPWM = "Enables capturing PWM (pulse/frequency) from expansion board."
+ can_poll_id = "CANid of expansion board."
+ poll_tablePWM = "Table number on expansion board."
+ poll_offsetPWM= "Table number on expansion board."
+ canpwm_clk = "Clock frequency on expansion board. See documentation."
+ canpwm_pre = "Prescaler on expansion board. See documentation."
+ canpwm_div = "Divider on expansion board. See documentation."
+ enable_pollADC= "Enables capturing analogue inputs from expansion board."
+ canadc_opt1 = "Enables this group of analogue inputs."
+ canadc_id1 = "CANid of expansion board."
+ canadc_tab1 = "Table number on expansion board."
+ canadc_off1 = "Data offset on expansion board."
+ can_poll_id_ports = "CANid of expansion board for digital inputs/outputs."
+ poll_tableports = "Table number on expansion board."
+ enable_pollports_digin = "Enables using digital inputs from expansion board."
+ can_poll_digin_offset = "Data offset on expansion board."
+ enable_pollports_digout = "Enables using on/off outputs on expansion board."
+ can_poll_digout_offset = "Data offset on expansion board."
+ enable_pwmout = "Enables sending PWM/pulsed outputs to expansion board."
+ enable_pwmout255 = "Forces PWM duty cycle to 0-255 range.\ne.g. generic PWMs operate on a 0-100 scale, but your remote device might require a 0-255 scale."
+ can_pwmout_id = "CANid of expansion board."
+ can_pwmout_tab = "Table number on expansion board."
+ can_pwmout_offset = "Data offset on expansion board."
+
+ can_bcast1_on = "Enables broadcasting of parameters over CAN."
+ can_bcast_int = "How often to broadcast."
+ can_bcast1_280x4 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 4:1 ratio' message."
+ can_bcast1_280x1 = "Enables 0x280 'Motorsteuergerat 640 - engine control unit RPM is 1:1 ratio' message."
+ can_bcast1_289 = "Enables 0x289 'Motorsteuergerat 649 - Engine Temp' message."
+ can_bcast1_316 = "Enables 0x316 'BMW E46 - engine control unit RPM is 6.42:1 ratio' message."
+ can_bcast1_329 = "Enables 0x329 'BMW coolant' message."
+ can_bcast1_561 = "Enables 0x561 'Alfa/Fiat/Lancia dash coolant, RPM' message."
+ can_bcast1_361 = "Enables 0x361 'Alfa/Fiat/Lancia torque, RPM, TPS' message."
+ can_bcast2_041 = "Enables 0x041 'Alfa/Fiat/Lancia dash initialisation' message."
+; can_bcast2_he351 = "Broadcasts 'boost duty' to control the variable vane turbo.\nUses 29bit CAN message 0x0cffc600."
+ can_bcast2_xxx = "Enables sending a user-defined CAN packet."
+
+ can_enable_on = "Master enable/disable for all CAN polling and broadcasting."
+ vss1_can_id = "CANid of expansion board."
+ vss1_can_table = "Table number on expansion board."
+ vss1_can_offset = "Data offset on expansion board."
+ vss1_can_size = "How the data is stored on the expansion board. See documentation."
+ vss2_can_offset = "Data offset on expansion board."
+ vss2_can_size = "How the data is stored on the expansion board. See documentation."
+ gear_can_offset = "Data offset on expansion board."
+ vss3_can_offset = "Data offset on expansion board. Uses same size as VSS1"
+ vss4_can_offset = "Data offset on expansion board. Uses same size as VSS2"
+
+ opt142_rtc = "Enables the built-in real time clock or selects a clock on an expansion board via CAN."
+ rtc_trim = "Applies a trim to correct for slow/fast running clock."
+ can_poll_id_rtc = "CANid of expansion board."
+ poll_table_rtc = "Table number on expansion board."
+ poll_offset_rtc = "Data offset on expansion board."
+
+ can_poll2_ego2 = "Enables collecting EGO/AFR from innovate widebands on expansion board."
+ can_poll2_egolag = "Enables or disables the 'lag factor' smoothing for EGO data collected from a CAN device. Typically set to Off."
+ can_ego_id = "CANid of expansion board."
+ can_ego_table = "Table number on expansion board."
+ can_ego_offset = "Data offset on expansion board."
+ can_poll2_gps = "Whether to enable CAN polling for GPS data."
+ can_gps_id = "CANid of expansion board."
+ can_gps_table = "Table number on expansion board."
+ can_gps_offset = "Data offset on expansion board."
+ can_poll2_vss = "How VSS data is captured:\nPoll = use polling\nListen = CAN receiving will be configured to listen for messages."
+
+ cel_opt_on = "Enables sensor checking feature."
+ cel_port = "Output for warning lamp.\nIt is STRONGLY SUGGESTED that a lamp be connected when the CEL feature is used."
+ cel_opt_flash = "Selects whether CEL lights up solidly or flashes codes to aid diagnostics.\n\nNumber of flashes and fault:\n2=MAP 3=MAT 4=CLT 5=TPS 6=BATT 7=AFR0 8=SYNC 9=EGT 10=FLEX 11=MAF 12=KNOCK 13=CAM 14=OIL 15=FUELPRESS 16=EGTSHUT 17=AFRSHUT"
+ cel_opt_when = "Do you want the light on when the engine is off?"
+ cel_runtime = "Period after-start before sensors are checked."
+ cel_opt2_map = "Enables checking of the MAP sensor."
+ map_minadc = "Minimum raw ADC 0-1023 input allowed."
+ map_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ map_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ map_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_mat = "Enables checking of the MAT sensor."
+ mat_minadc = "Minimum raw ADC 0-1023 input allowed."
+ mat_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ mat_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_clt = "Enables checking of the CLT sensor."
+ clt_minadc = "Minimum raw ADC 0-1023 input allowed."
+ clt_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ clt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_tps = "Enables checking of the TP sensor."
+ tps_minadc = "Minimum raw ADC 0-1023 input allowed."
+ tps_maxadc = "Maximum raw ADC 0-1023 input allowed."
+ tps_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+
+ cel_opt2_batt = "Enables checking of the battery voltage input."
+ batt_minv = "Minimum voltage allowed."
+ batt_maxv = "Maximum voltage allowed."
+ batt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_afr0 = "Enables checking of the EGO/AFR input."
+ afr_min = "Minimum AFR allowed."
+ afr_max = "Maximum AFR allowed."
+ afr_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ afr_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt2_sync = "Enables checking for sync-losses."
+ cel_synctol = "Set CEL above this many sync-losses."
+ cel_opt2_egt = "Enables checking of the EGT input."
+ egt_minvalid = "Minimum EGT allowed."
+ egt_maxvalid = "Maximum EGT allowed."
+ egt_var_lower = "Minimum amount of fluctuation allowed. (To detect flat-lined input.)"
+ egt_var_upper = "Maximum amount of fluctuation allowed. (To detect wildly varying input.)"
+ cel_opt3_flex = "Enables checking of the Flex-fuel sensor input."
+ cel_opt_adc = "Sets gauge 'status5' to record 'fluctuations' number or raw ADC count for the chosen sensor input."
+ cel_opt_stat = "Selects input for 'status5' value. Observe the dash gauge and examine datalogs to determine sensible min/max fluctuation limits and ADC counts for each sensor input in turn."
+ cel_action1_map = "Whether an invalid MAP reading will trigger limp mode."
+ cel_action1_map_an = "Whether an invalid MAP reading will enable the fallback MAP table."
+
+ cel_action1_mat = "Whether an invalid MAT reading will trigger limp mode."
+ cel_mat_default = "If MAT fails, assume MAT is this temperature."
+ cel_action1_clt = "Whether an invalid CLT reading will trigger limp mode."
+ cel_clt_cold = "If CLT fails, start engine using this assumed temperature."
+ cel_clt_warm = "If CLT fails, assume this is the warmed up engine temperature."
+ cel_warmtime = "If CLT fails, assume engine takes this long to warmup."
+ cel_action1_tps = "Whether an invalid TPS reading will trigger limp mode."
+ cel_action1_batt = "Whether an invalid battery voltage reading will trigger limp mode."
+ cel_action1_ego = "Whether an invalid AFR/EGO reading will trigger limp mode."
+ cel_action2_flex = "Whether an invalid Flex-fuel reading will trigger limp mode."
+ cel_action2_egt = "Whether an invalid EGT reading will trigger limp mode."
+ cel_revlim = "Rev limiter when in limp mode."
+ cel_overboost = "Maximum boost when in limp mode. Typically 102kPa for no boost."
+ cel_boost_duty = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_boost_duty2 = "Fixed boost valve duty in limp mode. Set for least boost, typically 0%."
+ cel_retard = "Retard timing by this amount when in limp mode."
+
+ testint = "How often to pulse the coil/injector."
+ testrpm = "Approximate equivalent RPM."
+ testop_coil = "Whether to test a single coil output or operate in sequence."
+ testsel_coil = "Whether to test a single coil output or operate in sequence."
+ testdwell = "Dwell used during testing - no voltage correction is applied."
+ testop_inj = "Whether to test a single injector output or operate in sequence."
+ testsel_inj = "Whether to test a single injector output or operate in sequence."
+ testpw = "Pulsewidth used during testing - no dead-time is added and no voltage correction is applied."
+ testinjcnt = "Number of injection pulses in each test."
+
+ pwm_testio = "Frequency of pulsed outputs."
+ duty_testio = "Duty cycle of pulsed outputs."
+
+ iachometest = "Number of steps to move valve in homing operation (should be set larger than total number of steps from open to closed.)"
+ iacpostest = "Desired valve position."
+
+ feature3_pw4x = "Only used on low-revving large engines for extra-long pulsewidths. MUST also set PW4X in Project Properties."
+ feature3_n2oin = "Normally this should be on so that the input responds to a +12V signal."
+ u08_debug38_1 = "Experimental feature to log trigger times to sensors9-16. This could be used to monitor cylinder contribution."
+ fuelcalctime = "How often to perform fuel consumption calculations."
+
+ RotarySplitModeFD = "FC mode = combined trailing coil for two trailing plugs.\nFD mode = individual coils for each trailing plug."
+ RotarySplitModeNeg = "Split usually fires trailing coils after leading coils, this allows for the split to be negative and the trailing coils to fire before the leading."
+ dwelltime_trl = "Dwell time applied to trailing coil(s)."
+;curves help text
+ oil_press_min = "For each RPM setting, set the min and max oil pressures allowed at that RPM.\nOutside of the limits the warning light will be illuminated.\nIt is suggested that the first row be 0 RPM. Set the Min and Max limits above 0 so that the oil warning light is tested on each start."
+ hpte_afrs = "The curve specifies AFR decrease (richer) vs. time.\nIt is normal for the first row to be 0, 0.\nThe second row typically specifies when the enrichment should begin. e.g. 7, 0. This means that there is no change from 0-7 seconds as both are set to a 0 decrease in AFR.\nThe third row onwards specify the richening."
+ fp_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ fp_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ dualfuel_temp_adj = "Specifies a percentage adjustment in fuelling based on fuel temperature. 0% means no adjustment."
+ dualfuel_press_adj = "Specifies a percentage adjustment in fuelling based on fuel pressure. 0% means no adjustment.\nThe pressure used for the lookup is always the pressure across the injector i.e. rail pressure - intake pressure."
+ fpd_duty = "The values in the table specify the duty cycle percent of the control output to the pump or controller based on the RPM/load axes."
+ alt_dutyout = "This allows for non-linear control within alternators. It also allows you to restrict the output duty range."
+ alternator_targvolts = "Specifies the target charge voltage related to the battery temperature.\nOnly works if you have a battery temperature sensor."
+ alternator_dutyv = "Specifies the control duty to achieve the desired voltage."
+ alternator_freqv = "Specifies the control frequency to achieve the desired voltage."
+ pwm_duties_a = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_b = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_c = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_d = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_e = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_duties_f = "The values within the table specify the output duty or frequency based that is looked up based on the input 'load' and RPM."
+ pwm_yaxis_a = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_b = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_c = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_d = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_e = "Specifies the output duty or frequency based on the input 'load' value."
+ pwm_yaxis_f = "Specifies the output duty or frequency based on the input 'load' value."
+ tcslipy = "Sets the desired slip% threshold at different knob settings 0-100%"
+ tc_knob = "This enables a link to a Generic Sensor input to enable you to set the slip threshold. Configure the Generic Sensor to give 0-100 as the linear output."
+ blendy1 = "Sets a percentage blend from VE1 (0%) to VE2 (100%) based on the input X axis value."
+ blendy2 = "Sets a percentage blend from Spk1 (0%) to Spk2 (100%) based on the input X axis value."
+ blendy3 = "Sets a percentage blend from the combined VE1+2 (0%) to VE3+4 (100%) based on the input X axis value."
+ blendy4 = "Sets a percentage blend from the combined Spk1+2 (0%) to Spk3+4 (100%) based on the input X axis value."
+ blendy5 = "Sets a percentage blend from AFR1 (0%) to AFR2 (100%) based on the input X axis value."
+ blendy6 = "Sets a percentage blend from Boost1 (0%) to Boost2 (100%) based on the input X axis value."
+ blendy7 = "Sets a percentage blend from Cranking Pulse1 (0%) to Cranking Pulse2 (100%) based on the input X axis value."
+ blendy8 = "Sets a percentage blend from Tables1 (0%) to Tables2 (100%) based on the Flex fuel percentage value.\ne.g. set 0% table for 10% flex and 100% table for 85% flex."
+ tpswot_tps = "Sets the TPS% that is considered wide-open-throttle based on RPM.\ni.e. at low RPMS, partial throttle will flow the same air as full throttle. At maximum RPMs full throttle is required for full air flow.\nWhen the throttle is at or beyond the new 'full throttle' it is considered 100% throttle. This has the effect of making TPS based accel enrichment more sensitive at lower throttle opening at lower RPMs and also prevents TPS accel enrichment if the throttle is already 'fully open.'"
+ launch_retard = "The curve sets the degrees of ignition subtracted from the normal timing (i.e. retarding it) against time after launch.\nThis can be used to launch at higher RPMs without blowing the tyres away and then feeding the timing back in.\nBe sure to end the curve with zero degrees of retard to use normal timing for the rest of the run."
+ cl_idle_timing_advance_deltas = "Uses timing to assist closed-loop idle control.\nThe X axis of the curve is RPMs +/- the target. i.e. if the target was 800, then -75 in the curve means 800-75 = 725RPM\nThe Y axis of the curve is timing +/-. i.e. + means add timing, - means subtract timing.\nTypically, use positive (advanced) timing when RPMs are below target and negative (retarded) timing when RPMs are above target."
+ idle_voltage_comp_delta = "Some 2 wire PWM idle valves will operate differently depending on the system voltage. This allows a compensation to be applied to allow for that difference.\nTypically at lower voltages the valve will need slightly more duty (positive number) and at higher voltages it will need less duty (negative number.)"
+ maeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel."
+ taeBins = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel."
+ accel_mapdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ accel_tpsdot_amts = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel."
+ maeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in MAP require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ taeBins2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the basic time based accel enrichment scheme. Larger changes in TPS require more fuel added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_mapdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of MAP (MAPdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in MAP require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when MAP is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ accel_tpsdot_amts2 = "The curve specifies a fuel pulsewidth percent adder based on rate of change of TPS (TPSdot)\nThis is part of the accel-pump based accel enrichment scheme. Larger changes in TPS require more fuel added.\nThe negative part of the curve is used for decel enleanment, or set to zero PW% for no enleanment.\nEnsure that there is a 0 0 point in the curve so that when TPS is not changing, no additional fuel is added. The number is a percentage of ReqFuel.\n(Second fuel.)"
+ knock_starts = "Set the crank angle (for each cylinder) when the knock system starts 'listening' for knock.\nKnock usually occurs in the time after TDC."
+ knock_durations = "Set the number of crank degrees that the knock system 'listens' for knock."
+ knock_thresholds = "Sets an allowable knock level before retard is triggered.\nThe numbers here are highly engine dependent."
+ knock_upscale = "Allows the threshold to be scaled up on a cold engine. Frequently a cold engine is noiser and may cause false alarms without a raised threshold."
+ tc_perfect_vss = "The perfect run traction control sets a curve of the 'best' speed (VSS) that you can run for each time-point after launch.\nIf your VSS is reporting a higher number than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy is typically applied early in a run only.\nNote that VSS based traction control is outlawed in some race classes."
+ tc_perfect_rpm = "The perfect run traction control sets a curve of the 'best' RPM that you can run for each time-point after launch.\nIf your RPM is higher than the curve, it is assumed to be wheelspin and the reactions come into force.\nThis traction control strategy only makes sense in first gear. Set the final row in the table to just earlier than the time when you expect to shift with an RPM higher than your maximum RPM."
+ tc_retard = "Sets the number of degrees of timing retard to apply based on the amount of wheelspin multiplied by how long."
+ tc_spkcut = "Sets the amount of spark cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_nitrous = "Sets the amount of nitrous cut to apply based on the amount of wheelspin multiplied by how long."
+ tc_boost = "Sets the amount to reduce the boost target by based on the amount of wheelspin multiplied by how long."
+ tc_boost_duty_delta = "Sets the amount to change the boost duty by based on the amount of wheelspin multiplied by how long."
+ tc_addfuel = "Sets the amount of fuel to add based on the amount of wheelspin multiplied by how long."
+ primePWTable = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ primePWTable2 = "The priming pulse is used to wet the intake manifold walls and provide some initial starting fuel.\nSetting the curve to all zeros will disable fuel pump priming also."
+ crankPctTable = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ crankPctTable2 = "This percentage table controls the fuel injected when the engine is cranking over. Most engines need 200-400% when cold and near 100% when hot.\n(It is a percentage of ReqFuel, so that if you swap injectors, this curve can be left alone.)"
+ asePctTable = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ asePctTable2 = "Immediately after the engine has started it is normal to need additional fuel. This curve specifies how much as a percentage adder. (5-50%)"
+ aseCntTable = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ aseCntTable2 = "Specifies how long (in engine cycles or seconds) to apply afterstart enrichment."
+ wueBins = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ wueBins2 = "Specifies the percentage multiplier for fuel during warmup. At cold temperatures 200-300% may be required. At fully warm (final row in table) 100% MUST be specified.\n(LPG users can override this requirement by turning off the warmup warning on the gauge settings/limit page.)"
+ mafflow = "Specifies the flow curve in grammes/sec vs. frequency or voltage.\nStart out with the actual flow curve for your MAF sensor and then 'tweak' to tune it to your install."
+ MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
+ dwellrpm_dwell = "For Saab Trionic ignition, this allows the dwell time to be varied with RPM."
+ boostvss_duty = "For open-loop boost control, this specifies a solenoid duty based on the wheel speed on VSS1 or VSS2."
+ boostvss_target = "For closed-loop boost control, this specifies a target boost level based on the wheel speed on VSS1 or VSS2.\nThis can be used to limit boost in lower gears to reduce the change of wheelspin or loss of control."
+ n2o1_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o2_duty = "For progressive control, this specifies the solenoid duty vs. active time or RPM or VSS."
+ n2o1_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o2_pw = "For progressive control, this specifies the additional fuel pulsewidth vs. active time or RPM or VSS."
+ n2o1_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ n2o2_retard = "For progressive control, this specifies the ignition retard vs. active time or RPM or VSS."
+ matclt_pct = "The curve is the %CLT blended into the MAT reading vs. airflow.\nIn theory, at zero air-flow the air temperature in the intake manifold will reach the manifold (coolant) temperature. At infinite airflow, the air will be unaffected by the temperature of the manifold.\nThe curve is setup to give the 'best estimate' of intake air temperature as part of the speed-density fuel calculation.\nIt would be expected that some CLT should be blended in at low airflows, falling away rapidly to close to zero at higher airflows.\nWhen first enabling this curve it will be necessary to adjust the VE values at low RPMs as they will be compensating for the air density change."
+ smallpw0 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw1 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw2 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ smallpw3 = "This allows for some correction to the non-linearity that fuel injectors show at low pulsewidths.\nTesting has shown that injectors are frequently linear by 2ms, but below than require more actual pulsewidth than linear to achieve the desired fuel flow.\ne.g. for '1.0ms' of fuel, 1.5ms PW may actually be required."
+ opentimepct0 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct1 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct2 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ opentimepct3 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%"
+ boost_timed_pct = "Allows boost to be feathered in after launching.\n100% means use normal boost settings."
+ map_sample_timing = "When timed MAP sampling is enabled, this specifies the angle BTDC for each cylinder when MAP sampling should begin.\nExperimentation and use of the Diagnostics-MAP logger will be required to determine the best settings."
+ dwellcorr = "Specifies the percentage adjustment to the nominal dwell based on battery voltage.\nInductive coils require greater dwell (charge time) at lower voltages."
+ cold_adv_table = "This curve optionally allows ignition timing to be advance during warmup.\n Conversely, some engines may prefer retard during warmup to pre-heat the catalytic convertor."
+ iacstepTable = "Specifies the stepper idle 'step' position vs. coolant temperature to be used during warmup.\nLarge positions are more open. Zero is fully closed.\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ ipwmTable = "Specifies the PWM idle duty vs. coolant temperature to be used during warmup.\nLarge duties are more open. Typically zero is fully closed. (Some 2 wire Bosch valves have a closed position of about 35%)\nThe curve will start high at cold temperatures and descend towards zero at high temperatures."
+ matRetard = "Allows ignition timing to be retarded based on intake temperature. This is primarily for forced induction installs where there is charge heating."
+ baroCorrDelta = "There are two ways that barometric correction may be used.\n\n1. The current way. On the MAP/Baro page the 'At total vacuum' and 'rate' numbers must be set to zero. This curve is then normally 100% at all points and adjusted up or down to alter fuelling based on the barometer reading.\n\n2. The old way. The two numbers are set to 147 and -47 and the curve is normally 0% at all points."
+ matCorrDelta2 = "This curve is the whole air density correction exposed in full.\nIt is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ matCorrDelta = "Allows for minor corrections to fuelling based on manifold air temperature (MAT) when using MAF to control fuelling. The default curve is 0% meaning no correction."
+ EAEAWN2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWN = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on RPM."
+ EAEAWW2 = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEAWW = "This curve modifies the EAE Adhere-to-walls curve. It allows the amount of correction specified by the EAE Adhere-to-walls curve to be increased or decreased based on coolant temperature."
+ EAEBAWC2 = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBAWC = "This curve determines how much fuel is getting added to the port walls per injection event. It is a percentage (Y-axis) of each injection event based on load (X-axis)."
+ EAEBSOC2 = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAEBSOC = "This curve determines how much fuel is being sucked from the walls on each intake (valve open) event. It is a percentage (Y-axis) of the total amount of fuel that has adhered to the walls based on load (X-axis), so therefore the percentages are much smaller (about 10x smaller) than the Adhere-to-walls coefficients."
+ EAESON2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESON = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on RPM."
+ EAESOW2 = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ EAESOW = "This curve modifies the EAE Sucked-from-walls curve. It allows the amount of correction specified by the EAE Sucked-from-walls curve to be increased or decreased based on coolant temperature."
+ XAcc = "This is the percentage of the fuel (0-100%) that goes into the wall puddle while accelerating (fuel pulse width increasing), with the remainder of the squirt going directly into the cylinder to be burned."
+ XDec = "This is the percentage of fuel (0-100%) going into the wall puddle while decelerating (fuel pulse width decreasing),"
+ TauAcc = "This is the time factor vs. RPM used during acceleration."
+ TauDec = "This is the time factor vs. RPM used during deceleration."
+ XClt = "Coolant temperature (CLT) correction to the puddling factor X."
+ TauClt = "Coolant temperature (CLT) correction to the time factor Tau."
+ MapThreshXTD = "X-Tau accel tables are used when MAPdot is positive or less negative than this start transition threshold. In-between a blend is used."
+ MapThreshXTD2 = "X-Tau Decel tables are used when MAPdot is more negative than this finish transition threshold. In-between a blend is used."
+ NoiseFilterLen = "The duration of the noise filter depending on RPM. Its aim is to filter out brief spikes of noise on the tach input. The settings here depend on wheel mode and are engine specific. Setting the filter period too high will filter out real teeth.\nExamples\n36-1, 60-2: 500rpm = 200us, 7500rpm = 13\nBasic crank trigger: 500rpm = 1800us, 7500rpm = 120us"
+ idleadvance_curve = "Sets the timing vs engine load when Idle-Advance is active. Typically the curve will ramp from low advance at low load to more advance at higher loads to stabilise idle."
+ pwmidle_target_rpms = "The closed-loop idle RPM target depending on coolant temperature. It is normal to set a high idle on a cold engine, tapering down as the engine warms up."
+ RevLimRpm1 = "When the coolant-based rev-limiter is enabled this allows you to specify different hard rev limits depending on the coolant temperature to prevent a cold engine from being over-revved."
+ pwmidle_crank_dutyorsteps_duty = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ pwmidle_crank_dutyorsteps_steps = "The idle valve position during cranking. This should be set high enough so that the engine can start without touching the throttle when cold, but not so high that the engine revs up too far immediately after starting."
+ ITB_load_loadvals = "This curve is used to allocate the bins on the VE table to either Speed-Density or Alpha-N tuning. The area of the VE table below the load value from the curve will be used for Speed-Density tuning and the area above the curve will be used for Alpha-N tuning.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_switchpoints = "This curve defines the TPS value where the MAP load reaches %Baro switchpoint. This curve will be different for each engine and should be set up using values obtained from log files from your engine. Setting this curve is an important part of ITB mode.\nChanging this curve will require the VE table to be retuned.\nSee the full manual for more details on ITB mode."
+ ITB_load_mappoint = "Above this MAP value, tuning switches from MAP based to TPS based. Default is 90% and works for most engines."
+ ITB_load_idletpsthresh = "A minimum TPS value that must be met to allow the switch to TPS based tuning to occur. This is sometimes useful in idle tuning."
+; tables
+ ego_auth_table = "Specifies the EGO authority limit across the range of engine operation condition. Setting zero means there will be no change in fuel based on the lambda sensor i.e. open-loop mode. "
+ ltt_table1 = "This read-only table shows the long-term-terim values the ECU has calculated based on lambda sensor feedback."
+ alphaMAPtable = "The best-guess MAP value from an alpha-N (TPS vs. RPM) lookup table. This is primarily used as a fallback in case of MAP sensor failure."
+ pwmidle_cl_initialvalues_duties = "The best-guess idle valve duty for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ pwmidle_cl_initialvalues_steps = "The best-guess idle valve position for RPM/load. This allows you to 'kick-start' the closed-loop idle by setting the valve to the most likely position."
+ vvt_timing1 = "Desired VVT (relative) timing vs RPM/load"
+ vvt_timing2 = "Desired VVT (relative) timing vs RPM/load"
+ als_rifuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag idle mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_fuelcut = "The fuel-cut percentage vs. RPM/load when in anti-lag mode.\nThis must ONLY be used with sequential fuel as it cuts off injectors in a round-robin manner."
+ als_sparkcut = "The spark-cut percentage vs. RPM/load when in anti-lag mode.\nThis drops sparks in a round-robin manner."
+ als_timing = "The ignition advance vs. RPM/load when in anti-lag mode.\nTypically this will be -20 to -50 for ATDC timing."
+ als_addfuel = "The percentage of fuel to be added vs. RPM/load when in anti-lag mode."
+ waterinj_duty = "The duty cycle of the output vs RPM/load"
+ maxafr1_diff = "The maximum AFR difference allowed on the leaner side. This compares the AFR target table and the wideband lambda sensor reading.\nTypically a larger allowance is allowed under low load and low RPMs. High load and into boost require tight control to guard against engine-damaging lean conditions."
+ veTable1 = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
+ veTable2 = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable3 = "The alternate main fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel."
+ veTable4 = "The alternate secondary fuel table (4). Can be used as a blended and switched table from no.1+2. Larger VE values mean more fuel, smaller mean less fuel."
+ idleve_table1 = "Sets the VE values when 'idle-VE' is active."
+ idleve_table2 = "Sets the VE values when 'idle-VE' is active."
+ staged_percents = "Percentage values specify the amount of staging.\n0% = not staged, only primaries\n100% = fully staged."
+ afrTable1 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ afrTable2 = "Sets the target AFR vs RPM/load.\nWhen 'incorporate AFR' is off, this is a reference table only.\nWhen 'incorporate AFR' is on, this table is included in the fuel calculation.\n\nSet this table before beginning tuning."
+ advanceTable1 = "The main ignition advance table (1). Numbers are actual timing BTDC.\nBe sure to have verified timing before starting tuning."
+ advanceTable2 = "The secondary ignition advance table (2), can be used as a blend table with table 1."
+ advanceTable3 = "The alternate main ignition advance table (3). Can be used as a switched table from no.1"
+ advanceTable4 = "The alternate secondary ignition advance table (4). Can be used as a blended and switched table from no.1+2."
+ RotarySplitTable = "Specifies the split (delay) in degrees between leading and trailing coils."
+ boost_ctl_pwm_targets = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_load_targets = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ boost_ctl_pwm_targets2 = "For open-loop boost, sets the output duty cycle vs. TPS/RPM"
+ boost_ctl_cl_pwm_targs1 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_cl_pwm_targs2 = "The best-estimate boost valve duty for target load vs. RPM. This allows you to 'kick-start' the closed-loop boost by setting the valve to the this position before engaging closed-loop PID control.\n\nThe table is determined by reviewing datalogs or taking a known open-loop table."
+ boost_ctl_load_targets2 = "For closed-loop boost, sets the target kPa (boost) vs. TPS/RPM"
+ inj_trima = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimb = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimc = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimd = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trime = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimf = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimg = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimh = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimi = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimj = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimk = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_triml = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimm = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimn = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimo = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_trimp = "Specifies a +/- percentage adjustment on the basic fuel pulsewidth to allow for difference per cylinder."
+ inj_timing = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ inj_timing_sec = "The injector timing (for secondary staged injectors) in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
+ spk_trima = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimb = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimc = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimd = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trime = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimf = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimg = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimh = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimi = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimj = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimk = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_triml = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimm = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimn = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimo = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ spk_trimp = "Specifies a +/- timing angle adjustment on the basic timing to allow for difference per cylinder."
+ narrowband_tgts = "The target narrowband lamba sensor voltage vs. load/RPM"
+ vsslaunch_rpm = "RPM specifies the hard limiter RPM for given wheel speed.\nRetard is the retard to ignition advance for given wheel speed.\nWhen wheel speed exceeds maximum speed on curve, the launch control is disabled until speed drops below the re-arm setting."
+ fuelcut_fuelon_upper_rpmdot = "When revs are falling more quickly than this RPMdot value the initial RPM is used for fuel return.\nIn-between upper and lower RPMdot values, the return RPM is interpolated. This number must be larger than the 'lower' RPMdot setting.\nTypically 1000."
+ fuelcut_fuelon_lower_rpmdot = "When revs are falling more slowly than this RPMdot value the lower RPM is used for fuel return. This will happen when coasting down.\nIf revs are falling more quickly then any return transitions will be cancelled and the return RPM will be raised.\n\nSet this so that clutch-in during fuel cut does not stall.\nTypically 500.\n\n(The RPMdot shows negative in datalogs when revs are falling, so a setting of 500 means less negative than -500)"
+ egoAlgorithm_delay_table = "Specifies whether to use IGN events or delay table to determine how often EGO runs"
+ ego_delay_table = "Table which specifies the delay between runs of the EGO algorithm in ms"
+ ego_delay_rpms = "RPM (x) axis of the EGO delay table."
+ ego_delay_loads = "Load (y) axis of the EGO delay table."
+ ego_sensor_delay = "Static value representing O2 sensor response time"
+ generic_pid_flags_a_on = "Generic Closed-Loop channel A on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_a_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_a_direction = "Output polarity for PID output"
+ generic_pid_flags_a_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_a_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_flags_b_on = "Generic Closed-Loop channel B on or off.\nA table is used to plot the desired value of the feedback value (PV) based on a lookup from the input variables.\nA closed-loop PID method adjusts the PWM output until the desired feedback value is achieved."
+ generic_pid_flags_b_type = "Type B (change in error affects P term) or\nType C (change in PV affects P term) PID"
+ generic_pid_flags_b_direction = "Output polarity for output"
+ generic_pid_flags_b_output_type = "Use a PWM output or the stepper output for PID output"
+ generic_pid_flags_b_lookup_type = "Use a table or a curve for closed-loop table lookup"
+ generic_pid_pwm_opts_freq_a = "Frequency to use for PWM output"
+ generic_pid_pwm_opts_freq_b = "Frequency to use for PWM output"
+ generic_pid_pwm_outs_a = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_pwm_outs_b = "Output pin.\nThis is the output to control the actuator (or whatever) that change the process.\ne.g. opens or closes a valve."
+ generic_pid_upper_inputlim_a = "Maximum value for feedback input (PV)"
+ generic_pid_upper_inputlim_b = "Maximum value for feedback input (PV)"
+ generic_pid_lower_inputlim_a = "Minimum value for feedback input (PV)"
+ generic_pid_lower_inputlim_b = "Minimum value for feedback input (PV)"
+ generic_pid_output_upperlim_a = "Maximum output duty"
+ generic_pid_output_upperlim_b = "Maximum output duty"
+ generic_pid_output_lowerlim_a = "Minimum output duty"
+ generic_pid_output_lowerlim_b = "Minimum output duty"
+ generic_pid_rpms_a = "RPM axis bins for lookup table"
+ generic_pid_rpms_b = "RPM axis bins for lookup table"
+ generic_pid_loadvals_a = "Load axis bins for lookup table"
+ generic_pid_loadvals_b = "Load axis bins for lookup table"
+ generic_pid_targets_a = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_targets_b = "Generic PID lookup table\n\nThis is the target value which the closed-loop algorithm aims to match to the feedback input by controlling the PWM output."
+ generic_pid_control_interval_a = "Time in milliseconds between each run of PID control loop"
+ generic_pid_control_interval_b = "Time in milliseconds between each run of PID control loop"
+ generic_pid_P_a = "Proportional gain"
+ generic_pid_P_b = "Proportional gain"
+ generic_pid_I_a = "Integral gain"
+ generic_pid_I_b = "Integral gain"
+ generic_pid_D_a = "Derivative gain"
+ generic_pid_D_b = "Derivative gain"
+ generic_pid_load_offset_a = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_a = "Variable used as feedback input (PV)"
+ generic_pid_load_offset_b = "Variable used as the Y load axis in the lookup table"
+ generic_pid_PV_offset_b = "Variable used as feedback input (PV)"
+
+ outmsg1_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 1. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg1_size01 = "Size in bytes of the first variable in the outmsg 1"
+ outmsg2_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 2. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg2_size01 = "Size in bytes of the first variable in the outmsg 2"
+ outmsg3_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 3. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg3_size01 = "Size in bytes of the first variable in the outmsg 3"
+ outmsg4_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 4. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
+ outmsg4_size01 = "Size in bytes of the first variable in the outmsg 4"
+
+ dwell_table_values = "Specifies the base dwell time in milliseconds based on RPM/load.\nThis can be used to reduce dwell where possible to increase spark-plug life.\nAreas in the tune of very rich or very dilute mixture will need most spark energy.\n(Battery voltage correction is applied afterwards.)"
+ spkadj_max = "Sets a limit on the maximum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a positive number, meaning advance."
+ spkadj_min = "Sets a limit on the minimum adjustment a remote device (e.g. trans controller) can apply to the ignition timing.\nThis is a negative number, meaning retard."
+
+ cranktaper_pct = "Allows cranking fuel to be tapered down during extended cranking to reduce flooding.\n100% means normal cranking pulsewidth."
+ flashlock = "Locks or unlocks the sensor calibration tables.\nLocked = Prevents accidental changes to the tables.\nUnlocked = Allows fresh calibrations to be written.\n\nEnsure you lock again after writing the calibration tables."
+ scatterRuntimeEnabled = "On = Enables a faster method of collecting realtime data from MS3. Off = use previous slower method for realtime data."
+ can_outpc_msg = "The base message identifier in decimal of the sequential 11-bit CAN addresses used for realtime data (outpc) broadcasting. The ECU assigns the next identifier for each data group whether enabled or not.\ni.e. group 0 is at base identifier, group 17 is at base identifier+17\n\nThis means that by using the default base address you can use a predefined template for your dash etc.\nSee the manual for full message contents and offsets."
+ can_outpc_gp00 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp16 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp32 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp48 = "Enables broadcasting of this group of data at the data rate specified.\n\nPick an appropriate rate for the data within the group, there is no benefit in transmitting slow changing data at a high rate."
+ can_outpc_gp00_master = "Global enable/disable of realtime data CAN broadcasting."
+ can_rcv_opt_on = "Master enable for CAN receiving."
+ can_rcv_id1 = "11bit CAN identifier to listen for. (See also Offset)"
+ can_rcv_var1 = "ECU variable to store resulting data to.\nThis can then be used by other subsystems.\n\nBe sure to enable the master enable above once all options are set."
+ can_rcv_off1 = "Offset of data within each 8-byte CAN message.\nFor systems sending sequential messages, you need to calculate the actual identifier and offset.\ne.g. Take the offset and divide by 8. e.g. offset = 19. Divide by 8 gives 2 remainder 3. Add 2 to the identifier and the offset is 3."
+ can_rcv_size1 = "Endianism, data size and sign.\nB = Big endian\n (Motorola, high byte first)\nL = Little endian\n (Intel, low byte first)\n# = # bytes\nU = Unsigned\nS = Signed"
+ can_rcv_mult1 = "Result = ((raw_data * mult) / divide) + add"
+ pwm_opt_load_a_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_b_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_c_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_d_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_e_offset = "This selects the 'load' axis on the table or curve."
+ pwm_opt_load_f_offset = "This selects the 'load' axis on the table or curve."
+ iobox_opta1 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id1 = "Base CAN identifier used by IO-box."
+ iobox_optb1vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta1adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta1canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta1canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta1canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb1tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb1inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb1outrate = "Rate to send outputs to IO-box."
+ iobox_opta2 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id2 = "Base CAN identifier used by IO-box."
+ iobox_optb2vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta2adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta2canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta2canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta2canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb2tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb2inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb2outrate = "Rate to send outputs to IO-box."
+ iobox_opta3 = "Enables or disables a IO-box for additional inputs and outputs"
+ iobox_id3 = "Base CAN identifier used by IO-box."
+ iobox_optb3vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta3adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta3canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta3canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta3canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb3tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb3inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb3outrate = "Rate to send outputs to IO-box."
+ iobox_opta4 = "Enables or disables a IO-box for additional inputs and outputs."
+ iobox_id4 = "Base CAN identifier used by IO-box."
+ iobox_optb4vss = "Selects which speed inputs are used on the IO-box."
+ iobox_opta4adv = "Selects between automatic and manual advanced configuration."
+ iobox_opta4canin = "Base CANIN for this IObox. i.e. input 1 is CANIN1, input2 is CANIN2 etc."
+ iobox_opta4canout = "Base CANOUT for this IObox. i.e. output 1 is CANOUT1, output2 is CANOUT2 etc."
+ iobox_opta4canadc = "Base CANADC for this IObox. i.e. ADC1 is CANADC1, ADC2 is CANADC2 etc."
+ iobox_optb4tachrate = "Rate to broadcast wheel speed data from IO-box."
+ iobox_optb4inrate = "Rate to broadcast inputs data from IO-box."
+ iobox_optb4outrate = "Rate to send outputs to IO-box."
+ pitlim_opt_on = "Enables Pit Lane Limiter"
+ pitlim_opt_mode = "Fixed = one fixed limiter speed\nHolding = takes speed when button pressed as limiter and holds it."
+ pitlim_opt_retard = "Whether to use spark retard."
+ pitlim_opt_spkcut = "Whether to use spark cut. (Can cause backfires and exhaust damage.)"
+ pitlim_opt_fuelcut = "Whether to use fuel cut."
+ pitlim_opt_fuelprog = "Whether to use a progressive fuel cut (sequential only.)"
+ pitlim_opt_vssrpm = "Whether VSS or RPM is used as the hold target."
+ pitlim_enin = "Switch input."
+ pitlim_speed = "Fixed speed limit."
+ pitlim_retardmax = "Maximum allowed spark retard."
+ pitlim_sensitivity = "Adjust tracking sensitivity to adjust limiter window. Initially the 0% fuel/spark cut is applied at the limit and full cut is applied at the limit+range. If the speed is above the limit, the lower limiting point is lowered slowly."
+ pitlim_speed_range = "Control range of speed to apply limiters across. 5mph recommended as a starting point. Setting the range too small will cause oscillation."
+ pitlim_rpm_range = "Control range of RPM to apply limiters across. Setting the range too small will cause oscillation."
+ dashbcast_opta1 = "Enables or disables Dash Broadcasting.\nThis is a simplified set of data for display or logging sent over CAN."
+ dashbcast_id1 = "Base CAN identifier used for Dash Broadcasting."
+ dashbcast_opta1adv = "Selects between automatic and manual advanced configuration."
+ dashbcast_opta4outrate = "Rate to send outputs."
+ llstg_in = "The ground-switch button input to arm the line-lock staging system."
+ llstg_out = "The relay output to control the line-lock."
+ can_bcast_user_id = "11bit decimal CAN identifier of the user defined test message to send."
+ can_bcast_user_d0 = "Decimal message byte 0."
+ can_bcast_user_d1 = "Decimal message byte 1."
+ can_bcast_user_d2 = "Decimal message byte 2."
+ can_bcast_user_d3 = "Decimal message byte 3."
+ can_bcast_user_d4 = "Decimal message byte 4."
+ can_bcast_user_d5 = "Decimal message byte 5."
+ can_bcast_user_d6 = "Decimal message byte 6."
+ can_bcast_user_d7 = "Decimal message byte 7."
+ u08_debug38_1 = "This enables an experimental feature to record engine trigger times to sensors9-16 to monitor per-cylinder effort. Only for developers."
+; tool tips end tooltips
+
+[Menu]
+
+ ;----------------------------------------------------------------------------
+ ; There are five pre-defined values that may be used to define your menus.
+ ; The first four allow access to the "standard" dialog boxes, the last one
+ ; merely draws a separator (horizontal line) in the menu.
+ ;
+ ; std_constants
+ ; std_enrichments
+ ; std_realtime
+ ; std_warmup
+ ; std_accel
+ ;
+ ; std_separator
+ ;
+ ; Additionally, to support MegaSquirt-II firmware, there are two standard
+ ; dialogs to generate its three embedded tables. The first of these acts
+ ; like Roger Enns' EasyTherm, but only works for MS-II. The second one
+ ; generates the internal AFR table required for proper closed loop operation
+ ; in MS-II. Use these without page numbers, as they will just be ignored
+ ; in any case.
+ ;
+ ; std_ms2gentherm
+ ; std_ms2geno2
+ ;
+ ; If you use any of the std_constants, std_enrichments or std_warmup
+ ; editors, they may be optionally suffixed with a page number (only
+ ; useful for multi-page code variants), which causes them to edit the
+ ; specified page. If you leave off the page specifier, they edit logical
+ ; page one as specified in the Constants section.
+ ;
+ ; There are four special menu names, which when used append to the standard
+ ; menus of the same name instead of creating a new one. The menu names
+ ; are "File", "Communications", "Tools" and "Help".
+ ;
+ ;----------------------------------------------------------------------------
+
+ menuDialog = main
+ menu = "Basic/Load Settings"
+ subMenu = base, "Engine and Sequential Settings"
+ subMenu = generalsettings2, "General Settings"
+ subMenu = revlimiter2, "Rev Limiter"
+ subMenu = shiftlight, "Shift Light"
+ subMenu = std_separator
+ subMenu = tacho, "Tacho Output"
+ subMenu = fan_control, "Fan Control"
+ subMenu = tcluparams, "Torque Convertor Lockup"
+ subMenu = alternator, "Alternator Control"
+ subMenu = std_separator
+ subMenu = barometerCorr, "Barometric Correction",0, {baroCorr}
+ subMenu = map_sample_dialog, "MAP Sample Settings"
+ subMenu = std_separator
+ subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 }
+ subMenu = mafdialog, "MAF Settings"
+ subMenu = MAFtable, "MAF Flow Curve", 0, {!feature7_mafcalib && MAFOption_t < 2 }
+ subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {feature7_mafcalib}
+ subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {feature7_mafmat && ((algorithm == 5) || (algorithm2 == 4) || (algorithm2 == 5))}
+ subMenu = std_separator
+ subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))}
+ subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)}
+ subMenu = std_separator
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = iopinlist, "Feature List Showing I/O pins"
+ subMenu = pinusage, "I/O pins List Showing Usage"
+ subMenu = pinusagecan, "Expansion I/O pins List/Usage"
+ subMenu = limitsettings, "Gauge and Settings Limits"
+
+ menu = "F&uel Settings"
+ subMenu = injsettings, "Injector Dead-Time/PWM"
+ subMenu = smallpw, "Injector Small Pulsewidths"
+ subMenu = inj_timing_tbl, "Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_tbl, "Secondary Injector Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+ subMenu = stagedCombined, "Staged Injection"
+ subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
+ subMenu = overrun, "Over-Run Fuel Cut"
+ subMenu = std_separator
+ subMenu = egoControl, "AFR/&EGO Control"
+ subMenu = afrTable1Tbl, "A&FR Table 1", 0
+ subMenu = afrTable2Tbl, "AF&R Table 2", 0, { (!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr) || ( N2Oopt_2 && N2Oopt_4) }
+ subMenu = ego_auth_Tbl, "EGO Authority Table", 0, {egoType && egoAlgorithm_auth }
+ subMenu = ego_delay_Tbl, "EGO Delay Table", 0, {egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ subMenu = narrowband_tgts_tbl, "Narrowband EGO targets", 0, { egoType == 1 }
+ subMenu = maxafr, "AFR safety system"
+ subMenu = std_separator
+ subMenu = veTable1Tbl, "Fuel VE Table &1", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { (algorithm2 != 0) }
+ subMenu = veTable3Tbl, "Fuel VE Table 3", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = veTable4Tbl, "Fuel VE Table 4", 0, { (algorithm2 != 0) && ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) }
+ subMenu = std_separator
+ subMenu = inj_trimad, "Cyl 1-4 Trims", 7, { hardware_fuel && sequential_trim_on_off }
+ subMenu = inj_trimeh, "Cyl 5-8 Trims", 7, { hardware_fuel && (nInjectors > 4) && sequential_trim_on_off }
+
+ subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off }
+ subMenu = std_separator
+ subMenu = injseq, "Sequenced Batch Fire", 0, { sequential == 0 }
+ subMenu = std_separator
+ subMenu = fuelpump, "Fuel Pump and Pressure"
+ subMenu = fp_temp_curve, "Temperature Adjustment", 0, {fueltemp1 && fueltemp1_corr}
+ subMenu = fp_press_curve, "Pressure Adjustment", 0, {(fp_opt_mode != 2) && fp_press_in && (fp_opt_reg == 2)}
+ subMenu = fp_safety, "Fuel Pressure Safety", 0, {fp_press_in}
+ subMenu = std_separator
+ subMenu = fuelcalcs, "Fuel Calculations Summary"
+
+ menu = "&Ignition Settings"
+ subMenu = combinedignition, "Ignition Options/Wheel Decoder"
+ subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) }
+ subMenu = std_separator
+ subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 }
+ subMenu = dwellrpm_curve, "Dwell vs RPM", 0, {spk_mode0 > 1 && dwellmode == 2 && spk_conf2_dwell}
+ subMenu = dwell_tbl, "Dwell Table", 0, {(spk_mode0 > 1) && (dwellmode == 0) && spk_conf2_dwelltbl}
+ subMenu = std_separator
+ subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
+ subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
+ subMenu = noisefiltering2, "Noise Filtering", 0
+ subMenu = std_separator
+ subMenu = knockSettings, "&Knock Sensor Settings"
+ subMenu = knockSettings4, "Knock Sensor Parameters", 0, {knk_option && (knk_option_an == 3)}
+ subMenu = knockSettings2, "Knock Window Settings", 0, {knk_option}
+ subMenu = knockupscale_curve, "Knock Coolant Scaling", 0, {knk_option}
+ subMenu = std_separator
+ subMenu = ignitionTbl1, "&Ignition Table 1", 0, { (spk_mode0 != 31) }
+ subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)}
+ subMenu = ignitionTbl3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk) }
+ subMenu = ignitionTbl4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = std_separator
+ subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) }
+ subMenu = std_separator
+ subMenu = spk_trimad, "Cyl 1-4 Trims", 8, { spk_mode3_trim }
+ subMenu = spk_trimeh, "Cyl 5-8 Trims", 8, { spk_mode3_trim && (nCylinders > 4)}
+ subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)}
+
+ subMenu = std_separator
+ subMenu = sparkcalcs, "Spark Calculations Summary"
+
+ menu = "&Startup/Idle"
+ subMenu = crsettings, "Cranking/Startup Settings", 0
+ subMenu = primingPW, "Pri&ming Pulse", 0
+ subMenu = crankingPW, "Cra&nking Pulse", 0
+ subMenu = cranktaper_curvet, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 0}
+ subMenu = cranktaper_curvee, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 1}
+ subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0
+ subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
+ subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
+ subMenu = std_separator
+ subMenu = primingPW2, "Priming Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_prime) }
+ subMenu = crankingPW2, "Cranking Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_crank) || alternate_blend }
+ subMenu = nestedasePct2, "AfterStart Enrichment (ASE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = aseTaper2, "AfterStart Enrichment (ASE) Taper 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) }
+ subMenu = nestedwarmup_curve2, "Warmup Enrichment (WUE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_wue) }
+ subMenu = std_separator
+ subMenu = combinedidle, "I&dle Control"
+ subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1}
+ subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)}
+ subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {IdleCtl && (IdleCtl_alg == 1)}
+ subMenu = pwmidle_target_curve, "Closed-Loop Idle Target Curve", 0, { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2}
+ subMenu = ac_idleup, "Air Conditioning Idle-up", 0
+ subMenu = std_separator
+ subMenu = idleAdvance, "Idle Advance Settings"
+ subMenu = cl_idle_timing_curve, "Idle RPM Timing Correction Curve", 0, { idle_special_ops_timing_assist }
+ subMenu = idleVe, "Idle VE Settings"
+
+ menu = "Accel Enrich"
+ subMenu = accelsettings, "Accel Enrich Settings"
+ subMenu = AEtime_settings, "Time-Based Accel",0, { !(AE_options & 0x1) }
+ subMenu = AEpump_settings, "Accel-Pump Accel Enrichment Settings",0, { AE_options & 0x1 }
+ subMenu = AEtime_settings2, "Time-Based Accel 2",0, { !(AE_options & 0x1) && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = AEpump_settings2, "Accel-Pump Accel Enrichment Settings 2",0, { AE_options & 0x1 && (dualfuel_sw_on && dualfuel_sw2_ae) }
+ subMenu = tpswot_curve, "TPS WOT Curve", 0, {feature7_aetpswot}
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, { EAEOption == 1 }
+ subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEcombi1, "EAE Sucked/Adhered Coefficients", 0, { EAEOption == 1 }
+ subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, { EAEOption == 1 }
+ subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, { EAEOption == 1 }
+ subMenu = std_separator
+ subMenu = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) }
+ subMenu = std_separator
+ subMenu = XAccTable, "Puddling Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XDecTable, "Puddling Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauAccTable, "Time Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = TauDecTable, "Time Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 }
+ subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { EAEOption == 4 }
+ subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { EAEOption == 4 }
+
+ menu = "Boost/VVT"
+ subMenu = boost, "Boost Control Settings"
+ subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl)}
+ subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boostctlCLPWMtargs1, "Boost Control Bias Duty Table 1", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
+ subMenu = boost_timed_curve, "Boost Delay (Timed From Launch)",0, { boost_ctl_settings_on && launch_opt_on && boost_feats_timed }
+ subMenu = boostvss_curve, "Boost Control vs Speed", 0, { (boost_ctl_settings_on) && ((boost_vss == 1) || (boost_vss == 2))}
+ subMenu = std_separator
+ subMenu = boostctlSettings2, "Boost Control Settings 2", 0 , {boost_ctl_settings_on}
+ subMenu = boostctlDutys2, "Boost Control Duty Table 2", 0, { boost_ctl_settings_on && (((!boost_ctl_settings_cl) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && !boost_ctl_settings_cl2)) }
+ subMenu = boostctlTargs2, "Boost Control Target Table 2", 0, { boost_ctl_settings_on && ((boost_ctl_settings_cl && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && boost_ctl_settings_cl2)) }
+ subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 }
+ subMenu = std_separator
+ subMenu = antilag, "Turbo Anti-lag (ALS)"
+ subMenu = antilagtables, "Turbo Anti-lag Tables", 0, {als_in_pin}
+ subMenu = als_rifuelcut_tbl, "Turbo Anti-lag Roving Idle", 0, {als_in_pin && als_opt_ri && hardware_fuel && sequential}
+ subMenu = std_separator
+ subMenu = vvtparams, "VVT Settings"
+ subMenu = vvt_timing1_tbl, "VVT Intake Table", 0, {vvt_opt1_on && vvt_opt2_pid2}
+ subMenu = vvt_timing2_tbl, "VVT Exhaust Table", 0, {vvt_opt1_on && vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2)}
+ subMenu = pwm_duties_Tbl_vvt, "VVT On/Off Table", 0, {vvt_opt1_on && !vvt_opt2_pid2}
+
+ menu = "Table choices"
+ subMenu = tablesw, "Table Switch/Dual Fuel"
+ subMenu = dualfuel_temp_curve, "Temperature Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_temp) }
+ subMenu = dualfuel_press_curve, "Pressure Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_press) }
+ subMenu = injsettings2, "Alt. Injector Dead-time 2", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
+ subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
+ subMenu = std_separator
+ subMenu = blend1menu, "Blend Curve (1) VE1->2", 0, {algorithm2 && (loadCombine == 2)}
+ subMenu = blend2menu, "Blend Curve (2) Spk1->2", 0, {IgnAlgorithm2 && (loadCombineign == 1)}
+ subMenu = blend3menu, "Blend Curve (3) VE1+2->3+4", 0, {f5_0_tsf && (f5_0_tsf_opt == 0) && (tsw_pin_f == 14)}
+ subMenu = blend4menu, "Blend Curve (4) Spk1+2->3+4", 0, {f5_0_tss && (f5_0_tss_opt == 0) && (tsw_pin_s == 14)}
+ subMenu = blend5menu, "Blend Curve (5) AFR1->2", 0, {tsw_pin_afr == 14}
+ subMenu = blend6menu, "Blend Curve (6) Boost1->2", 0, {(boost_feats_tsw == 14) && boost_ctl_settings_on}
+ subMenu = blend7menu, "Blend Curve (7) Crank%1->2", 0, {alternate_blend}
+ subMenu = blend8menu, "Blend Curve (8) Flex Blending", 0, { dualfuel_sw_on && (dualfuel_opt_mode == 2) }
+
+ menu = "Advanced Engine"
+ subMenu = speedsensors, "Speed and Gear Sensors"
+ subMenu = ss, "Shaft Speed Sensors"
+ subMenu = egt, "EGT/Thermocouple Settings"
+ subMenu = sensors, "Generic Sensor Inputs"
+ subMenu = accelerometer, "Accelerometer Parameters"
+ subMenu = tcsettings, "Traction Control Settings"
+ subMenu = tc_perfect_curve, "Traction Control - Perfect Run VSS", 0, {tc_opt_on && (tc_opt_method == 0)}
+ subMenu = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM", 0, {tc_opt_on && (tc_opt_method == 2)}
+ subMenu = tcslip_menu, "Traction Control - External Slip% Input", 0, {tc_opt_on && (tc_opt_method == 1) && tc_opt_slipcurve}
+ subMenu = tc_curves, "Traction Control Reactions", 0, {tc_opt_on}
+ subMenu = std_separator
+ subMenu = launch, "Launch / 2-step / 3-step / T-brake"
+ subMenu = launch_retard_time, "Timed Retard After Launch", 0, {launch_opt_on && launch_opt_retard}
+ subMenu = vsslaunch, "Speed-based Launch Control"
+ subMenu = ShiftSettings, "Sequential Shift Cut"
+ subMenu = nitrous, "&Nitrous System"
+ subMenu = nitrous_curves_time, "Nitrous - Time-Based Progressive",0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) }
+ subMenu = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 0)}
+ subMenu = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 2)}
+ subMenu = waterinj, "Water Injection"
+ subMenu = hpte, "High Power Time Enrichment"
+ subMenu = oilpress, "Oil Pressure"
+ subMenu = pitlimiter, "Pit Lane Limiter"
+ subMenu = std_separator
+ subMenu = ms3_port_edit_wrap, "Programmable On/Off Outputs"
+ subMenu = gen_pwm_a, "Generic PWM output A"
+ subMenu = gen_pwm_b, "Generic PWM output B"
+ subMenu = gen_pwm_c, "Generic PWM output C"
+ subMenu = gen_pwm_d, "Generic PWM output D"
+ subMenu = gen_pwm_e, "Generic PWM output E", 0, {!(vvt_opt1_on)}
+ subMenu = gen_pwm_f, "Generic PWM output F"
+ subMenu = std_separator
+ subMenu = generic_pid_a, "Generic Closed-Loop A"
+ subMenu = generic_pid_b, "Generic Closed-Loop B"
+
+; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
+
+ menuDialog = main
+ menu = "3D &Tuning Maps"
+ subMenu = veTable1Map, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) }
+ subMenu = veTable2Map, "Fuel VE Table &2", 0, { (algorithm2 != 0) && (algorithm2 != 5) }
+ subMenu = veTable3Map, "Fuel VE Table &3", 0, { (!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode) }
+ subMenu = veTable4Map, "Fuel VE Table &4", 0, { ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) && (algorithm2 != 0) }
+
+ subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType > 1 }
+ subMenu = afrTable2Map, "AF&R Table 2", 0, { (egoType > 1) && ((!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr)) }
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)}
+ subMenu = ignitionMap2, "Ignition Table 2", 0, { (IgnAlgorithm2 != 0) && (spk_mode0 != 31)}
+ subMenu = ignitionMap3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_fuel) }
+ subMenu = ignitionMap4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) }
+ subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = boostctlDtyMap2, "Boost Control Duty Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0}
+ subMenu = boostctlTargMap2, "Boost Control Target Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ subMenu = std_separator
+ subMenu = inj_timing_map, "Sequential Injector Timing Table", 0, { sequential != 0 }
+ subMenu = inj_timing_sec_map, "Sequential Injector Secondary Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) }
+
+ menu = "CAN-bus/ Testmodes"
+ subMenu = canparams, "CAN Parameters"
+ subMenu = canbroadcast, "CAN Broadcasting",0, {can_enable_on}
+ subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_enable_on && can_bcast1_on && can_bcast2_xxx}
+ subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_enable_on}
+ subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_3,"CAN Realtime Data Broadcasting 3", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_outpc_bcast_4,"CAN Realtime Data Broadcasting 4", 0, {can_enable_on && can_outpc_gp00_master}
+ subMenu = can_rcv, "CAN Receiving", 0, {can_enable_on}
+ subMenu = canvss, "CAN VSS, Gear",0, {can_enable_on}
+ subMenu = canego, "CAN EGO, GPS",0, {can_enable_on}
+ subMenu = realtimeclock, "Real Time Clock"
+ subMenu = iobox, "IO-Box Settings"
+ subMenu = dashbcast, "Dash Broadcasting"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = checkengine, "Check Engine Light"
+ subMenu = limpmode, "Limp Mode", 0, {cel_opt_on}
+ subMenu = alphaMAPTbl, "Fallback MAP Table", 0, {cel_opt_on && cel_opt2_map && cel_action1_map && cel_action1_map_an}
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = outputtest, "Output Test Mode - Inj/Spk"
+ subMenu = outputtest_io, "Output Test Mode - I/O"
+ subMenu = outputtest_io2, "Output Test Mode - I/O 2"
+ subMenu = outputtest_io3, "Output Test Mode - CAN I/O"
+ subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
+ subMenu = injseqtest, "Injector Sequential Testing"
+ subMenu = injspkonoff, "Inj/Spk Disabling Test Mode"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = special, "Special Options"
+ subMenu = std_separator
+ subMenu = lttrim, "Long Term Trim Settings"
+ subMenu = ltt_Table1Tbl, "Long Term Trim Table &1", 0
+#if OUTMSG_EDITING
+ subMenu = std_separator
+ subMenu = outmsg1, "Outmsg 1"
+ subMenu = outmsg2, "Outmsg 2"
+ subMenu = outmsg3, "Outmsg 3"
+ subMenu = outmsg4, "Outmsg 4"
+#endif
+
+ menuDialog = main
+ menu = "T&ools"
+ subMenu = sensorCal, "Calibrate MAP/Baro"
+ subMenu = battcalib, "Calibrate Battery Voltage"
+ subMenu = std_separator ;----------------------------------------------
+ subMenu = flash_unlock, "Un/Lock Calibrations"
+ subMenu = std_ms2gentherm, "Calibrate T&hermistor Tables", 0, {flashlock}
+ subMenu = std_ms2geno2, "Calibrate &AFR Table", 0, {flashlock}
+ subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
+
+ menu = "Data Logging"
+ subMenu = sdcard_datalog, "SD Card Datalogging"
+ subMenu = std_ms3SdConsole, "Browse / Import SD Card",0, {log_style_on2 && (tsLocalCanId == tsCanId) }
+
+ menu = "Communications"
+ subMenu = setbaud, "Megasquirt Baud Rate", 0
+
+ menu = "Help"
+ subMenu = helpGeneral, "Megasquirt 3 Info"
+;-------------------------------------------------------------------------------
+
+[VerbiageOverride]
+; text over-rides for internal TS dialogs.
+"Engine Stroke" = "Engine Stroke/Rotary"
+"Number of Cylinders" = "No. Cylinders/Rotors"
+
+[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.
+
+;The offsets here must match the actual offsets in 'datax1' and include the 0x200 offset.
+cmdStopTestmode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x00"
+cmdEnterTestMode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x01"
+cmdtestspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x02"
+cmdtestinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x03"
+
+cmdfpon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x05"
+cmdfpoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x06"
+cmdtestinjspkoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x07"
+cmdtestiacoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x08"
+cmdtestiachome = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x09"
+cmdtestiacon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0a"
+
+cmdskipinjoff= "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0b"
+cmdskipinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0c"
+cmdskipspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0d"
+
+cmdtestinjnorm = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x10"
+cmdtestinjbat = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x11"
+cmdtestinjsem = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x12"
+cmdtestinjseq = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x13"
+
+cmdtestiaccycle = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x18"
+
+cmdtest10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x80"
+cmdtest10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x82"
+cmdtest10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x83"
+
+cmdtest11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x84"
+cmdtest11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x86"
+cmdtest11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x87"
+
+cmdtest12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x88"
+cmdtest12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8a"
+cmdtest12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8b"
+
+cmdtest13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8c"
+cmdtest13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8e"
+cmdtest13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8f"
+
+cmdtest14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x90"
+cmdtest14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x92"
+
+cmdtest14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x93"
+
+cmdtest15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x94"
+cmdtest15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x96"
+cmdtest15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x97"
+
+cmdtest16off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x98"
+cmdtest16pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9a"
+cmdtest16on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9b"
+
+cmdtest17off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9c"
+cmdtest17pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9e"
+cmdtest17on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9f"
+
+cmdtesta0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa0"
+cmdtesta0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa2"
+cmdtesta0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa3"
+
+cmdtesta1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa4"
+cmdtesta1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa6"
+cmdtesta1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa7"
+
+cmdtesta2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa8"
+cmdtesta2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaa"
+cmdtesta2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xab"
+
+cmdtesta3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xac"
+cmdtesta3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xae"
+cmdtesta3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaf"
+
+cmdtesta4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb0"
+cmdtesta4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb2"
+cmdtesta4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb3"
+
+cmdtesta5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb4"
+cmdtesta5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb6"
+cmdtesta5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb7"
+
+cmdtesta6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb8"
+cmdtesta6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xba"
+cmdtesta6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbb"
+
+cmdtesta7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbc"
+cmdtesta7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbe"
+cmdtesta7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbf"
+
+cmdtestb0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc0"
+cmdtestb0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc2"
+cmdtestb0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc3"
+
+cmdtestb1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc4"
+cmdtestb1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc6"
+cmdtestb1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc7"
+
+cmdtestb2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc8"
+cmdtestb2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xca"
+cmdtestb2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcb"
+
+cmdtestb3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcc"
+cmdtestb3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xce"
+cmdtestb3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcf"
+
+cmdtestb4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd0"
+cmdtestb4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd2"
+cmdtestb4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd3"
+
+cmdtestb5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd4"
+cmdtestb5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd6"
+cmdtestb5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd7"
+
+cmdtestb6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd8"
+cmdtestb6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xda"
+cmdtestb6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdb"
+
+cmdtestb7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdc"
+cmdtestb7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xde"
+cmdtestb7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdf"
+
+cmdteste0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe0"
+cmdteste0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe2"
+cmdteste0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe3"
+
+cmdteste4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe4"
+cmdteste4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe6"
+cmdteste4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe7"
+
+cmdteste8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe8"
+cmdteste8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xea"
+cmdteste8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xeb"
+
+cmdtestecoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xec"
+cmdtestecpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xee"
+cmdtestecon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xef"
+
+cmdtestf0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf0"
+cmdtestf0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf2"
+cmdtestf0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf3"
+
+cmdtestf4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf4"
+cmdtestf4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf6"
+cmdtestf4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf7"
+
+cmdtestf8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf8"
+cmdtestf8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfa"
+cmdtestf8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfb"
+
+cmdtestfcoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfc"
+cmdtestfcpulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfe"
+cmdtestfcon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xff"
+; CAN outs
+cmdtestcano0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x80"
+cmdtestcano0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x82"
+cmdtestcano0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x83"
+
+cmdtestcano1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x84"
+cmdtestcano1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x86"
+cmdtestcano1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x87"
+
+cmdtestcano2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x88"
+cmdtestcano2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8a"
+cmdtestcano2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8b"
+
+cmdtestcano3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8c"
+cmdtestcano3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8e"
+cmdtestcano3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8f"
+
+cmdtestcano4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x90"
+cmdtestcano4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x92"
+cmdtestcano4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x93"
+
+cmdtestcano5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x94"
+cmdtestcano5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x96"
+cmdtestcano5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x97"
+
+cmdtestcano6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x98"
+cmdtestcano6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9a"
+cmdtestcano6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9b"
+
+cmdtestcano7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9c"
+cmdtestcano7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9e"
+cmdtestcano7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9f"
+
+cmdtestcano8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa0"
+cmdtestcano8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa2"
+cmdtestcano8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa3"
+
+cmdtestcano9off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa4"
+cmdtestcano9pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa6"
+cmdtestcano9on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa7"
+
+cmdtestcano10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa8"
+cmdtestcano10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaa"
+cmdtestcano10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xab"
+
+cmdtestcano11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xac"
+cmdtestcano11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xae"
+cmdtestcano11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaf"
+
+cmdtestcano12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb0"
+cmdtestcano12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb2"
+cmdtestcano12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb3"
+
+cmdtestcano13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb4"
+cmdtestcano13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb6"
+cmdtestcano13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb7"
+
+cmdtestcano14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb8"
+cmdtestcano14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xba"
+cmdtestcano14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbb"
+
+cmdtestcano15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbc"
+cmdtestcano15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbe"
+cmdtestcano15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbf"
+
+cmdlttr1 = "w\$tsCanId\x07\x02\x9a\x00\x01\x41"
+cmdlttr2 = "w\$tsCanId\x07\x02\x9a\x00\x01\x42"
+cmdlttw = "w\$tsCanId\x07\x02\x9a\x00\x01\x51"
+cmdlttz = "w\$tsCanId\x07\x02\x9a\x00\x01\x61"
+
+cmdinjspk1 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x20"
+cmdinjspk2 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x21"
+cmdinjspk3 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x22"
+cmdinjspk4 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x23"
+cmdinjspk5 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x24"
+cmdinjspk6 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x25"
+cmdinjspk7 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x26"
+cmdinjspk8 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x27"
+cmdinjspk9 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x28"
+cmdinjspk10 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x29"
+cmdinjspk11 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2a"
+cmdinjspk12 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2b"
+cmdinjspk13 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2c"
+cmdinjspk14 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2d"
+cmdinjspk15 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2e"
+cmdinjspk16 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2f"
+
+cmdnull = ""
+
+[UserDefined]
+ dialog = pitlimiter, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pitlim"
+ field = "Pit Limiter Enable", pitlim_opt_on
+ field = "Input", pitlim_enin, pitlim_opt_on
+ field = "Mode", pitlim_opt_mode, { pitlim_opt_on && pitlim_enin }
+ field = "Use VSS or RPM target", pitlim_opt_vssrpm, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) }
+ field = "Speed", pitlim_speed, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 0) }
+ field = "Speed control range", pitlim_speed_range, { pitlim_opt_on && pitlim_enin && ((pitlim_opt_mode == 0) || (pitlim_opt_vssrpm == 0)) }
+ field = "RPM control range", pitlim_rpm_range, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) && pitlim_opt_vssrpm }
+ slider = "Tracking Sensitivity", pitlim_sensitivity, horizontal, { pitlim_opt_on && pitlim_enin}
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", pitlim_opt_retard, { pitlim_opt_on && pitlim_enin}
+ field = "Maximum Retard", pitlim_retardmax, { pitlim_opt_on && pitlim_enin&& (pitlim_opt_retard == 1) }
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", pitlim_opt_spkcut, { pitlim_opt_on && pitlim_enin}
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", pitlim_opt_fuelcut, { pitlim_opt_on && pitlim_enin}
+ field = "Progressive Fuel Cut", pitlim_opt_fuelprog, { pitlim_opt_on && pitlim_enin && pitlim_opt_fuelcut }
+
+ dialog = iobox1, "IO box 1", yAxis
+ field = "IO-Box #1 Enable", iobox_opta1
+ field = "VSS setting", iobox_optb1vss, {iobox_opta1}
+ field = "Configuration", iobox_opta1adv, {iobox_opta1}
+ field = "Base CAN identifier", iobox_id1, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANIN", iobox_opta1canin, {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANOUT", iobox_opta1canout , {iobox_opta1 && iobox_opta1adv }
+ field = "Base CANADC", iobox_opta1canadc, {iobox_opta1 && iobox_opta1adv }
+ field = "Tach transmit rate", iobox_optb1tachrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Inputs transmit rate", iobox_optb1inrate, {iobox_opta1 && iobox_opta1adv }
+ field = "Outputs transmit rate", iobox_optb1outrate, {iobox_opta1 && iobox_opta1adv }
+
+ dialog = iobox2, "IO box 2", yAxis
+ field = "IO-Box #2 Enable", iobox_opta2
+ field = "VSS setting", iobox_optb2vss, {iobox_opta2}
+ field = "Configuration", iobox_opta2adv, {iobox_opta2}
+ field = "Base CAN identifier", iobox_id2, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANIN", iobox_opta2canin, {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANOUT", iobox_opta2canout , {iobox_opta2 && iobox_opta2adv }
+ field = "Base CANADC", iobox_opta2canadc, {iobox_opta2 && iobox_opta2adv }
+ field = "Tach transmit rate", iobox_optb2tachrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Inputs transmit rate", iobox_optb2inrate, {iobox_opta2 && iobox_opta2adv }
+ field = "Outputs transmit rate", iobox_optb2outrate, {iobox_opta2 && iobox_opta2adv }
+
+ dialog = iobox3, "IO box 3", yAxis
+ field = "IO-Box #3 Enable", iobox_opta3
+ field = "VSS setting", iobox_optb3vss, {iobox_opta3}
+ field = "Configuration", iobox_opta3adv, {iobox_opta3}
+ field = "Base CAN identifier", iobox_id3, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANIN", iobox_opta3canin, {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANOUT", iobox_opta3canout , {iobox_opta3 && iobox_opta3adv }
+ field = "Base CANADC", iobox_opta3canadc, {iobox_opta3 && iobox_opta3adv }
+ field = "Tach transmit rate", iobox_optb3tachrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Inputs transmit rate", iobox_optb3inrate, {iobox_opta3 && iobox_opta3adv }
+ field = "Outputs transmit rate", iobox_optb3outrate, {iobox_opta3 && iobox_opta3adv }
+
+ dialog = iobox4, "IO box 4", yAxis
+ field = "IO-Box #4 Enable", iobox_opta4
+ field = "VSS setting", iobox_optb4vss, {iobox_opta4}
+ field = "Configuration", iobox_opta4adv, {iobox_opta4}
+ field = "Base CAN identifier", iobox_id4, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANIN", iobox_opta4canin, {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANOUT", iobox_opta4canout , {iobox_opta4 && iobox_opta4adv }
+ field = "Base CANADC", iobox_opta4canadc, {iobox_opta4 && iobox_opta4adv }
+ field = "Tach transmit rate", iobox_optb4tachrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Inputs transmit rate", iobox_optb4inrate, {iobox_opta4 && iobox_opta4adv }
+ field = "Outputs transmit rate", iobox_optb4outrate, {iobox_opta4 && iobox_opta4adv }
+
+ dialog = ioboxtop, "", xAxis
+ panel = iobox1, West
+ panel = iobox2, East
+
+ dialog = ioboxbot, "", xAxis
+ panel = iobox3, West
+ panel = iobox4, East, {0}
+
+ dialog = iobox, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iobox"
+ panel = ioboxtop, North
+ panel = ioboxbot, South
+
+ dialog = dashbcast, "Dash Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dashbcast"
+ field = "Enable", dashbcast_opta1
+ field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1}
+ field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv }
+ field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv }
+
+ dialog = can_rcv2, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var1
+ field = "", can_rcv_var2
+ field = "", can_rcv_var3
+ field = "", can_rcv_var4
+ field = "", can_rcv_var5
+ field = "", can_rcv_var6
+ field = "", can_rcv_var7
+ field = "", can_rcv_var8
+
+ dialog = can_rcv2b, "", yAxis
+ field = " Local variable / channel"
+ field = "", can_rcv_var9
+ field = "", can_rcv_var10
+ field = "", can_rcv_var11
+ field = "", can_rcv_var12
+ field = "", can_rcv_var13
+ field = "", can_rcv_var14
+ field = "", can_rcv_var15
+ field = "", can_rcv_var16
+
+ dialog = can_rcv3, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id1
+ field = "", can_rcv_id2
+ field = "", can_rcv_id3
+ field = "", can_rcv_id4
+ field = "", can_rcv_id5
+ field = "", can_rcv_id6
+ field = "", can_rcv_id7
+ field = "", can_rcv_id8
+
+ dialog = can_rcv3b, "", yAxis
+ field = " Identifier (decimal)"
+ field = "", can_rcv_id9
+ field = "", can_rcv_id10
+ field = "", can_rcv_id11
+ field = "", can_rcv_id12
+ field = "", can_rcv_id13
+ field = "", can_rcv_id14
+ field = "", can_rcv_id15
+ field = "", can_rcv_id16
+
+ dialog = can_rcv4, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off1
+ field = "", can_rcv_off2
+ field = "", can_rcv_off3
+ field = "", can_rcv_off4
+ field = "", can_rcv_off5
+ field = "", can_rcv_off6
+ field = "", can_rcv_off7
+ field = "", can_rcv_off8
+
+ dialog = can_rcv4b, "", yAxis
+ field = " Offset"
+ field = "", can_rcv_off9
+ field = "", can_rcv_off10
+ field = "", can_rcv_off11
+ field = "", can_rcv_off12
+ field = "", can_rcv_off13
+ field = "", can_rcv_off14
+ field = "", can_rcv_off15
+ field = "", can_rcv_off16
+
+ dialog = can_rcv5, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size1
+ field = "", can_rcv_size2
+ field = "", can_rcv_size3
+ field = "", can_rcv_size4
+ field = "", can_rcv_size5
+ field = "", can_rcv_size6
+ field = "", can_rcv_size7
+ field = "", can_rcv_size8
+
+ dialog = can_rcv5b, "", yAxis
+ field = " Size"
+ field = "", can_rcv_size9
+ field = "", can_rcv_size10
+ field = "", can_rcv_size11
+ field = "", can_rcv_size12
+ field = "", can_rcv_size13
+ field = "", can_rcv_size14
+ field = "", can_rcv_size15
+ field = "", can_rcv_size16
+
+ dialog = can_rcv6, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult1
+ field = "", can_rcv_mult2
+ field = "", can_rcv_mult3
+ field = "", can_rcv_mult4
+ field = "", can_rcv_mult5
+ field = "", can_rcv_mult6
+ field = "", can_rcv_mult7
+ field = "", can_rcv_mult8
+
+ dialog = can_rcv6b, "", yAxis
+ field = " Multiply"
+ field = "", can_rcv_mult9
+ field = "", can_rcv_mult10
+ field = "", can_rcv_mult11
+ field = "", can_rcv_mult12
+ field = "", can_rcv_mult13
+ field = "", can_rcv_mult14
+ field = "", can_rcv_mult15
+ field = "", can_rcv_mult16
+
+ dialog = can_rcv7, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div1
+ field = "", can_rcv_div2
+ field = "", can_rcv_div3
+ field = "", can_rcv_div4
+ field = "", can_rcv_div5
+ field = "", can_rcv_div6
+ field = "", can_rcv_div7
+ field = "", can_rcv_div8
+
+ dialog = can_rcv7b, "", yAxis
+ field = " Divide"
+ field = "", can_rcv_div9
+ field = "", can_rcv_div10
+ field = "", can_rcv_div11
+ field = "", can_rcv_div12
+ field = "", can_rcv_div13
+ field = "", can_rcv_div14
+ field = "", can_rcv_div15
+ field = "", can_rcv_div16
+
+ dialog = can_rcv8, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add1
+ field = "", can_rcv_add2
+ field = "", can_rcv_add3
+ field = "", can_rcv_add4
+ field = "", can_rcv_add5
+ field = "", can_rcv_add6
+ field = "", can_rcv_add7
+ field = "", can_rcv_add8
+
+ dialog = can_rcv8b, "", yAxis
+ field = " Add"
+ field = "", can_rcv_add9
+ field = "", can_rcv_add10
+ field = "", can_rcv_add11
+ field = "", can_rcv_add12
+ field = "", can_rcv_add13
+ field = "", can_rcv_add14
+ field = "", can_rcv_add15
+ field = "", can_rcv_add16
+
+ dialog = can_rcv1, "", xAxis
+ panel = can_rcv2
+ panel = can_rcv3
+ panel = can_rcv4
+ panel = can_rcv5
+ panel = can_rcv6
+ panel = can_rcv7
+ panel = can_rcv8
+
+ dialog = can_rcv1b, "", xAxis
+ panel = can_rcv2b
+ panel = can_rcv3b
+ panel = can_rcv4b
+ panel = can_rcv5b
+ panel = can_rcv6b
+ panel = can_rcv7b
+ panel = can_rcv8b
+
+ dialog = can_rcv0, "", xAxis
+ field = "Enable receiving CAN data", can_rcv_opt_on
+ field = ""
+ field = ""
+
+ dialog = can_rcv, "CAN receiving", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrcv"
+ panel = can_rcv0, North
+ panel = can_rcv1, Center;, {can_rcv_opt_on} ; ungreying does not work
+ panel = can_rcv1b, South;, {can_rcv_opt_on}
+
+ dialog = can_outpc_bcast_setting, "", yAxis
+ field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
+ field = "Base message identifier (decimal)", can_outpc_msg
+
+ dialog = can_outpc_bcast_1, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master }
+ field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master }
+ field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master }
+ field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master }
+ field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master }
+ field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master }
+ field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master }
+ field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master }
+ field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master }
+ field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master }
+ field = "10: status1,2,3,4,5,6,7", can_outpc_gp10, { can_outpc_gp00_master }
+ field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master }
+ field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master }
+ field = "13: sensors1,2,3,4", can_outpc_gp13, { can_outpc_gp00_master }
+ field = "14: sensors5,6,7,8", can_outpc_gp14, { can_outpc_gp00_master }
+ field = "15: sensors9,10,11,12", can_outpc_gp15, { can_outpc_gp00_master }
+
+ dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "16: sensors13,14,15,16", can_outpc_gp16
+ field = "17: boost_targ1,2,boostduty1,2,MAFv", can_outpc_gp17
+ field = "18: PWseq1,2,3,4", can_outpc_gp18
+ field = "19: PWseq5,6,7,8", can_outpc_gp19
+ field = "20: PWseq9,10,11,12", can_outpc_gp20
+ field = "21: PWseq13,14,15,16", can_outpc_gp21
+ field = "22: EGT1,2,3,4", can_outpc_gp22
+ field = "23: EGT5,6,7,8", can_outpc_gp23
+ field = "24: EGT9,10,11,12", can_outpc_gp24
+ field = "25: EGT13,14,15,16", can_outpc_gp25
+ field = "26: nitrous:duty1,2,timer,addfuel,retard", can_outpc_gp26
+ field = "27: CANpwinin1,2,3,4", can_outpc_gp27
+ field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28
+ field = "29: EAEfcor1,2,VSS1dot,VSS2dot", can_outpc_gp29
+ field = "30: AccelX,Y,Z,streamlvl,waterduty", can_outpc_gp30
+ field = "31: AFR0,1,2,3,4,5,6,7,8", can_outpc_gp31
+
+ dialog = can_outpc_bcast_3, "CAN Realtime Data Broadcasting 3", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "32: AFR9,10,11,12,13,14,15,16", can_outpc_gp32
+ field = "33: PWMduty1,2,3,4,5,6,gear,timingerr", can_outpc_gp33
+ field = "34: EGOv1,2,3,4", can_outpc_gp34
+ field = "35: EGOv5,6,7,8", can_outpc_gp35
+ field = "36: EGOv9,10,11,12", can_outpc_gp36
+ field = "37: EGOv13,14,15,16", can_outpc_gp37
+ field = "38: EGOcor1,2,3,4", can_outpc_gp38
+ field = "39: EGOcor5,6,7,8", can_outpc_gp39
+ field = "40: EGOcor9,10,11,12", can_outpc_gp40
+ field = "41: EGOcor13,14,15,16", can_outpc_gp41
+ field = "42: VSS1,2,3,4", can_outpc_gp42
+ field = "43: synccnt,reason,SD:file#,err,phase,stat,timing_err", can_outpc_gp43
+ field = "44: VVTang1,2,3,4", can_outpc_gp44
+ field = "45: VVTtarg1,2,3,4", can_outpc_gp45
+ field = "46: VVTduty1,2,3,4,injtimingpri,sec", can_outpc_gp46
+ field = "47: eth%,tpsacc,SS1,2", can_outpc_gp47
+
+ dialog = can_outpc_bcast_4, "CAN Realtime Data Broadcasting 4", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ field = "48: knock_cyl1,2,3,4,5,6,7,8", can_outpc_gp48
+ field = "49: knock_cyl9,10,11,12,13,14,15,16", can_outpc_gp49
+ field = "50: MAPacc,totalacc,launch:timer,retard", can_outpc_gp50
+ field = "51: PORTa,b,eh,k,mj,p,t,cel_err", can_outpc_gp51
+ field = "52: CANin,CANout,knockretard,fuelflow,cons", can_outpc_gp52
+ field = "53: Fuel:press1,2,temp1,2", can_outpc_gp53
+ field = "54: battcurr,CLidletarg,FPduty,ALTduty,loadduty,ALTtarg", can_outpc_gp54
+ field = "55: looptime,fueltempcor,fuelprescor,lttcor", can_outpc_gp55
+ field = "56: Retards:TC,CEL,FCut,ext", can_outpc_gp56
+ field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
+ field = "58: TableAdv:1,2,3,4", can_outpc_gp58
+ field = "59: Revlimretard,ALSadv,ext_advance,deadtime", can_outpc_gp59
+ field = "60: Launchadv,3stepadv,VSSlaunchretard,celstat2", can_outpc_gp60
+ field = "61: GPS", can_outpc_gp61
+ field = "62: GPS", can_outpc_gp62
+ field = "63: Gen CL duty1,2", can_outpc_gp63
+
+ dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canrtbcast"
+ panel = can_outpc_bcast_setting, North
+ panel = can_outpc_bcast_1, South
+
+ dialog = outmsg1_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg1_offset01
+ field = "02", outmsg1_offset02
+ field = "03", outmsg1_offset03
+ field = "04", outmsg1_offset04
+ field = "05", outmsg1_offset05
+ field = "06", outmsg1_offset06
+ field = "07", outmsg1_offset07
+ field = "08", outmsg1_offset08
+ field = "09", outmsg1_offset09
+ field = "10", outmsg1_offset10
+ field = "11", outmsg1_offset11
+ field = "12", outmsg1_offset12
+ field = "13", outmsg1_offset13
+ field = "14", outmsg1_offset14
+ field = "15", outmsg1_offset15
+ field = "16", outmsg1_offset16
+
+ dialog = outmsg1_size, "", yAxis
+ field = " Size"
+ field = "", outmsg1_size01
+ field = "", outmsg1_size02
+ field = "", outmsg1_size03
+ field = "", outmsg1_size04
+ field = "", outmsg1_size05
+ field = "", outmsg1_size06
+ field = "", outmsg1_size07
+ field = "", outmsg1_size08
+ field = "", outmsg1_size09
+ field = "", outmsg1_size10
+ field = "", outmsg1_size11
+ field = "", outmsg1_size12
+ field = "", outmsg1_size13
+ field = "", outmsg1_size14
+ field = "", outmsg1_size15
+ field = "", outmsg1_size16
+
+ dialog = outmsg1, "Outmsg 1", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg1_off
+ panel = outmsg1_size
+
+ dialog = outmsg2_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg2_offset01
+ field = "02", outmsg2_offset02
+ field = "03", outmsg2_offset03
+ field = "04", outmsg2_offset04
+ field = "05", outmsg2_offset05
+ field = "06", outmsg2_offset06
+ field = "07", outmsg2_offset07
+ field = "08", outmsg2_offset08
+ field = "09", outmsg2_offset09
+ field = "10", outmsg2_offset10
+ field = "11", outmsg2_offset11
+ field = "12", outmsg2_offset12
+ field = "13", outmsg2_offset13
+ field = "14", outmsg2_offset14
+ field = "15", outmsg2_offset15
+ field = "16", outmsg2_offset16
+
+ dialog = outmsg2_size, "", yAxis
+ field = " Size"
+ field = "", outmsg2_size01
+ field = "", outmsg2_size02
+ field = "", outmsg2_size03
+ field = "", outmsg2_size04
+ field = "", outmsg2_size05
+ field = "", outmsg2_size06
+ field = "", outmsg2_size07
+ field = "", outmsg2_size08
+ field = "", outmsg2_size09
+ field = "", outmsg2_size10
+ field = "", outmsg2_size11
+ field = "", outmsg2_size12
+ field = "", outmsg2_size13
+ field = "", outmsg2_size14
+ field = "", outmsg2_size15
+ field = "", outmsg2_size16
+
+ dialog = outmsg2, "Outmsg 2", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg2_off
+ panel = outmsg2_size
+
+ dialog = outmsg3_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg3_offset01
+ field = "02", outmsg3_offset02
+ field = "03", outmsg3_offset03
+ field = "04", outmsg3_offset04
+ field = "05", outmsg3_offset05
+ field = "06", outmsg3_offset06
+ field = "07", outmsg3_offset07
+ field = "08", outmsg3_offset08
+ field = "09", outmsg3_offset09
+ field = "10", outmsg3_offset10
+ field = "11", outmsg3_offset11
+ field = "12", outmsg3_offset12
+ field = "13", outmsg3_offset13
+ field = "14", outmsg3_offset14
+ field = "15", outmsg3_offset15
+ field = "16", outmsg3_offset16
+
+ dialog = outmsg3_size, "", yAxis
+ field = " Size"
+ field = "", outmsg3_size01
+ field = "", outmsg3_size02
+ field = "", outmsg3_size03
+ field = "", outmsg3_size04
+ field = "", outmsg3_size05
+ field = "", outmsg3_size06
+ field = "", outmsg3_size07
+ field = "", outmsg3_size08
+ field = "", outmsg3_size09
+ field = "", outmsg3_size10
+ field = "", outmsg3_size11
+ field = "", outmsg3_size12
+ field = "", outmsg3_size13
+ field = "", outmsg3_size14
+ field = "", outmsg3_size15
+ field = "", outmsg3_size16
+
+ dialog = outmsg3, "Outmsg 3", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg3_off
+ panel = outmsg3_size
+
+ dialog = outmsg4_off, "", yAxis
+ field = "Variable Offset"
+ field = "01", outmsg4_offset01
+ field = "02", outmsg4_offset02
+ field = "03", outmsg4_offset03
+ field = "04", outmsg4_offset04
+ field = "05", outmsg4_offset05
+ field = "06", outmsg4_offset06
+ field = "07", outmsg4_offset07
+ field = "08", outmsg4_offset08
+ field = "09", outmsg4_offset09
+ field = "10", outmsg4_offset10
+ field = "11", outmsg4_offset11
+ field = "12", outmsg4_offset12
+ field = "13", outmsg4_offset13
+ field = "14", outmsg4_offset14
+ field = "15", outmsg4_offset15
+ field = "16", outmsg4_offset16
+
+ dialog = outmsg4_size, "", yAxis
+ field = " Size"
+ field = "", outmsg4_size01
+ field = "", outmsg4_size02
+ field = "", outmsg4_size03
+ field = "", outmsg4_size04
+ field = "", outmsg4_size05
+ field = "", outmsg4_size06
+ field = "", outmsg4_size07
+ field = "", outmsg4_size08
+ field = "", outmsg4_size09
+ field = "", outmsg4_size10
+ field = "", outmsg4_size11
+ field = "", outmsg4_size12
+ field = "", outmsg4_size13
+ field = "", outmsg4_size14
+ field = "", outmsg4_size15
+ field = "", outmsg4_size16
+
+ dialog = outmsg4, "Outmsg 4", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#outmsg"
+ panel = outmsg4_off
+ panel = outmsg4_size
+
+ dialog = fuelcalc_gauges1, "", xAxis
+ gauge = veGauge1
+ gauge = veGauge2
+ gauge = reqfuelGauge
+ gauge = deadtime1Gauge
+ gauge = stoichGauge
+
+ dialog = fuelcalc_gauges2, "", xAxis
+ gauge = warmupgauge
+ gauge = barocorgauge
+ gauge = gammaairGauge
+ gauge = fuelcorr
+ gauge = afr1targetGauge
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = accelEnrichGauge
+ gauge = accEnrichMSGauge
+ gauge = EAEGauge1
+ gauge = EAEGauge2
+ gauge = fuelloadGauge
+ gauge = nitrous_addfuel
+
+ dialog = fuelcalc_gauges3, "", xAxis
+ gauge = fueltemp_cor
+ gauge = fuelpress_cor
+ gauge = ltt_cor
+ gauge = als_addfuel
+
+ dialog = fuelcalc_gauges4, "", xAxis
+ gauge = pulseWidth1Gauge
+ gauge = pulseWidth2Gauge
+; gauge = pulseWidth3Gauge
+; gauge = pulseWidth4Gauge
+
+ dialog = fuelcalc_gauges5, "", xAxis
+ gauge = dutyCycle1Gauge
+ gauge = dutyCycle2Gauge
+ gauge = gammaEnrichGauge
+
+ dialog = fuelcalc_gauges6, ""
+ field = "For more information on fuel calculations, see the Setting Up Manual."
+
+ dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsum"
+ panel = fuelcalc_gauges1
+ panel = fuelcalc_gauges2
+ panel = fuelcalc_gauges3
+ panel = fuelcalc_gauges4
+ panel = fuelcalc_gauges5
+ panel = fuelcalc_gauges6
+
+ dialog = sparkcalc_gauges1, "", xAxis
+ gauge = adv1Gauge
+ gauge = adv2Gauge
+ gauge = adv3Gauge
+ gauge = adv4Gauge
+ gauge = base_advanceGauge
+
+ dialog = sparkcalc_gauges2, "", xAxis
+ gauge = idle_cor_advanceGauge
+ gauge = coldAdvGauge
+ gauge = mat_retardGauge
+ gauge = flex_advanceGauge
+
+ dialog = sparkcalc_gauges3, "", xAxis
+ gauge = nitrous_retard
+ gauge = revlim_retardGauge
+ gauge = ext_advanceGauge
+ gauge = knockGauge
+
+ dialog = sparkcalc_gauges4, "", xAxis
+ gauge = tc_retardGauge
+ gauge = cel_retardGauge
+ gauge = fc_retardGauge
+ gauge = als_timingGauge
+
+ dialog = sparkcalc_gauges5, "", xAxis
+ gauge = launch_timingGauge
+ gauge = step3_timingGauge
+ gauge = launchvss_retardGauge
+ gauge = advdegGauge
+
+ dialog = sparkcalcs, "Spark Calculations Summary", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#sparksum"
+ panel = sparkcalc_gauges1
+ panel = sparkcalc_gauges2
+ panel = sparkcalc_gauges3
+ panel = sparkcalc_gauges4
+ panel = sparkcalc_gauges5
+
+ dialog = buts_injspk_label, "", yAxis
+ field = "Enabled -->>"
+ field = "Disabled ->>"
+
+ dialog = buts_injspk1, "", yAxis
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && ((status5 & 1) == 0)}
+ commandButton = "1", cmdinjspk1, {(status8 & 0x03) && (status5 & 1)}
+ dialog = buts_injspk2, "", yAxis
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && ((status5 & 2) == 0)}
+ commandButton = "2", cmdinjspk2, {(status8 & 0x03) && (status5 & 2)}
+ dialog = buts_injspk3, "", yAxis
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && ((status5 & 4) == 0)}
+ commandButton = "3", cmdinjspk3, {(status8 & 0x03) && (status5 & 4)}
+ dialog = buts_injspk4, "", yAxis
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && ((status5 & 8) == 0)}
+ commandButton = "4", cmdinjspk4, {(status8 & 0x03) && (status5 & 8)}
+ dialog = buts_injspk5, "", yAxis
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && ((status5 & 16) == 0)}
+ commandButton = "5", cmdinjspk5, {(status8 & 0x03) && (status5 & 16)}
+ dialog = buts_injspk6, "", yAxis
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && ((status5 & 32) == 0)}
+ commandButton = "6", cmdinjspk6, {(status8 & 0x03) && (status5 & 32)}
+ dialog = buts_injspk7, "", yAxis
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && ((status5 & 64) == 0)}
+ commandButton = "7", cmdinjspk7, {(status8 & 0x03) && (status5 & 64)}
+ dialog = buts_injspk8, "", yAxis
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && ((status5 & 128) == 0)}
+ commandButton = "8", cmdinjspk8, {(status8 & 0x03) && (status5 & 128)}
+
+ dialog = buts_injspk9, "", yAxis
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && ((status5 & 0x100) == 0)}
+ commandButton = "9", cmdinjspk9, {(status8 & 0x03) && (status5 & 0x100)}
+ dialog = buts_injspk10, "", yAxis
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && ((status5 & 0x200) == 0)}
+ commandButton = "10", cmdinjspk10, {(status8 & 0x03) && (status5 & 0x200)}
+ dialog = buts_injspk11, "", yAxis
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && ((status5 & 0x400) == 0)}
+ commandButton = "11", cmdinjspk11, {(status8 & 0x03) && (status5 & 0x400)}
+ dialog = buts_injspk12, "", yAxis
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && ((status5 & 0x800) == 0)}
+ commandButton = "12", cmdinjspk12, {(status8 & 0x03) && (status5 & 0x800)}
+ dialog = buts_injspk13, "", yAxis
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && ((status5 & 0x1000) == 0)}
+ commandButton = "13", cmdinjspk13, {(status8 & 0x03) && (status5 & 0x1000)}
+ dialog = buts_injspk14, "", yAxis
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && ((status5 & 0x2000) == 0)}
+ commandButton = "14", cmdinjspk14, {(status8 & 0x03) && (status5 & 0x2000)}
+ dialog = buts_injspk15, "", yAxis
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && ((status5 & 0x4000) == 0)}
+ commandButton = "15", cmdinjspk15, {(status8 & 0x03) && (status5 & 0x4000)}
+ dialog = buts_injspk16, "", yAxis
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && ((status5 & 0x8000) == 0)}
+ commandButton = "16", cmdinjspk16, {(status8 & 0x03) && (status5 & 0x8000)}
+
+ dialog = injspkonoffmaster, "", xAxis
+ commandButton = "Off", cmdskipinjoff, {status8 & 0x03}, clickOnCloseIfEnabled
+ commandButton = "Injectors", cmdskipinjon, {(status8 & 0x03) == 0}
+ commandButton = "Coils", cmdskipspkon, {(status8 & 0x03) == 0}
+
+ dialog = injspkonoffchans, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk1
+ panel = buts_injspk2
+ panel = buts_injspk3
+ panel = buts_injspk4
+ panel = buts_injspk5
+ panel = buts_injspk6
+ panel = buts_injspk7
+ panel = buts_injspk8
+ panel = buts_injspk9
+ panel = buts_injspk10
+
+ dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis
+ panel = buts_injspk_label
+ panel = buts_injspk9
+ panel = buts_injspk10
+ panel = buts_injspk11
+ panel = buts_injspk12
+
+ dialog = injspkonofftype, "", yAxis
+ displayOnlyField = "Off", dummyfield, {(status8 & 0x03) == 0}
+ displayOnlyField = "Injector disabling test.", dummyfield, {(status8 & 0x03) == 1}
+ displayOnlyField = "Coil disabling test - beware of plug fouling.", dummyfield, {(status8 & 0x03) == 2}
+ field = "Will not run as expected if running:"
+ field = " - semi-sequential fuel"
+ field = " - wasted spark and only a crank wheel"
+ field = " - a simple distributor input."
+
+ dialog = injspkonoff, "Inj/Spk Disabling Test Mode", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injspkonoff"
+ panel = injspkonoffmaster, North
+ panel = injspkonofftype, Center
+ panel = injspkonoffchans, South;, {status8 & 0x03} ; <--- this isn't ungreying
+
+ dialog = fp_safety, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelsafety"
+ field = "Fuel pressure monitoring must be enabled."
+ field = "Enable Fuel Pressure Safety", fp_opt_safety, {fp_press_in}
+ field = "(Target fuel pressure are set on fuel pressure page.)"
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_psig
+ displayOnlyField = "Static/Target rail differential pressure", rail_pressure_kpag
+ field = "Check Above Load", fp_drop_load, {fp_opt_safety && fp_press_in}
+ field = "Check Above RPM", fp_drop_rpm, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_psig, {fp_opt_safety && fp_press_in}
+ field = "Allowed Pressure Drop", fp_drop_kpag, {fp_opt_safety && fp_press_in}
+ field = "Time Allowed At Low Pressure", fp_drop_time, {fp_opt_safety && fp_press_in}
+ field = "See AFR safety for shutdown options"
+
+ dialog = oilpress_set, ""
+ field = "Oil Pressure Input", oilpress_in
+ field = "Oil Pressure Warning", oilpress_out, {oilpress_in}
+ field = "Set the zero rpm pressures above zero"
+ field = "to ensure lamp is tested on each start."
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = oilpress, "Oil Pressure", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#oil"
+ panel = oilpress_set
+ panel = oil_curve, {oilpress_in}
+
+ dialog = shiftlight, "Shift Light"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shiftlight"
+ field = "Shift Light Output", shiftlight_opt_pins
+ field = "Per Gear Limits", shiftlight_opt_gear, {shiftlight_opt_pins}
+ field = "Limit", shiftlight_limit1, {shiftlight_opt_pins && (shiftlight_opt_gear == 0)}
+ field = "1st Gear Limit", shiftlight_limit1, {shiftlight_opt_pins && shiftlight_opt_gear}
+ field = "2nd Gear Limit", shiftlight_limit2, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 1)}
+ field = "3rd Gear Limit", shiftlight_limit3, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 2)}
+ field = "4th Gear Limit", shiftlight_limit4, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 3)}
+ field = "5th Gear Limit", shiftlight_limit5, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 4)}
+ field = "6th Gear Limit", shiftlight_limit6, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 5)}
+
+ dialog = hpte1, ""
+ field = "This feature requires Incorporate AFR be enabled"
+ field = "High Power Time Enrichment", hpte_opt_on, {loadStoich}
+ field = "Above Load", hpte_load, {hpte_opt_on && loadStoich}
+ field = "Above RPM", hpte_rpm, {hpte_opt_on && loadStoich}
+
+ dialog = hpte, "High Power Time Enrichment"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#hpte"
+ panel = hpte1
+ panel = hpte_curve, {hpte_opt_on && loadStoich}
+
+ dialog = MAFtable, "MAF Flow Curve", card
+ panel = MAFtable1, Center, { MAFOption_t == 0 }
+ panel = MAFtable1f, Center, { MAFOption_t == 1 }
+
+ dialog = alt_load, ""
+ field = "Warn on Voltage Difference >", alternator_diff, {alternator_opt_mode && alternator_lampout}
+ field = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ field = "Capture Polarity", alternator_freq_moninv, {alternator_opt_mode && (alternator_opt_mode < 4) && alternator_freq_monin}
+ field = "Warn On Load >", alternator_maxload, {alternator_lampout && ((alternator_opt_mode && alternator_freq_monin) || (alternator_opt_mode == 4) || (alternator_opt_mode == 5))}
+ field = ""
+ field = ""
+
+ dialog = alt_pids, ""
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", alternator_Kp, {alternator_opt_mode == 4}
+ field = "Integral Gain", alternator_Ki, {alternator_opt_mode == 4}
+ field = "Derivative Gain", alternator_Kd, {alternator_opt_mode == 4}
+ slider = "Sensitivity", alternator_sensitivity, horizontal, {alternator_opt_mode == 4}
+
+ dialog = alt_pidorload, "", card
+ panel = alt_load, Center, {alternator_opt_mode != 4}
+ panel = alt_pids, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_settings_t, ""
+ field = "Control Mode", alternator_opt_mode
+ field = "Control Interval", alternator_ctl_ms, {alternator_opt_mode}
+ field = "Control Output", alternator_controlout, {alternator_opt_mode}
+ field = "Output Polarity", alternator_control_inv, {alternator_opt_mode}
+ field = "Control Frequency", alternator_freq, {(alternator_opt_mode == 3) || (alternator_opt_mode == 4)}
+ field = "Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+
+ dialog = alt_settings_b, ""
+ field = "Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ field = "Capture Polarity", alternator_freq_currinv, {alternator_opt_mode && alternator_freq_currin}
+ field = "Start Delay", alternator_startdelay, {alternator_opt_mode}
+ field = "Ramp Up Time", alternator_ramptime, {alternator_opt_mode > 1}
+ field = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ field = "Charge Mode Target Voltage", alternator_targv, {(alternator_tempin == 0) && alternator_opt_mode}
+ field = "Charge Time", alternator_chargetime, {alternator_opt_mode > 1}
+ field = "Run Mode Target Voltage", alternator_targvr, {alternator_opt_mode > 1}
+ field = "WOT TPS%", alternator_wot, {alternator_opt_mode > 1}
+ field = "WOT Target Voltage", alternator_wotv, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "WOT Timeout", alternator_wottimeout, {(alternator_opt_mode > 1) && (alternator_wot < 100)}
+ field = "Over-Run Target Voltage", alternator_overrv, {alternator_opt_mode > 1}
+
+ dialog = alt_settings, ""
+ panel = alt_settings_t
+ panel = alt_pidorload
+ panel = alt_settings_b
+
+ dialog = alt_outcurve, "", card
+ panel = alternator_outfreq, Center, {alternator_opt_mode == 2}
+ panel = alternator_outduty, Center, {alternator_opt_mode == 3}
+ panel = alternator_linearise, Center, {alternator_opt_mode == 4}
+
+ dialog = alt_curves, "", yAxis
+ panel = alternator_tempcurve, North, {alternator_opt_mode && alternator_tempin}
+ panel = alt_outcurve
+
+ dialog = alternator, "Alternator Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#altctl"
+ panel = alt_settings, West
+ panel = alt_curves, Center
+
+ dialog = eaecombi1top, "", xAxis
+ panel = EAEBSOCcurve
+ panel = EAEBAWCcurve
+
+ dialog = eaecombi1bot, "", yAxis
+ liveGraph = eaeGraph, "AE Graph", North
+ graphLine = EAEFuelCorr1
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+
+ dialog = EAEcombi1, "EAE Sucked/Adhered Coefficients", border
+ panel = eaecombi1top, Center
+ panel = eaecombi1bot, South
+
+ dialog = ms3_pe_t, ""
+ field = "Do not try to enable an output port that is already in use for another function."
+
+ dialog = ms3_port_edit_wrap, "", yAxis
+ panel = ms3_port_edit, North
+ panel = ms3_pe_t
+
+ dialog = fuelpump_set, ""
+ field = "Fuel Pump Mode", fp_opt_mode
+ field = "Control Interval", fp_ctl_ms
+ field = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ field = "Output Frequency", fp_freq, {fp_opt_mode}
+ field = "Fuel Pump Output Polarity", fp_opt_inv, {fp_opt_mode}
+ field = "Pressure Regulation/Correction", fp_opt_reg, {fp_opt_mode == 0}
+ field = "'Fixed' automatically adjusts fuel PW."
+ field = "Static/Target Rail Differential Pressure", rail_pressure_psig
+ field = "Static/Target Rail Differential Pressure", rail_pressure_kpag
+ field = "Priming Duty", fp_prime_duty, {fp_opt_mode}
+ field = "Off Duty", fp_off_duty, {fp_opt_mode}
+ field = "Minimum Duty", fp_min_duty, {fp_opt_mode}
+ field = "Maximum Duty", fp_max_duty, {fp_opt_mode}
+ field = "Pressure Sensor Input (kPa)", fp_press_in
+ field = "Sensor Type", fp_press_type, {fp_press_in}
+ field = "Temperature Sensor Input", fueltemp1
+ field = "Temperature Correction", fueltemp1_corr, {fueltemp1}
+ field = "Closed-Loop PID settings"
+ field = "Proportional Gain", fp_Kp, {fp_opt_mode == 2}
+ field = "Integral Gain", fp_Ki, {fp_opt_mode == 2}
+ field = "Derivative Gain", fp_Kd, {fp_opt_mode == 2}
+
+ dialog = fuelpump, "Fuel Pump and Pressure Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpump"
+ panel = fuelpump_set, West
+ panel = fp_dutyTbl, Center, {fp_opt_mode == 1}
+
+ dialog = boostvss_curve, "", card
+ panel = boostvss_duty_curve, Center, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) && ((boost_vss == 1) || (boost_vss == 2))}
+ panel = boostvss_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl)&& ((boost_vss == 1) || (boost_vss == 2))}
+
+ dialog = pwmidle_crank_dutyorsteps_curve, "", card
+ panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
+ panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3}
+
+ dialog = pwmidle_cl_initialvalues, "", card
+ panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 2) }
+ panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) }
+
+ dialog = idlebins, "", card
+ panel = iacBins, Center, { IdleCtl == 3 }
+ panel = ipwBins, Center, { IdleCtl == 2 }
+
+ dialog = tcslip_set, "", yAxis
+ field = "0-5V knob Input", tc_knob
+
+ dialog = tcslip_menu, "Traction Control - External Slip% Input", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionslip"
+ panel = tc_slip_curve
+ panel = tcslip_set
+
+ dialog = blend1_set, "", yAxis
+ field = "X Axis Parameter", blend_opt1
+ field = "%VE2. 0% = Fully VE1. 100% = Fully VE2."
+ dialog = blend1menu, "Blend Curve (1)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend1"
+ panel = blend1_curve
+ panel = blend1_set
+
+ dialog = blend2_set
+ field = "X Axis Parameter", blend_opt2
+ field = "%Spk2. 0% = Fully Spk1. 100% = Fully Spk2."
+ dialog = blend2menu, "Blend Curve (2)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend2"
+ panel = blend2_curve
+ panel = blend2_set
+
+ dialog = blend3_set
+ field = "X Axis Parameter", blend_opt3
+ field = "%VE3/4. 0% = Fully VE1/2. 100% = Fully VE3/4."
+ dialog = blend3menu, "Blend Curve (3)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend3"
+ panel = blend3_curve
+ panel = blend3_set
+
+ dialog = blend4_set
+ field = "X Axis Parameter", blend_opt4
+ field = "%Spk3/4. 0% = Fully Spk1/2. 100% = Fully Spk3/4."
+ dialog = blend4menu, "Blend Curve (4)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend4"
+ panel = blend4_curve
+ panel = blend4_set
+
+ dialog = blend5_set
+ field = "X Axis Parameter", blend_opt5
+ field = "%AFR2. 0% = Fully AFR1. 100% = Fully AFR2."
+ dialog = blend5menu, "Blend Curve (5)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend5"
+ panel = blend5_curve
+ panel = blend5_set
+
+ dialog = blend6_set
+ field = "X Axis Parameter", blend_opt6
+ field = "%Boost2. 0% = Fully Boost1. 100% = Fully Boost2."
+ dialog = blend6menu, "Blend Curve (6)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend6"
+ panel = blend6_curve
+ panel = blend6_set
+
+ dialog = blend7_set
+ field = "X Axis Parameter", blend_opt7
+ field = "%Crank%2. 0% = Fully Cranking curve1. 100% = Fully Cranking curve2."
+ dialog = blend7menu, "Blend Curve (7)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend7_curve
+ panel = blend7_set
+
+ dialog = blend8_set
+ field = "Flex blend%. 0% = Fully Tables1. 100% = Fully Tables2."
+ dialog = blend8menu, "Blend Curve (8)", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#blend7"
+ panel = blend8_curve
+ panel = blend8_set
+
+ dialog = airden_words
+ field = "This curve is the whole air density correction exposed in full."
+ field = "It is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot."
+ field = "Firmwares 1.1.x and earlier used an embedded curve and a correction curve on top."
+
+ dialog = manifoldTempCorr2, "MAT Air Density Table"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matairden"
+ panel = airden_words
+ panel = airdenCorr
+
+ dialog = checkengine_l, "Sensor Validation"
+ field = "Sensor Checking", cel_opt_on
+ field = "Light Output", cel_port, {cel_opt_on}
+ field = "CEL Solid/Flash Codes", cel_opt_flash, {cel_opt_on}
+ field = "Light When Not Running", cel_opt_when, {cel_opt_on && cel_port}
+ field = "Ignore Fluctuations For First", cel_runtime, {cel_opt_on}
+ field = "#MAP Sensor Check", cel_opt2_map, {cel_opt_on}
+ field = "Minimum ADC", map_minadc, {cel_opt_on}
+ field = "Maximum ADC", map_maxadc, {cel_opt_on}
+ field = "Minimum Fluctuation", map_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", map_var_upper, {cel_opt_on}
+ field = "#MAT Sensor Check", cel_opt2_mat, {cel_opt_on}
+ field = "Minimum ADC", mat_minadc, {cel_opt_on}
+ field = "Maximum ADC", mat_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", mat_var_upper, {cel_opt_on}
+ field = "#CLT Sensor Check", cel_opt2_clt, {cel_opt_on}
+ field = "Minimum ADC", clt_minadc, {cel_opt_on}
+ field = "Maximum ADC", clt_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", clt_var_upper, {cel_opt_on}
+ field = "#TPS Check", cel_opt2_tps, {cel_opt_on}
+ field = "Minimum ADC", tps_minadc, {cel_opt_on}
+ field = "Maximum ADC", tps_maxadc, {cel_opt_on}
+ field = "Maximum Fluctuation", tps_var_upper, {cel_opt_on}
+
+ dialog = checkengine_r, ""
+ field = "#Battery Check", cel_opt2_batt, {cel_opt_on}
+ field = "Minimum Voltage", batt_minv, {cel_opt_on}
+ field = "Maximum Voltage", batt_maxv, {cel_opt_on}
+ field = "Maximum Fluctuation", batt_var_upper, {cel_opt_on}
+ field = "#EGO1 Sensor Check", cel_opt2_afr0, {cel_opt_on}
+ field = "Minimum AFR", afr_min, {cel_opt_on}
+ field = "Maximum AFR", afr_max, {cel_opt_on}
+ field = "Minimum Fluctuation", afr_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", afr_var_upper, {cel_opt_on}
+ field = "#Sync-Loss Check", cel_opt2_sync, {cel_opt_on}
+ field = "No. Sync Losses Allowed", cel_synctol, {cel_opt_on}
+ field = "#EGT Sensor Check", cel_opt2_egt, {cel_opt_on}
+ field = "Minimum EGT", egt_minvalid, {cel_opt_on}
+ field = "Maximum EGT", egt_maxvalid, {cel_opt_on}
+ field = "Minimum Fluctuation", egt_var_lower, {cel_opt_on}
+ field = "Maximum Fluctuation", egt_var_upper, {cel_opt_on}
+ field = "#Flex Sensor Check", cel_opt3_flex, {cel_opt_on && flexFuel}
+ field = "AFR safety, oil pressure set CEL."
+ field = ""
+ field = "status5 Input", cel_opt_stat, {cel_opt_on}
+ field = "status5 Shows", cel_opt_adc, {cel_opt_on && cel_opt_stat}
+
+ dialog = limpmode, "Limp Mode"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#limp"
+ field = "MAP Triggers Limp Mode", cel_action1_map, {cel_opt_on && cel_opt2_map}
+ field = "Use Fallback MAP Table", cel_action1_map_an, {cel_opt_on && cel_opt2_map && cel_action1_map}
+ field = "MAT Triggers Limp Mode", cel_action1_mat, {cel_opt_on && cel_opt2_mat}
+ field = "Fallback MAT", cel_mat_default, {cel_opt_on && cel_opt2_mat && cel_action1_mat}
+ field = "CLT Triggers Limp Mode", cel_action1_clt, {cel_opt_on && cel_opt2_clt}
+ field = "Fallback Cold CLT", cel_clt_cold, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Fallback Warmed Up CLT", cel_clt_warm, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "Time To Warmup Engine", cel_warmtime, {cel_opt_on && cel_opt2_clt && cel_action1_clt}
+ field = "TPS Triggers Limp Mode", cel_action1_tps, {cel_opt_on && cel_opt2_tps}
+ field = "TPS-accel is disabled in fault conditions"
+ field = "Batt Triggers Limp Mode", cel_action1_batt, {cel_opt_on && cel_opt2_batt}
+ field = "EGO Triggers Limp Mode", cel_action1_ego, {cel_opt_on && cel_opt2_afr0}
+ field = "Flex Triggers Limp Mode", cel_action2_flex, {cel_opt_on && cel_opt3_flex}
+ field = "EGT Triggers Limp Mode", cel_action2_egt, {cel_opt_on && cel_opt2_egt}
+ field = "The following apply in limp mode:"
+ field = "Limp Rev Limit", cel_revlim
+ field = "Limp Boost Limit", cel_overboost
+ field = "Limp Boost Valve Duty", cel_boost_duty
+ field = "Limp Boost Valve2 Duty", cel_boost_duty2
+ field = "Limp Retard Timing By", cel_retard
+
+ dialog = checkengine, "Check Engine Light", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#cel"
+ panel = checkengine_l
+ panel = checkengine_r
+
+ dialog = limitsettings, "Gauge and Settings Limits"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gaugeset"
+ field = "These are the limits for gauges and tuning settings,"
+ field = "so that curves and tables are more appropriately scaled."
+ field = "Adjust to suit your engine."
+ field = "They do not directly alter engine behaviour."
+ field = "RPM - Max Display", rpmhigh
+ field = "RPM - Warn level", rpmwarn
+ field = "RPM - Danger level", rpmdang
+ field = "Load/kPa - Max", loadhigh
+ field = "VE Value - Max", vehigh
+ field = "Allow WUE Below 100% (only for LPG)", wue_lpg
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+ field = "Air-Cooled Expanded CLT Range", clt_exp
+
+; list of features and what pins they use
+ dialog = iopinlist1, ".", yAxis
+ displayOnlyField = "Main Fuel Outputs", hardware_fuel
+ displayOnlyField = "Injector Out I, Injector Out J", hardware_fuel, {hardware_fuel== 0}
+ displayOnlyField = "Injector Out A, Injector Out B etc.", hardware_fuel, {hardware_fuel}
+ displayOnlyField = "Spark Hardware In Use", hardware_spk
+ displayOnlyField = "Spark Out A, Spark Out B etc.", hardware_spk, {hardware_spk}
+ displayOnlyField = "Cam Input (If Used)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ displayOnlyField = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+
+ displayOnlyField = "Programmable On/Off Output: Stepper Out 2", psEnabled[3], {psEnabled[3]}
+ displayOnlyField = "Programmable On/Off Output: Stepper Out 1", psEnabled[4], {psEnabled[4]}
+ displayOnlyField = "Programmable On/Off Output: PWM Out 2", psEnabled[6], {psEnabled[6]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 3", psEnabled[7], {psEnabled[7]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 1", psEnabled[8], {psEnabled[8]}
+ displayOnlyField = "Programmable On/Off Output: High Current Out 2", psEnabled[9], {psEnabled[9]}
+ displayOnlyField = "Programmable On/Off Output: PWM Out 3", psEnabled[10], {psEnabled[10]}
+ displayOnlyField = "Programmable On/Off Output: PWM / Idle Out 1", psEnabled[11], {psEnabled[11]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out I", psEnabled[12], {psEnabled[12]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out J", psEnabled[13], {psEnabled[13]}
+ displayOnlyField = "Programmable On/Off Output: Digital Frequency In 2", psEnabled[14], {psEnabled[14]}
+ displayOnlyField = "Programmable On/Off Output: Tach Out", psEnabled[15], {psEnabled[15]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out A", psEnabled[16], {psEnabled[16]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out B", psEnabled[17], {psEnabled[17]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out C", psEnabled[18], {psEnabled[18]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out D", psEnabled[19], {psEnabled[19]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out E", psEnabled[20], {psEnabled[20]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out F", psEnabled[21], {psEnabled[21]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out G", psEnabled[22], {psEnabled[22]}
+ displayOnlyField = "Programmable On/Off Output: Injector Out H", psEnabled[23], {psEnabled[23]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out A", psEnabled[24], {psEnabled[24]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out B", psEnabled[25], {psEnabled[25]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out C", psEnabled[26], {psEnabled[26]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out D", psEnabled[27], {psEnabled[27]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out E", psEnabled[28], {psEnabled[28]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out F", psEnabled[29], {psEnabled[29]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out G", psEnabled[30], {psEnabled[30]}
+ displayOnlyField = "Programmable On/Off Output: Spark Out H", psEnabled[31], {psEnabled[31]}
+
+ displayOnlyField = "Programmable On/Off Output: CANout01", psEnabled[32], {psEnabled[32]}
+ displayOnlyField = "Programmable On/Off Output: CANout02", psEnabled[33], {psEnabled[33]}
+ displayOnlyField = "Programmable On/Off Output: CANout03", psEnabled[34], {psEnabled[34]}
+ displayOnlyField = "Programmable On/Off Output: CANout04", psEnabled[35], {psEnabled[35]}
+ displayOnlyField = "Programmable On/Off Output: CANout05", psEnabled[36], {psEnabled[36]}
+ displayOnlyField = "Programmable On/Off Output: CANout06", psEnabled[37], {psEnabled[37]}
+ displayOnlyField = "Programmable On/Off Output: CANout07", psEnabled[38], {psEnabled[38]}
+ displayOnlyField = "Programmable On/Off Output: CANout08", psEnabled[39], {psEnabled[39]}
+ displayOnlyField = "Programmable On/Off Output: CANout09", psEnabled[40], {psEnabled[40]}
+ displayOnlyField = "Programmable On/Off Output: CANout10", psEnabled[41], {psEnabled[41]}
+ displayOnlyField = "Programmable On/Off Output: CANout11", psEnabled[42], {psEnabled[42]}
+ displayOnlyField = "Programmable On/Off Output: CANout12", psEnabled[43], {psEnabled[43]}
+ displayOnlyField = "Programmable On/Off Output: CANout13", psEnabled[44], {psEnabled[44]}
+ displayOnlyField = "Programmable On/Off Output: CANout14", psEnabled[45], {psEnabled[45]}
+ displayOnlyField = "Programmable On/Off Output: CANout15", psEnabled[46], {psEnabled[46]}
+ displayOnlyField = "Programmable On/Off Output: CANout16", psEnabled[47], {psEnabled[47]}
+ displayOnlyField = "Programmable On/Off Output: Loop 1", psEnabled[48], {psEnabled[48]}
+ displayOnlyField = "Programmable On/Off Output: Loop 2", psEnabled[49], {psEnabled[49]}
+ displayOnlyField = "Programmable On/Off Output: Loop 3", psEnabled[50], {psEnabled[50]}
+
+ displayOnlyField = "EGO 1 Port", egoport1
+ displayOnlyField = "EGO 2 Port", egoport2, {egonum > 1}
+ displayOnlyField = "EGO 3 Port", egoport3, {egonum > 2}
+ displayOnlyField = "EGO 4 Port", egoport4, {egonum > 3}
+ displayOnlyField = "EGO 5 Port", egoport5, {egonum > 4}
+ displayOnlyField = "EGO 6 Port", egoport6, {egonum > 5}
+ displayOnlyField = "EGO 7 Port", egoport7, {egonum > 6}
+ displayOnlyField = "EGO 8 Port", egoport8, {egonum > 7}
+ displayOnlyField = "EGO 9 Port", egoport9, {egonum > 8}
+ displayOnlyField = "EGO 10 Port", egoport10, {egonum > 9}
+ displayOnlyField = "EGO 11 Port", egoport11, {egonum > 10}
+ displayOnlyField = "EGO 12 Port", egoport12, {egonum > 11}
+ displayOnlyField = "Generic Sensor 01 Input", sensor01_source, {sensor01_source}
+ displayOnlyField = "Generic Sensor 02 Input", sensor02_source, {sensor02_source}
+ displayOnlyField = "Generic Sensor 03 Input", sensor03_source, {sensor03_source}
+ displayOnlyField = "Generic Sensor 04 Input", sensor04_source, {sensor04_source}
+ displayOnlyField = "Generic Sensor 05 Input", sensor05_source, {sensor05_source}
+ displayOnlyField = "Generic Sensor 06 Input", sensor06_source, {sensor06_source}
+ displayOnlyField = "Generic Sensor 07 Input", sensor07_source, {sensor07_source}
+ displayOnlyField = "Generic Sensor 08 Input", sensor08_source, {sensor08_source}
+ displayOnlyField = "Generic Sensor 09 Input", sensor09_source, {sensor09_source}
+ displayOnlyField = "Generic Sensor 10 Input", sensor10_source, {sensor10_source}
+ displayOnlyField = "Generic Sensor 11 Input", sensor11_source, {sensor11_source}
+ displayOnlyField = "Generic Sensor 12 Input", sensor12_source, {sensor12_source}
+ displayOnlyField = "Generic Sensor 13 Input", sensor13_source, {sensor13_source}
+ displayOnlyField = "Generic Sensor 14 Input", sensor14_source, {sensor14_source}
+ displayOnlyField = "Generic Sensor 15 Input", sensor15_source, {sensor15_source}
+ displayOnlyField = "Generic Sensor 16 Input", sensor16_source, {sensor16_source}
+ displayOnlyField = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ displayOnlyField = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ displayOnlyField = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ displayOnlyField = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ displayOnlyField = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ displayOnlyField = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ displayOnlyField = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ displayOnlyField = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ displayOnlyField = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ displayOnlyField = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ displayOnlyField = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ displayOnlyField = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ displayOnlyField = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ displayOnlyField = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ displayOnlyField = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ displayOnlyField = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+ displayOnlyField = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+
+ dialog = iopinlist2, ".", yAxis
+ displayOnlyField = "PWM Idle Output", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ displayOnlyField = "PWM Idle 3 Wire Mode", pwmidle_freq_pin3, { (IdleCtl == 2) && pwmidle_freq_pin3 }
+ displayOnlyField = "Fan Control Output", fanctl_settings_pin, { fanctl_settings_on }
+ displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && ac_idleup_io_out }
+ displayOnlyField = "AC Idle-up Input", ac_idleup_io_in, { ac_idleup_settings }
+ displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ displayOnlyField = "MAP Voltage Input", mapport, {mapport_t == 0}
+ displayOnlyField = "MAP Frequency Input", mapport_f, {mapport_t == 1}
+ displayOnlyField = "MAP 2nd Port", map2port, {(mapport_t == 0) && (mapport != 7) && map2port}
+ displayOnlyField = "MAF Voltage Input", MAFOption, {(MAFOption_t == 0)}
+ displayOnlyField = "MAF Frequency Input", MAFOption_f, {(MAFOption_t == 1)}
+ displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
+ displayOnlyField = "Flex Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
+ displayOnlyField = "VVT1 Output", vvt_out1, {vvt_opt1_on}
+ displayOnlyField = "VVT2 Output", vvt_out2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Output", vvt_out3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Output", vvt_out4, {vvt_opt1_on > 3}
+ displayOnlyField = "VVT1 Output (complementary)", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT2 Output (complementary)", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT3 Output (complementary)", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT4 Output (complementary)", vvt_softout4, {(vvt_opt1_on > 3) && (vvt_opt4_decode == 2)}
+ displayOnlyField = "VVT1 Input", vvt_opt3_cam1, {0}
+ displayOnlyField = "VVT2 Input", vvt_opt3_cam2, {vvt_opt1_on > 1}
+ displayOnlyField = "VVT3 Input", vvt_opt3_cam3, {vvt_opt1_on > 2}
+ displayOnlyField = "VVT4 Input", vvt_opt3_cam4, {vvt_opt1_on > 3}
+ displayOnlyField = "Fuel Table Switching Input", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ displayOnlyField = "Spark Table Switching Input", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ displayOnlyField = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ displayOnlyField = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ displayOnlyField = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ displayOnlyField = "Dual Fuel Input", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ displayOnlyField = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ displayOnlyField = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ displayOnlyField = "Boost Control Output (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control Output (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Boost Control2 Output (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ displayOnlyField = "Boost Control2 Output (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ displayOnlyField = "Gen PWM A Output", pwm_opt2_a, {pwm_opt_on_a}
+ displayOnlyField = "Gen PWM B Output", pwm_opt2_b, {pwm_opt_on_b}
+ displayOnlyField = "Gen PWM C Output", pwm_opt2_c, {pwm_opt_on_c}
+ displayOnlyField = "Gen PWM D Output", pwm_opt2_d, {pwm_opt_on_d}
+ displayOnlyField = "Gen PWM E Output", pwm_opt2_e, {pwm_opt_on_e}
+ displayOnlyField = "Gen PWM F Output", pwm_opt2_f, {pwm_opt_on_f}
+ displayOnlyField = "Generic Closed-Loop A Output", generic_pid_pwm_outs_a, {generic_pid_flags_a_on}
+ displayOnlyField = "Generic Closed-Loop B Output", generic_pid_pwm_outs_b, {generic_pid_flags_b_on}
+
+ displayOnlyField = "WI Pump Output", water_pins_pump, {water_freq_on}
+ displayOnlyField = "WI Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ displayOnlyField = "VSS1 Analogue sensor", vss1_an, {vss_opt0_1 == 2}
+ displayOnlyField = "VSS1 Digi Input", vss_opt1, {vss_opt0_1 == 1}
+ displayOnlyField = "VSS1 CAN PWM Port", vss1_pwmseq, {vss_opt1 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "VSS2 Analogue Sensor", vss2_an, {vss_opt0_2 == 2}
+ displayOnlyField = "VSS2 Digi Input", vss_opt2, {vss_opt0_2 == 1}
+ displayOnlyField = "VSS2 CAN PWM Port", vss2_pwmseq, {vss_opt2 ==15 && (vss_opt0_1 == 1)}
+ displayOnlyField = "Shaft Sensor 1", ss_opt1, {ss_opt1}
+ displayOnlyField = "Shaft Sensor 2", ss_opt2, {ss_opt2}
+ displayOnlyField = "VSS Output", vssout_opt, {vssout_opt}
+ displayOnlyField = "Gear Pos. Input", gear_port_an, { (gear_method == 2) }
+ displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
+ displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
+ displayOnlyField = "Accelerometer X Input", accXport, {accXport}
+ displayOnlyField = "Accelerometer Y Input", accYport, {accYport}
+ displayOnlyField = "Accelerometer Z Input", accZport, {accZport}
+ displayOnlyField = "SDcard Datalog button", log_style2_but, {log_style_on2 == 2}
+ displayOnlyField = "SDcard LED indicator", log_style_led, {log_style_on2}
+ displayOnlyField = "SDcard Stream Input", log_style3_adc, {log_style_block == 1}
+ displayOnlyField = "SDcard trigger output", sdpulse_out, {log_style_on2 >= 2}
+ displayOnlyField = "Nitrous Stage 1 output - nitrous", n2o1n_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 1 output - fuel", n2o1f_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Enable input on:", N2Oopt_pins, { N2Oopt_2 }
+ displayOnlyField = "Nitrous Stage 2 output - nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "Nitrous Stage 2 output - fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ displayOnlyField = "AFR safety Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action }
+ displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
+ displayOnlyField = "Variable launch Input", launch_var_on, { launch_opt_on >0 }
+ displayOnlyField = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ displayOnlyField = "Anti-Lag Enable Input", als_in_pin, {als_in_pin}
+ displayOnlyField = "ALS On/off Output", als_out_pin, {als_in_pin}
+ displayOnlyField = "ALS PWM Output", als_opt_pwmout, {als_in_pin}
+ displayOnlyField = "ALS Output", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ displayOnlyField = "Traction Control Enable Input", tc_enin, {tc_opt_on}
+ displayOnlyField = "Traction Control Light output", tc_led_out, {tc_opt_on}
+ displayOnlyField = "Torque Convertor Lockup", tclu_outpin, {tclu_outpin}
+ displayOnlyField = "TCLU Enable Input", tclu_enablepin, {tclu_outpin}
+ displayOnlyField = "TCLU Brake switch", tclu_brakepin, {tclu_outpin}
+ displayOnlyField = "Staged Injection Relay Output 1", staged_out1, { staged_first_param }
+ displayOnlyField = "Staged Injection Relay Output 2", staged_out2, { staged_first_param }
+ displayOnlyField = "Alternator Control Output", alternator_controlout, {alternator_opt_mode}
+ displayOnlyField = "Alternator Warning Lamp Output", alternator_lampout, {alternator_opt_mode}
+ displayOnlyField = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)}
+ displayOnlyField = "Battery Current Monitor Input", alternator_freq_currin, {alternator_opt_mode}
+ displayOnlyField = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode}
+ displayOnlyField = "Fuel Pump Output", fp_out1, {fp_opt_mode}
+ displayOnlyField = "Primary Pressure Input", fp_press_in, {fp_press_in}
+ displayOnlyField = "Primary Fuel Temperature Input", fueltemp1, {fueltemp1}
+ displayOnlyField = "Secondary Fuel Pressure Input", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press}
+ displayOnlyField = "Secondary Fuel Temperature Input", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp}
+
+ dialog = iopinlist, "Feature List Showing I/O pins", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#iopins"
+ panel = iopinlist1, West
+ panel = iopinlist2, East
+
+; now list of pins and what features they are assigned to.
+ dialog = pinusage1, ".", yAxis
+ displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) }
+ displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) }
+ displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) }
+ displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) }
+ displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) }
+ displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) }
+ displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) }
+ displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) }
+
+ displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) }
+ displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) }
+ displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) }
+ displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) }
+ displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) }
+ displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) }
+ displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) }
+ displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) }
+
+
+ dialog = pinusage2, ".", yAxis
+ displayOnlyField = "Injector I", { bitStringValue( portLabels , portusage_t[1] ) }
+ displayOnlyField = "Injector J", { bitStringValue( portLabels , portusage_t[3] ) }
+ displayOnlyField = "Digital Switched in 1", { bitStringValue( portLabels , portusage_e[2] ) }
+
+ displayOnlyField = "Fuel Pump Relay", { bitStringValue( portLabels , portusage_e[4] ) }
+
+ displayOnlyField = "Digital Switched in 3", { bitStringValue( portLabels , portusage_h[6] ) }
+ displayOnlyField = "Digital Switched 12V in", { bitStringValue( portLabels , portusage_h[7] ) }
+
+ displayOnlyField = "IAC1", { bitStringValue( portLabels , portusage_j[0] ) }
+ displayOnlyField = "IAC2", { bitStringValue( portLabels , portusage_j[1] ) }
+
+ displayOnlyField = "Tacho Out", { bitStringValue( portLabels , portusage_k[0] ) }
+ displayOnlyField = "Digital Switched In 2", { bitStringValue( portLabels , portusage_k[2] ) }
+
+ displayOnlyField = "Hardware PWM A", { bitStringValue( portLabels , portusage_pwmscl[1] ) }
+ displayOnlyField = "Hardware PWM B", { bitStringValue( portLabels , portusage_pwmscl[3] ) }
+ displayOnlyField = "MAP In", { bitStringValue( portLabels , portusage_ad0l[0] ) }
+ displayOnlyField = "O2", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ field = ""
+ field = ""
+
+ dialog = pinusage3, ".", yAxis
+ displayOnlyField = "PWM Out 2", { bitStringValue( portLabels , portusage_p[2] ) }
+ displayOnlyField = "High Current Out 3", { bitStringValue( portLabels , portusage_p[3] ) }
+ displayOnlyField = "High Current Out 1", { bitStringValue( portLabels , portusage_p[4] ) }
+ displayOnlyField = "High Current Out 2", { bitStringValue( portLabels , portusage_p[5] ) }
+ displayOnlyField = "PWM Out 3", { bitStringValue( portLabels , portusage_p[6] ) }
+ displayOnlyField = "PWM Idle Out 1", { bitStringValue( portLabels , portusage_p[7] ) }
+
+; displayOnlyField = "Primary tach", { bitStringValue( portLabels , portusage_t[0] ) }
+ displayOnlyField = "Cam Input", { bitStringValue( portLabels , portusage_t[2] ) }
+
+ displayOnlyField = "Digital Frequency In 1", { bitStringValue( portLabels , portusage_t[4] ) }
+ displayOnlyField = "Digital Frequency In 2", { bitStringValue( portLabels , portusage_t[5] ) }
+ displayOnlyField = "Digital Frequency In 3", { bitStringValue( portLabels , portusage_t[6] ) }
+; displayOnlyField = "PT7", { bitStringValue( portLabels , portusage_t[7] ) }
+
+ displayOnlyField = "Analog in 3", { bitStringValue( portLabels , portusage_ad0h[3] ) }
+ displayOnlyField = "Analog in 1", { bitStringValue( portLabels , portusage_ad0h[4] ) }
+ displayOnlyField = "Analog in 2", { bitStringValue( portLabels , portusage_ad0h[5] ) }
+
+; displayOnlyField = "ADC1", { bitStringValue( portLabels , portusage_ad0l[1] ) }
+; displayOnlyField = "ADC2", { bitStringValue( portLabels , portusage_ad0l[2] ) }
+; displayOnlyField = "ADC3", { bitStringValue( portLabels , portusage_ad0l[3] ) }
+; displayOnlyField = "ADC4", { bitStringValue( portLabels , portusage_ad0l[4] ) }
+; displayOnlyField = "ADC5", { bitStringValue( portLabels , portusage_ad0l[5] ) }
+ field = ""
+ field = ""
+
+
+ dialog = pinusage4, ".", yAxis
+ displayOnlyField = "CANIN 1", { bitStringValue( portLabels , portusage_canin[0] ) }
+ displayOnlyField = "CANIN 2", { bitStringValue( portLabels , portusage_canin[1] ) }
+ displayOnlyField = "CANIN 3", { bitStringValue( portLabels , portusage_canin[2] ) }
+ displayOnlyField = "CANIN 4", { bitStringValue( portLabels , portusage_canin[3] ) }
+ displayOnlyField = "CANIN 5", { bitStringValue( portLabels , portusage_canin[4] ) }
+ displayOnlyField = "CANIN 6", { bitStringValue( portLabels , portusage_canin[5] ) }
+ displayOnlyField = "CANIN 7", { bitStringValue( portLabels , portusage_canin[6] ) }
+ displayOnlyField = "CANIN 8", { bitStringValue( portLabels , portusage_canin[7] ) }
+
+ displayOnlyField = "CANPWM 1", { bitStringValue( portLabels , portusage_canpwm[0] ) }
+ displayOnlyField = "CANPWM 2", { bitStringValue( portLabels , portusage_canpwm[1] ) }
+ displayOnlyField = "CANPWM 3", { bitStringValue( portLabels , portusage_canpwm[2] ) }
+ displayOnlyField = "CANPWM 4", { bitStringValue( portLabels , portusage_canpwm[3] ) }
+ displayOnlyField = "CANPWM 5", { bitStringValue( portLabels , portusage_canpwm[4] ) }
+ displayOnlyField = "CANPWM 6", { bitStringValue( portLabels , portusage_canpwm[5] ) }
+ displayOnlyField = "CANPWM 7", { bitStringValue( portLabels , portusage_canpwm[6] ) }
+ displayOnlyField = "CANPWM 8", { bitStringValue( portLabels , portusage_canpwm[7] ) }
+
+ dialog = pinusage5, ".", yAxis
+ displayOnlyField = "CANOUT 1", { bitStringValue( portLabels , portusage_canout[0] ) }
+ displayOnlyField = "CANOUT 2", { bitStringValue( portLabels , portusage_canout[1] ) }
+ displayOnlyField = "CANOUT 3", { bitStringValue( portLabels , portusage_canout[2] ) }
+ displayOnlyField = "CANOUT 4", { bitStringValue( portLabels , portusage_canout[3] ) }
+ displayOnlyField = "CANOUT 5", { bitStringValue( portLabels , portusage_canout[4] ) }
+ displayOnlyField = "CANOUT 6", { bitStringValue( portLabels , portusage_canout[5] ) }
+ displayOnlyField = "CANOUT 7", { bitStringValue( portLabels , portusage_canout[6] ) }
+ displayOnlyField = "CANOUT 8", { bitStringValue( portLabels , portusage_canout[7] ) }
+ displayOnlyField = "CANOUT 9", { bitStringValue( portLabels , portusage_canout[8] ) }
+ displayOnlyField = "CANOUT 10", { bitStringValue( portLabels , portusage_canout[9] ) }
+ displayOnlyField = "CANOUT 11", { bitStringValue( portLabels , portusage_canout[10] ) }
+ displayOnlyField = "CANOUT 12", { bitStringValue( portLabels , portusage_canout[11] ) }
+ displayOnlyField = "CANOUT 13", { bitStringValue( portLabels , portusage_canout[12] ) }
+ displayOnlyField = "CANOUT 14", { bitStringValue( portLabels , portusage_canout[13] ) }
+ displayOnlyField = "CANOUT 15", { bitStringValue( portLabels , portusage_canout[14] ) }
+ displayOnlyField = "CANOUT 16", { bitStringValue( portLabels , portusage_canout[15] ) }
+
+ dialog = pinusage6, ".", yAxis
+ displayOnlyField = "Loop 1", { bitStringValue( portLabels , portusage_loop[0] ) }
+ displayOnlyField = "Loop 2", { bitStringValue( portLabels , portusage_loop[1] ) }
+ displayOnlyField = "Loop 3", { bitStringValue( portLabels , portusage_loop[2] ) }
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pinusage7, ".", yAxis
+ displayOnlyField = "CANADC 1", { bitStringValue( portLabels , portusage_canadc[0] ) }
+ displayOnlyField = "CANADC 2", { bitStringValue( portLabels , portusage_canadc[1] ) }
+ displayOnlyField = "CANADC 3", { bitStringValue( portLabels , portusage_canadc[2] ) }
+ displayOnlyField = "CANADC 4", { bitStringValue( portLabels , portusage_canadc[3] ) }
+ displayOnlyField = "CANADC 5", { bitStringValue( portLabels , portusage_canadc[4] ) }
+ displayOnlyField = "CANADC 6", { bitStringValue( portLabels , portusage_canadc[5] ) }
+ displayOnlyField = "CANADC 7", { bitStringValue( portLabels , portusage_canadc[6] ) }
+ displayOnlyField = "CANADC 8", { bitStringValue( portLabels , portusage_canadc[7] ) }
+
+ dialog = pinusage8, ".", yAxis
+ displayOnlyField = "CANADC 9", { bitStringValue( portLabels , portusage_canadc[8] ) }
+ displayOnlyField = "CANADC 10", { bitStringValue( portLabels , portusage_canadc[9] ) }
+ displayOnlyField = "CANADC 11", { bitStringValue( portLabels , portusage_canadc[10] ) }
+ displayOnlyField = "CANADC 12", { bitStringValue( portLabels , portusage_canadc[11] ) }
+ displayOnlyField = "CANADC 13", { bitStringValue( portLabels , portusage_canadc[12] ) }
+ displayOnlyField = "CANADC 14", { bitStringValue( portLabels , portusage_canadc[13] ) }
+ displayOnlyField = "CANADC 15", { bitStringValue( portLabels , portusage_canadc[14] ) }
+ displayOnlyField = "CANADC 16", { bitStringValue( portLabels , portusage_canadc[15] ) }
+
+ dialog = pinusage9, ".", yAxis
+ displayOnlyField = "CANADC 17", { bitStringValue( portLabels , portusage_canadc[16] ) }
+ displayOnlyField = "CANADC 18", { bitStringValue( portLabels , portusage_canadc[17] ) }
+ displayOnlyField = "CANADC 19", { bitStringValue( portLabels , portusage_canadc[18] ) }
+ displayOnlyField = "CANADC 20", { bitStringValue( portLabels , portusage_canadc[19] ) }
+ displayOnlyField = "CANADC 21", { bitStringValue( portLabels , portusage_canadc[20] ) }
+ displayOnlyField = "CANADC 22", { bitStringValue( portLabels , portusage_canadc[21] ) }
+ displayOnlyField = "CANADC 23", { bitStringValue( portLabels , portusage_canadc[22] ) }
+ displayOnlyField = "CANADC 24", { bitStringValue( portLabels , portusage_canadc[23] ) }
+
+ dialog = pinusage, "I/O Pins List Showing Usage - only works when online", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusage"
+ panel = pinusage1, West
+ panel = pinusage2, Center
+ panel = pinusage3, East
+
+ dialog = pinusagem, "", xAxis
+ panel = pinusage4, West
+ panel = pinusage5, Center
+ panel = pinusage6, East
+
+ dialog = pinusageb, "", xAxis
+ panel = pinusage7, West
+ panel = pinusage8, Center
+ panel = pinusage9, East
+
+ dialog = pinusagecan, "Expansion I/O Pins List/Usage - only works when online", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#pinusagecan"
+ panel = pinusagem, North
+ panel = pinusageb, South
+
+ dialog = ase_note
+ field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
+
+ dialog = nestedasePct, "Afterstart Enrichment (ASE) - Percent Adder"
+ panel = asePct
+ panel = ase_note
+
+ dialog = nestedasePct2, "Afterstart Enrichment (ASE) - Percent Adder 2"
+ panel = asePct2
+ panel = ase_note
+
+ dialog = wc_note
+ field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)."
+
+ dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier"
+ panel = warmup_curve
+ panel = wc_note
+
+ dialog = nestedwarmup_curve2, "Warmup Enrichment (WUE) - Percent Multiplier 2"
+ panel = warmup_curve2
+ panel = wc_note
+
+ dialog = tcsettings, "Traction Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#traction"
+ field = "Traction Control", tc_opt_on
+ field = "Method", tc_opt_method, {tc_opt_on}
+ field = "Enable Input", tc_enin, {tc_opt_on}
+ field = "Light output", tc_led_out, {tc_opt_on}
+ field = "Minimum TPS", tc_mintps, {tc_opt_on}
+ field = "Minimum MAP", tc_minmap, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Minimum VSS", tc_minvss, {tc_opt_on && (tc_opt_method != 2) && (tc_opt_method != 3) }
+ field = "VSS1 = driven, VSS2 = undriven wheels"
+; field = "Maximum VSS", tc_maxvss, {tc_opt_on }
+ field = "Slip % Setting", tc_opt_slipcurve, {tc_opt_on && (tc_opt_method == 1)}
+ field = "Slip Threshold", tc_slipthresh, {tc_opt_on && (tc_opt_method == 1) && !tc_opt_slipcurve}
+ field = "Nitrous Control", tc_opt_n2o, {tc_opt_on }
+ field = "Add Fuel To:", tc_opt_bank, {tc_opt_on }
+ field = "When staging bank 1 = primary, bank 2 = secondary"
+
+ dialog = tc_top, "", xAxis
+ panel = tc_retard_curve, West
+ panel = tc_spkcut_curve, East, {spk_mode0 > 1}
+
+ dialog = tc_mid, "", xAxis
+ panel = tc_addfuel_curve, West
+ panel = tc_nitrous_curve, East, {N2Oopt_2}
+
+ dialog = tc_btm, "", xAxis
+
+ panel = tc_boost_curve, West, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ panel = tc_boost_duty_delta_curve, East, {boost_ctl_settings_on && (boost_ctl_settings_cl != 1)}
+
+ dialog = tc_curves, "Traction Control Reactions", yAxis
+ panel = tc_top, North
+ panel = tc_mid, Center
+ panel = tc_btm, South
+
+ dialog = tcluparams, "Torque Convertor Lockup"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tclu"
+ field = "Output Pin", tclu_outpin
+ field = "Enable Input", tclu_enablepin, {tclu_outpin}
+ field = "Brake Switch", tclu_brakepin, {tclu_outpin}
+ field = "Minimum TPS", tclu_tpsmin, {tclu_outpin}
+ field = "Maximum TPS", tclu_tpsmax, {tclu_outpin}
+ field = "Minimum MAP", tclu_mapmin, {tclu_outpin}
+ field = "Maximum MAP", tclu_mapmax, {tclu_outpin}
+ field = "Use VSS", tclu_opt_vss, {tclu_outpin}
+ field = "Minimum Speed", tclu_vssmin, {tclu_outpin && tclu_opt_vss}
+ field = "Use Gear Value", tclu_opt_gear, {tclu_outpin}
+ field = "Minimum Gear", tclu_gearmin, {tclu_outpin && tclu_opt_gear}
+ field = "Activation Delay", tclu_delay, {tclu_outpin}
+
+ dialog = vvtct, ""
+ field = "."
+ field = "Input"
+ field = "Polarity"
+ field = "No. Teeth"
+ field = "Output"
+ field = "Minimum"
+ field = "Maximum"
+ field = "Int./Exh."
+ field = "Tooth 1"
+ field = "Tooth 2"
+ field = "More Duty Means"
+ field = "Output (2)"
+
+ dialog = vvtc1, ""
+ field = "#CAM1"
+ field = "", vvt_opt3_cam1, {vvt_opt1_on}
+ field = "", vvt_opt2_cam1pol,{vvt_opt1_on && ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3) && (vvt_opt4_decode ==0 )}
+ field = "", vvt_tth1, {(vvt_opt1_on > 0) && (spk_mode0 == 4)}
+ field = "", vvt_out1, {vvt_opt1_on}
+ field = "", vvt_min_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_max_ang1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_cam1tth1, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam1tth2, {vvt_opt1_on && (vvt_opt4_decode == 1)}
+ field = "", vvt_out1_dir, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc2, ""
+ field = "#CAM2"
+ field = "", vvt_opt3_cam2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam2pol,{(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_tth2, {(vvt_opt1_on > 1) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_min_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_max_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt2, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_cam2tth1, {0}
+ field = "", vvt_cam2tth2, {0}
+ field = "", vvt_out2_dir, {(vvt_opt1_on > 1) && vvt_opt2_pid2}
+ field = "", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc3, ""
+ field = "#CAM3"
+ field = "", vvt_opt3_cam3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam3pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth3, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt3, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam3tth1, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_cam3tth2, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)}
+ field = "", vvt_out3_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtc4, ""
+ field = "#CAM4"
+ field = "", vvt_opt3_cam4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt2_cam4pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_tth4, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)}
+ field = "", vvt_out4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_min_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_max_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_opt5_vvt4, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_cam4tth1, {0}
+ field = "", vvt_cam4tth2, {0}
+ field = "", vvt_out4_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2}
+ field = "", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)}
+
+ dialog = vvtcams, "Cam Settings", xAxis
+ panel = vvtct
+ panel = vvtc1
+ panel = vvtc2
+ panel = vvtc3
+ panel = vvtc4
+
+ dialog = vvtinext, ""
+ field = "."
+ field = "Use Hold Duty"
+ field = "Hold/Neutral Duty"
+ field = "Proportional Gain"
+ field = "Integral Gain"
+ field = "Differential Gain"
+ field = "Table is Advance/Retard"
+
+ dialog = vvtinexi, ""
+ field = "#Intake"
+ field = "", vvt_opt2_use_hold_intake, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_hold_duty, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt2_use_hold_intake}
+ field = "", vvt_ctl_Kp, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Ki, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "", vvt_ctl_Kd, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Advance"
+
+ dialog = vvtinexe, ""
+ field = "#Exhaust"
+ field = "", vvt_opt2_use_hold_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_hold_duty_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) && vvt_opt2_use_hold_exhaust }
+ field = "", vvt_ctl_Kp_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Ki_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_ctl_Kd_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+ field = "", vvt_opt1_dir_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) }
+
+ dialog = vvtinex, "PID Parameters", xAxis
+ panel = vvtinext
+ panel = vvtinexi
+ panel = vvtinexe
+
+ dialog = vvt_test, "Test", xAxis
+ field = "Cam", vvt_opt1_tst, {vvt_opt1_on}
+ field = "Duty", vvt_test_duty, {vvt_opt1_on && vvt_opt1_tst}
+
+ dialog = vvtl, ""
+ field = "No. VVTs", vvt_opt1_on
+ field = "Cam Decoder", vvt_opt4_decode,{vvt_opt1_on && (spk_mode0 == 4)}
+ field = "Frequency", vvt_opt6_freq, {vvt_opt1_on && vvt_out1}
+ field = "On/off or Variable (PID)", vvt_opt2_pid2, {vvt_opt1_on}
+ field = "Adjust Inj. Timing Based On", vvt_opt5_add1, {vvt_opt1_on}
+ field = "Commanded vs. Actual", vvt_opt5_add2, {vvt_opt1_on && vvt_opt5_add1}
+ field = "Inj. Timing Adjustment", vvt_onoff_ang, {vvt_opt1_on && !vvt_opt2_pid2 && vvt_opt5_add1}
+ field = "Load Y Axis In Tables", vvt_opt7_yaxis, {vvt_opt1_on}
+ field = "Minimum CLT", vvt_minclt, {vvt_opt1_on}
+ field = "VVT Maximum Slew", vvt_slew, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvt_test
+
+ dialog = vvtr, ""
+ field = "Control Interval", vvt_opt1_int, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Control Interval Time", vvt_ctl_ms, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt1_int}
+ field = "Range Check Measured Angles", vvt_opt5_err, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Tooth filter", vvt_opt1_filter, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Minimum VVT Duty", vvt_minduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ field = "Maximum VVT Duty", vvt_maxduty1, {vvt_opt1_on && vvt_opt2_pid2}
+ panel = vvtinex
+
+ dialog = vvtparams2, "VVT Settings", xAxis
+ panel = vvtl
+ panel = vvtr
+
+ dialog = vvtparams, "VVT Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvt"
+ panel = vvtparams2
+ panel = vvtcams
+
+ dialog = spk_trimaTblTitle, "Cyl #1"
+ panel = spk_trimaTbl
+ dialog = spk_trimbTblTitle, "Cyl #2"
+ panel = spk_trimbTbl
+ dialog = spk_trimcTblTitle, "Cyl #3"
+ panel = spk_trimcTbl
+ dialog = spk_trimdTblTitle, "Cyl #4"
+ panel = spk_trimdTbl
+
+ dialog = spk_trimadt, "", xAxis
+ panel = spk_trimaTblTitle
+ panel = spk_trimbTblTitle
+ dialog = spk_trimadb, "", xAxis
+ panel = spk_trimcTblTitle
+ panel = spk_trimdTblTitle
+
+ dialog = spk_trimad,"Spark Cyl 1-4 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimadt
+ panel = spk_trimadb
+
+ dialog = spk_trimeTblTitle, "Cyl #5"
+ panel = spk_trimeTbl
+ dialog = spk_trimfTblTitle, "Cyl #6"
+ panel = spk_trimfTbl
+ dialog = spk_trimgTblTitle, "Cyl #7"
+ panel = spk_trimgTbl
+ dialog = spk_trimhTblTitle, "Cyl #8"
+ panel = spk_trimhTbl
+
+ dialog = spk_trimeht, "", xAxis
+ panel = spk_trimeTblTitle
+ panel = spk_trimfTblTitle
+ dialog = spk_trimehb, "", xAxis
+ panel = spk_trimgTblTitle
+ panel = spk_trimhTblTitle
+
+ dialog = spk_trimeh,"Spark Cyl 5-8 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimeht
+ panel = spk_trimehb
+
+ dialog = spk_trimiTblTitle, "Cyl #9"
+ panel = spk_trimiTbl
+ dialog = spk_trimjTblTitle, "Cyl #10"
+ panel = spk_trimjTbl
+ dialog = spk_trimkTblTitle, "Cyl #11"
+ panel = spk_trimkTbl
+ dialog = spk_trimlTblTitle, "Cyl #12"
+ panel = spk_trimlTbl
+
+ dialog = spk_trimilt, "", xAxis
+ panel = spk_trimiTblTitle
+ panel = spk_trimjTblTitle
+
+ dialog = spk_trimilb, "", xAxis
+ panel = spk_trimkTblTitle
+ panel = spk_trimlTblTitle
+
+ dialog = spk_trimil,"Spark Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#spktrim1-4"
+ panel = spk_trimilt
+ panel = spk_trimilb
+
+
+
+
+ dialog = inj_trimaTblTitle, "Cyl #1"
+ panel = inj_trimaTbl, Center
+ dialog = inj_trimbTblTitle, "Cyl #2"
+ panel = inj_trimbTbl
+ dialog = inj_trimcTblTitle, "Cyl #3"
+ panel = inj_trimcTbl
+ dialog = inj_trimdTblTitle, "Cyl #4"
+ panel = inj_trimdTbl
+
+ dialog = inj_trimadt, "", xAxis
+ panel = inj_trimaTblTitle
+ panel = inj_trimbTblTitle
+ dialog = inj_trimadb, "", xAxis
+ panel = inj_trimcTblTitle
+ panel = inj_trimdTblTitle
+
+ dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimadt
+ panel = inj_trimadb
+
+ dialog = inj_trimeTblTitle, "Cyl #5"
+ panel = inj_trimeTbl, Center
+ dialog = inj_trimfTblTitle, "Cyl #6"
+ panel = inj_trimfTbl
+ dialog = inj_trimgTblTitle, "Cyl #7"
+ panel = inj_trimgTbl
+ dialog = inj_trimhTblTitle, "Cyl #8"
+ panel = inj_trimhTbl
+
+ dialog = inj_trimeht, "", xAxis
+ panel = inj_trimeTblTitle
+ panel = inj_trimfTblTitle
+ dialog = inj_trimehb, "", xAxis
+ panel = inj_trimgTblTitle
+ panel = inj_trimhTblTitle
+
+ dialog = inj_trimeh,"Injector Cyl 5-7 Trims", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimeht
+ panel = inj_trimehb
+
+ dialog = inj_trimiTblTitle, "Cyl #9"
+ panel = inj_trimiTbl
+ dialog = inj_trimjTblTitle, "Cyl #10"
+ panel = inj_trimjTbl
+ dialog = inj_trimkTblTitle, "Cyl #11"
+ panel = inj_trimkTbl
+ dialog = inj_trimlTblTitle, "Cyl #12"
+ panel = inj_trimlTbl
+
+ dialog = inj_trimilt, "", xAxis
+ panel = inj_trimiTblTitle
+ panel = inj_trimjTblTitle
+ dialog = inj_trimilb, "", xAxis
+ panel = inj_trimkTblTitle
+ panel = inj_trimlTblTitle
+
+ dialog = inj_trimil,"Injector Cyl 9-12 Trims"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1-4"
+ panel = inj_trimilt
+ panel = inj_trimilb
+
+
+
+
+ dialog = antilag, "Turbo Anti-Lag (ALS)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#als"
+ field = "#Caution! Anti-lag is very hard on your turbo"
+ field = "# and engine. Use at your risk."
+ field = "Anti-lag Enable Input", als_in_pin
+; field = "Minimum TPS", als_mintps, {als_in_pin}
+ field = "Maximum TPS", als_maxtps, {als_in_pin}
+ field = "Minimum RPM", als_minrpm, {als_in_pin}
+ field = "Maximum RPM", als_maxrpm, {als_in_pin}
+ field = "Maximum MAT", als_maxmat, {als_in_pin}
+ field = "Maximum ALS time", als_maxtime, {als_in_pin}
+ field = "Time Between Activations", als_pausetime,{als_in_pin}
+ field = "Minimum CLT", als_minclt, {als_in_pin}
+ field = "Maximum CLT", als_maxclt, {als_in_pin}
+ field = "Enable Cyclic Fuel Cut", als_opt_fc, {als_in_pin && hardware_fuel && sequential}
+ field = "Fuel cut likely unsafe with Staging"
+ field = "Enable Cyclic Spark Cut", als_opt_sc, {als_in_pin}
+ field = "-"
+ field = "Enable Roving Idle Fuel Cut", als_opt_ri, {als_in_pin}
+ field = "-"
+ field = "Use Idle Valve", als_opt_idle, {als_in_pin}
+ field = "Idle Valve Duty", als_iac_duty, { als_in_pin && als_opt_idle && (IdleCtl == 2) }
+ field = "Idle Valve Steps", als_iac_steps, { als_in_pin && als_opt_idle && (IdleCtl == 3)}
+ field = "-"
+ field = "On/off Output", als_out_pin, {als_in_pin}
+ field = "-"
+ field = "PWM Output", als_opt_pwmout, {als_in_pin}
+ field = "Output Port/Pin", als_pwm_opt2, {als_in_pin && als_opt_pwmout}
+ field = "Output Duty", als_pwm_duty, {als_in_pin && als_opt_pwmout}
+ field = "Frequency", als_pwm_opt_freq, {als_in_pin && als_opt_pwmout}
+ field = ""
+
+ dialog = als_left1, "Added Fuel %age"
+ panel = als_addfuel_tbl
+
+ dialog = als_left2, "ALS Timing"
+ panel = als_timing_tbl
+
+ dialog = als_right1, "Spark Cut %"
+ panel = als_sparkcut_tbl, North, {als_opt_sc}
+
+ dialog = als_right2, "Fuel Cut %"
+ panel = als_fuelcut_tbl, South, {als_opt_fc && hardware_fuel && sequential}}
+
+ dialog = antilag_left, "", yAxis
+ panel = als_left1
+ panel = als_left2
+
+ dialog = antilag_right, "", yAxis
+ panel = als_right1
+ panel = als_right2
+
+ dialog = antilagtables, "Turbo Anti-lag Tables", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alstables"
+ panel = antilag_left
+ panel = antilag_right
+
+ dialog = flash_unlock, "Un/Lock Calibrations"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calunlock"
+ field = "Sensor Calibrations", flashlock
+
+ field = "Always re-lock after use"
+
+ dialog = gen_pwm_left_a, ""
+ field = "Enable Generic PWM A", pwm_opt_on_a
+ field = "Output Port/Pin", pwm_opt2_a, {pwm_opt_on_a}
+ field = "Frequency / On-Off", pwm_opt_freq_a, {pwm_opt_on_a}
+ field = "On Above Duty", pwm_onabove_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ field = "Off Below Duty", pwm_offbelow_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_a_offset, pwm_opt_load_a_size, {pwm_opt_on_a}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_a, {pwm_opt_on_a}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_grapha, "", card
+ panel = pwm_duties_Tbl_a, Center, {pwm_opt_on_a && (pwm_opt_curve_a == 0)}
+ panel = pwm_curve_a, Center, {pwm_opt_on_a && pwm_opt_curve_a}
+
+ dialog = gen_pwm_a, "Generic PWM A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_a, West
+ panel = gen_pwm_curve_grapha, Center
+
+ dialog = gen_pwm_left_b, ""
+ field = "Enable Generic PWM B", pwm_opt_on_b
+ field = "Output Port/Pin", pwm_opt2_b, {pwm_opt_on_b}
+ field = "Frequency / On-Off", pwm_opt_freq_b, {pwm_opt_on_b}
+ field = "On Above Duty", pwm_onabove_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ field = "Off Below Duty", pwm_offbelow_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_b_offset, pwm_opt_load_b_size, {pwm_opt_on_b}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_b, {pwm_opt_on_b}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphb, "", card
+ panel = pwm_duties_Tbl_b, Center, {pwm_opt_on_b && (pwm_opt_curve_b == 0)}
+ panel = pwm_curve_b, Center, {pwm_opt_on_b && pwm_opt_curve_b}
+
+ dialog = gen_pwm_b, "Generic PWM B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_b, West
+ panel = gen_pwm_curve_graphb, Center
+
+ dialog = gen_pwm_left_c, ""
+ field = "Enable Generic PWM C", pwm_opt_on_c
+ field = "Output Port/Pin", pwm_opt2_c, {pwm_opt_on_c}
+ field = "Frequency / On-Off", pwm_opt_freq_c, {pwm_opt_on_c}
+ field = "On Above Duty", pwm_onabove_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ field = "Off Below Duty", pwm_offbelow_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_c_offset, pwm_opt_load_c_size, {pwm_opt_on_c}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_c, {pwm_opt_on_c}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphc, "", card
+ panel = pwm_duties_Tbl_c, Center, {pwm_opt_on_c && (pwm_opt_curve_c == 0)}
+ panel = pwm_curve_c, Center, {pwm_opt_on_c && pwm_opt_curve_c}
+
+ dialog = gen_pwm_c, "Generic PWM C", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_c, West
+ panel = gen_pwm_curve_graphc, Center
+
+ dialog = gen_pwm_left_d, ""
+ field = "Enable Generic PWM D", pwm_opt_on_d
+ field = "Output Port/Pin", pwm_opt2_d, {pwm_opt_on_d}
+ field = "Frequency / On-Off", pwm_opt_freq_d, {pwm_opt_on_d}
+ field = "On Above Duty", pwm_onabove_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ field = "Off Below Duty", pwm_offbelow_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_d_offset, pwm_opt_load_d_size, {pwm_opt_on_d}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_d, {pwm_opt_on_d}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphd, "", card
+ panel = pwm_duties_Tbl_d, Center, {pwm_opt_on_d && (pwm_opt_curve_d == 0)}
+ panel = pwm_curve_d, Center, {pwm_opt_on_d && pwm_opt_curve_d}
+
+ dialog = gen_pwm_d, "Generic PWM D", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_d, West
+ panel = gen_pwm_curve_graphd, Center
+
+ dialog = gen_pwm_left_e, ""
+ field = "Enable Generic PWM E", pwm_opt_on_e
+ field = "Output Port/Pin", pwm_opt2_e, {pwm_opt_on_e}
+ field = "Frequency / On-Off", pwm_opt_freq_e, {pwm_opt_on_e}
+ field = "On Above Duty", pwm_onabove_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ field = "Off Below Duty", pwm_offbelow_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_e_offset, pwm_opt_load_e_size, {pwm_opt_on_e}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_e, {pwm_opt_on_e}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphe, "", card
+ panel = pwm_duties_Tbl_e, Center, {pwm_opt_on_e && (pwm_opt_curve_e == 0)}
+ panel = pwm_curve_e, Center, {pwm_opt_on_e && pwm_opt_curve_e}
+
+ dialog = gen_pwm_e, "Generic PWM E", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_e, West
+ panel = gen_pwm_curve_graphe, Center
+
+ dialog = gen_pwm_left_f, ""
+ field = "Enable Generic PWM F", pwm_opt_on_f
+ field = "Output Port/Pin", pwm_opt2_f, {pwm_opt_on_f}
+ field = "Frequency / On-Off", pwm_opt_freq_f, {pwm_opt_on_f}
+ field = "On Above Duty", pwm_onabove_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ field = "Off Below Duty", pwm_offbelow_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)}
+ channelSelector= "Load Axis", pwm_opt_load_f_offset, pwm_opt_load_f_size, {pwm_opt_on_f}
+ field = "Load is Y axis on table, X axis on curve"
+ field = "Table or Curve", pwm_opt_curve_f, {pwm_opt_on_f}
+ field = "CLT/MAT Units", sensor_temp, {0}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = gen_pwm_curve_graphf, "", card
+ panel = pwm_duties_Tbl_f, Center, {pwm_opt_on_f && (pwm_opt_curve_f == 0)}
+ panel = pwm_curve_f, Center, {pwm_opt_on_f && pwm_opt_curve_f}
+
+ dialog = gen_pwm_f, "Generic PWM F", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genpwm"
+ panel = gen_pwm_left_f, West
+ panel = gen_pwm_curve_graphf, Center
+
+ dialog = map_sample_dialog_south, "MAP Sample General Settings"
+ field = "MAP Sample Method", mapsample_opt2
+ field = "Map Sample Window", map_sample_duration, { !mapsample_opt2 }
+ field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
+ field = ""
+ field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (hardware_cam == 2) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
+
+ dialog = map_sample_dialog, "MAP Sample Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mapsamp"
+ panel = mapsample_curve, Center, { !mapsample_opt2 }
+ panel = map_sample_dialog_south, South
+
+ dialog = ShiftSettings, "Sequential Shift Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqshift"
+ field = "Shifter Spark Cut System", shift_cut_on
+ field = "Mode", shift_cut_auto, { shift_cut_on }
+ field = "Cut fuel", shift_cut_fuel, { shift_cut_on }
+ field = "Button Input", shift_cut_in, { shift_cut_on }
+ field = "Solenoid Output", shift_cut_out, { shift_cut_on }
+ field = "RPM >", shift_cut_rpm, { shift_cut_on }
+ field = "And TPS >", shift_cut_tps, { shift_cut_on }
+ field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on }
+ field = "Spark Cut Time (Base)", shift_cut_time, { shift_cut_on }
+ field = "Gear Based Delay", shift_cut_gear, { shift_cut_on }
+ field = "Additional Delay 1-2", shift_cut_add12, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 2-3", shift_cut_add23, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 3-4", shift_cut_add34, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 4-5", shift_cut_add45, { shift_cut_on && shift_cut_gear }
+ field = "Additional Delay 5-6", shift_cut_add56, { shift_cut_on && shift_cut_gear }
+ field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_on}
+ field = "Re-Shift Hold-Off Time", shift_cut_reshift
+ field = "Automatic mode shift points"
+ field = "Shift RPM 1-2", shift_cut_rpm12, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 2-3", shift_cut_rpm23, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 3-4", shift_cut_rpm34, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 4-5", shift_cut_rpm45, { shift_cut_on && shift_cut_auto }
+ field = "Shift RPM 5-6", shift_cut_rpm56, { shift_cut_on && shift_cut_auto }
+
+ dialog = fan_control, "Fan Control"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fanctl"
+ field = "Fan Control On", fanctl_settings_on
+ field = "Fan Control Idles up?", fanctl_settings_idleup, { fanctl_settings_on }
+ field = "Output Pin", fanctl_settings_pin, { fanctl_settings_on }
+ field = "Idle-up Delay", fanctl_idleup_delay, { fanctl_settings_on && fanctl_settings_idleup }
+ field = "Idle-up Duty", fanctl_idleup_adder_duty, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 2) }
+ field = "Idle-up Steps", fanctl_idleup_adder_steps, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 3) }
+ field = "Idle-up Target Increase", fan_idleup_cl_targetadder, { fanctl_settings_on && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Fan On Temperature", fanctl_ontemp, { fanctl_settings_on }
+ field = "Fan Off Temperature", fanctl_offtemp, { fanctl_settings_on }
+ field = "Allow fan When Engine Off", fanctl_opt2_engineoff, { fanctl_settings_on }
+ field = "Fan On With AC On?", fan_ctl_settings_acfan, { fanctl_settings_on && ac_idleup_settings }
+ field = "Fan Shutoff"
+ field = "TPS Shutoff", fan_idleup_tps_offpoint, { fanctl_settings_on }
+ field = "TPS Hysteresis", fan_idleup_tps_hyst, { fanctl_settings_on }
+ field = "VSS Shutoff", fan_idleup_vss_offpoint, { fanctl_settings_on && (vss_opt0_1) }
+ field = "VSS Hyst", fan_idleup_vss_hyst, { fanctl_settings_on && (vss_opt0_1) }
+
+ dialog = ac_idleup, "Air Conditioning Idle-Up"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#acidle"
+ field = "A/C Idle-Up", ac_idleup_settings
+ field = "Idle-Up Output", ac_idleup_io_out, { ac_idleup_settings }
+ field = "Idle-Up Input", ac_idleup_io_in, { ac_idleup_settings }
+ field = "Input Polarity", ac_idleup_settings_inv, { ac_idleup_settings }
+ field = "Idle-Up Delay", ac_idleup_delay, { ac_idleup_settings }
+ field = "Idle-Up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings }
+ field = "Compressor delay since last on", ac_delay_since_last_on, { ac_idleup_settings }
+ field = "Idle-up Duty", ac_idleup_adder_duty, { (IdleCtl == 2) && ac_idleup_settings }
+ field = "Idle-up Steps", ac_idleup_adder_steps, { (IdleCtl == 3) && ac_idleup_settings }
+ field = "Idle-up Target RPM Adder", ac_idleup_cl_targetadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "Idle-up CL load Allowance", ac_idleup_cl_lockout_mapadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) }
+ field = "A/C compressor Shutoff"
+ field = "TPS Shutoff", ac_idleup_tps_offpoint, { ac_idleup_settings }
+ field = "TPS Hysteresis", ac_idleup_tps_hyst, { ac_idleup_settings }
+ field = "VSS Shutoff", ac_idleup_vss_offpoint, { ac_idleup_settings && (vss_opt0_1) }
+ field = "VSS Hysteresis", ac_idleup_vss_hyst, { ac_idleup_settings && (vss_opt0_1) }
+ field = "Maximum RPM", ac_idleup_max_rpm, { ac_idleup_settings }
+
+ dialog = sensor_source, "", yAxis
+ field = "Sensor - Source"
+ field = "01", sensor01_source
+ field = "02", sensor02_source
+ field = "03", sensor03_source
+ field = "04", sensor04_source
+ field = "05", sensor05_source
+ field = "06", sensor06_source
+ field = "07", sensor07_source
+ field = "08", sensor08_source
+
+ dialog = sensor_sourceb, "", yAxis
+ field = "Sensor - Source"
+ field = "09", sensor09_source
+ field = "10", sensor10_source
+ field = "11", sensor11_source
+ field = "12", sensor12_source
+ field = "13", sensor13_source
+ field = "14", sensor14_source
+ field = "15", sensor15_source
+ field = "16", sensor16_source
+
+ dialog = sensor_alias, "", yAxis
+ field = "Field Name"
+ field = "", sensor01Alias
+ field = "", sensor02Alias
+ field = "", sensor03Alias
+ field = "", sensor04Alias
+ field = "", sensor05Alias
+ field = "", sensor06Alias
+ field = "", sensor07Alias
+ field = "", sensor08Alias
+
+ dialog = sensor_aliasb, "", yAxis
+ field = "Field Name"
+ field = "", sensor09Alias
+ field = "", sensor10Alias
+ field = "", sensor11Alias
+ field = "", sensor12Alias
+ field = "", sensor13Alias
+ field = "", sensor14Alias
+ field = "", sensor15Alias
+ field = "", sensor16Alias
+
+ dialog = sensor_trans, "", yAxis
+ field = "Transformation"
+ field = "", sensor01_trans, {sensor01_source}
+ field = "", sensor02_trans, {sensor02_source}
+ field = "", sensor03_trans, {sensor03_source}
+ field = "", sensor04_trans, {sensor04_source}
+
+ field = "", sensor05_trans, {sensor05_source}
+ field = "", sensor06_trans, {sensor06_source}
+ field = "", sensor07_trans, {sensor07_source}
+ field = "", sensor08_trans, {sensor08_source}
+
+ dialog = sensor_transb, "", yAxis
+ field = "Transformation"
+ field = "", sensor09_trans, {sensor09_source}
+ field = "", sensor10_trans, {sensor10_source}
+ field = "", sensor11_trans, {sensor11_source}
+ field = "", sensor12_trans, {sensor12_source}
+ field = "", sensor13_trans, {sensor13_source}
+ field = "", sensor14_trans, {sensor14_source}
+ field = "", sensor15_trans, {sensor15_source}
+ field = "", sensor16_trans, {sensor16_source}
+
+ dialog = sensor_val0, "", yAxis
+ field = "0V value"
+ field = "", sensor01_val0, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_val0, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_val0, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_val0, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_val0, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_val0, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_val0, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_val0, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_val0b, "", yAxis
+ field = "0V value"
+ field = "", sensor09_val0, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_val0, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_val0, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_val0, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_val0, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_val0, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_val0, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_val0, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_max, "", yAxis
+ field = "5V value"
+ field = "", sensor01_max, {sensor01_source && (sensor01_trans == 1)}
+ field = "", sensor02_max, {sensor02_source && (sensor02_trans == 1)}
+ field = "", sensor03_max, {sensor03_source && (sensor03_trans == 1)}
+ field = "", sensor04_max, {sensor04_source && (sensor04_trans == 1)}
+ field = "", sensor05_max, {sensor05_source && (sensor05_trans == 1)}
+ field = "", sensor06_max, {sensor06_source && (sensor06_trans == 1)}
+ field = "", sensor07_max, {sensor07_source && (sensor07_trans == 1)}
+ field = "", sensor08_max, {sensor08_source && (sensor08_trans == 1)}
+
+ dialog = sensor_maxb, "", yAxis
+ field = "5V value"
+ field = "", sensor09_max, {sensor09_source && (sensor09_trans == 1)}
+ field = "", sensor10_max, {sensor10_source && (sensor10_trans == 1)}
+ field = "", sensor11_max, {sensor11_source && (sensor11_trans == 1)}
+ field = "", sensor12_max, {sensor12_source && (sensor12_trans == 1)}
+ field = "", sensor13_max, {sensor13_source && (sensor13_trans == 1)}
+ field = "", sensor14_max, {sensor14_source && (sensor14_trans == 1)}
+ field = "", sensor15_max, {sensor15_source && (sensor15_trans == 1)}
+ field = "", sensor16_max, {sensor16_source && (sensor16_trans == 1)}
+
+ dialog = sensor_lag, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor01LF, {sensor01_source}
+ field = "", sensor02LF, {sensor02_source}
+
+ field = "", sensor03LF, {sensor03_source}
+ field = "", sensor04LF, {sensor04_source}
+ field = "", sensor05LF, {sensor05_source}
+ field = "", sensor06LF, {sensor06_source}
+ field = "", sensor07LF, {sensor07_source}
+ field = "", sensor08LF, {sensor08_source}
+
+ dialog = sensor_lagb, "", yAxis
+ field = "Lag Factor"
+ field = "", sensor09LF, {sensor09_source}
+ field = "", sensor10LF, {sensor10_source}
+ field = "", sensor11LF, {sensor11_source}
+ field = "", sensor12LF, {sensor12_source}
+ field = "", sensor13LF, {sensor13_source}
+ field = "", sensor14LF, {sensor14_source}
+ field = "", sensor15LF, {sensor15_source}
+ field = "", sensor16LF, {sensor16_source}
+
+ dialog = sensors_top, "Sensors 1-8", xAxis
+ panel = sensor_source
+ panel = sensor_alias
+ panel = sensor_trans
+ panel = sensor_val0
+ panel = sensor_max
+ panel = sensor_lag
+
+ dialog = sensors_btm, "Sensors 9-16", xAxis
+ panel = sensor_sourceb
+ panel = sensor_aliasb
+ panel = sensor_transb
+ panel = sensor_val0b
+ panel = sensor_maxb
+ panel = sensor_lagb
+
+ dialog = sensors_data, "", yAxis
+ panel = sensors_top
+ panel = sensors_btm
+
+ dialog = sensors_temp, "", xAxis
+ field = "Allow Input Sharing", opt142_gs_share
+ field = "CLT/MAT Units", sensor_temp
+
+ dialog = sensors, "Generic Sensor Inputs", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gensens"
+ panel = sensors_data, North
+ panel = sensors_temp, South
+
+ dialog = ITB_settings, "ITB settings"
+ field = "Percent Baro Switchpoint", ITB_load_mappoint
+ field = "Idle TPS Threshold", ITB_load_idletpsthresh
+
+ dialog = ITBcombined, "ITB Load Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#itbload"
+ panel = ITB_settings, South
+ panel = ITB_load_switchpoint_curve, West
+ panel = ITB_load_loadvals_curve, East
+
+ dialog = mafdialog, "MAF Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafset"
+ field = "Sensor Type", MAFOption_t
+ field = "Voltage Input Port", MAFOption, {MAFOption_t == 0}
+ field = "Frequency Input Port", MAFOption_f, {MAFOption_t == 1}
+ field = "Low Frequency", maf_freq0, {MAFOption_t == 1}
+ field = "High Frequency", maf_freq1, {MAFOption_t == 1}
+ field = "MAT Correction Curve", feature7_mafmat, {MAFOption_t < 2}
+ field = "Use VE1 As Trim Table", feature7_maftrim, {(algorithm == 5) && (MAFOption_t < 2) }
+ field = "MAF Sensor Range", maf_range, {MAFOption_t < 2}
+ field = "Set the range before loading a flow curve."
+ field = "Use Old-Style Calibration Curve (See Tools Menu)", feature7_mafcalib, {MAFOption_t < 2}
+
+ dialog = battcalib, "Calibrate Battery Voltage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calbatt"
+ field = "Supply Voltage At Zero ADC Count", batt0
+ field = "Supply voltage At Max ADC Count", battmax
+ field = ""
+ field = "Typical values are 0.0V and 29.7V"
+
+ dialog = waterinj_topl, ""
+ field = "Enable Water/Meth Injection", water_freq_on
+ field = "Pump Output", water_pins_pump, {water_freq_on}
+ field = "Valve Style", water_freq_type, {water_freq_on}
+ field = "Frequency", water_freq, {water_freq_on && (water_freq_type ==2)}
+ field = "Valve Output", water_pins_valve, {water_freq_on && water_freq_type}
+ dialog = waterinj_topr, ""
+ field = "Enable When.."
+ field = "TPS >", water_tps, {water_freq_on}
+ field = "RPM >", water_rpm, {water_freq_on}
+ field = "MAP >", water_map, {water_freq_on}
+ field = "MAT >", water_mat, {water_freq_on}
+ field = ""
+ field = "Low Fluid Level Input", water_pins_in_shut, {water_freq_on}
+
+ dialog = waterinj_top, "", border
+ panel = waterinj_topl, West
+ panel = waterinj_topr, East
+
+ dialog = waterinj, "Water Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#water"
+ panel = waterinj_top, North
+ panel = waterinjTbl, Center
+
+ dialog = vss1, "Vehicle Speed Sensor 1"
+ field = "VSS1 Input Type", vss_opt0_1
+ field = "Analogue Input", vss1_an, {vss_opt0_1 == 2}
+ field = "Full Scale Speed", vss1_an_max, {vss_opt0_1 == 2}
+ field = "Digital Input", vss_opt1, {vss_opt0_1 == 1}
+ field = "Wheel Diameter", wheeldia1, {vss_opt1 && (((vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss1_pos, {vss_opt0_1 == 1}
+ field = "Pulses", vss1_can_scale_pulse, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth1, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)}
+ field = "PWM Port", vss1_pwmseq, {(vss_opt1 ==15) && (vss_opt0_1 == 1)}
+ field = "Scaler", vss1_can_scale, {(vss_opt1 ==14) && (vss_opt0_1 == 1)}
+ field = "Smoothing lag factor", vss1LF, {vss_opt0_1}
+
+ dialog = vss2, "Vehicle speed sensor 2"
+ field = "VSS2 Input Type", vss_opt0_2
+ field = "Analogue Input", vss2_an, {vss_opt0_2 == 2}
+ field = "Full Scale Speed", vss2_an_max, {vss_opt0_2 == 2}
+ field = "Digital Input", vss_opt2, {vss_opt0_2 == 1}
+ field = "Wheel Diameter", wheeldia2, {vss_opt2 && (((vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)) || (gear_method == 1))}
+ field = "VSS Position/Type", vss2_pos, {vss_opt0_2 == 1}
+ field = "Pulses", vss2_can_scale_pulse, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos > 1)}
+ field = "Speed Sensor #Teeth", reluctorteeth2, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)}
+ field = "PWM Port", vss2_pwmseq, {(vss_opt2 ==15) && (vss_opt0_2 == 1)}
+ field = "Scaler", vss2_can_scale, {(vss_opt2 ==14) && (vss_opt0_2 == 1)}
+ field = "Smoothing Lag Factor", vss2LF, {vss_opt0_2}
+
+ dialog = vss3, "Vehicle Speed Sensor 3 (Matches VSS1)"
+ field = "VSS3 Input Type", vss_opt0_3, {vss_opt0_1}
+ field = "Analogue Input", vss3_an, {vss_opt0_3 && (vss_opt0_1 == 2)}
+ field = "Digital Input", vss_opt3, {vss_opt0_3 && (vss_opt0_1 == 1)}
+ field = "PWM Port", vss3_pwmseq, {(vss_opt3 ==15) && vss_opt0_3 && (vss_opt0_1 == 1)}
+
+ dialog = vss4, "Vehicle speed sensor 4 (matches VSS2)"
+ field = "VSS4 input type", vss_opt0_4, {vss_opt0_2}
+ field = "Analogue Input", vss4_an, {vss_opt0_4 && (vss_opt0_2 == 2)}
+ field = "Digital Input", vss_opt4, {vss_opt0_4 && (vss_opt0_2 == 1)}
+ field = "PWM Port", vss4_pwmseq, {(vss_opt4 ==15) && vss_opt0_4 && (vss_opt0_4 == 1)}
+
+ dialog = vssout, "VSS Output"
+ field = "VSS Output", vssout_opt
+ field = "VSSout Units", vssout_optunits, { vssout_opt }
+ field = "Scale", vssout_scale, { vssout_opt }
+
+ dialog = vssdotlag, "VSSdot Smoothing"
+ field = "Sample Interval", vssdot_int
+ field = "Lag factor", vssdotLF
+
+ dialog = vsssamp, "VSS Sampling"
+ field = "VSS Sample Interval", vss_samp_int
+
+ dialog = gears, "Gear detection"
+ field = "Final Drive Ratio", fdratio1
+
+ field = "Method", gear_method
+ field = "Number Of Gears", gear_no, {gear_method}
+ field = "1st Ratio", gear1ratio, { (gear_method == 1) }
+ field = "2nd Ratio", gear2ratio, { (gear_method == 1) && (gear_no > 1) } ; would be pretty pointless otherwise!
+ field = "3rd Ratio", gear3ratio, { (gear_method == 1) && (gear_no > 2) }
+ field = "4th Ratio", gear4ratio, { (gear_method == 1) && (gear_no > 3) }
+ field = "5th Ratio", gear5ratio, { (gear_method == 1) && (gear_no > 4) }
+ field = "6th Ratio", gear6ratio, { (gear_method == 1) && (gear_no > 5) }
+ field = ""
+ field = "Input Port", gear_port_an, { (gear_method == 2) }
+ field = "Neutral Voltage", gear0v, { (gear_method == 2) }
+ field = "1st Gear Voltage", gear1v, { (gear_method == 2) }
+ field = "2nd Gear Voltage", gear2v, { (gear_method == 2) && (gear_no > 1) }
+ field = "3rd Gear Voltage", gear3v, { (gear_method == 2) && (gear_no > 2) }
+ field = "4th Gear Voltage", gear4v, { (gear_method == 2) && (gear_no > 3) }
+ field = "5th Gear Voltage", gear5v, { (gear_method == 2) && (gear_no > 4) }
+ field = "6th Gear Voltage", gear6v, { (gear_method == 2) && (gear_no > 5) }
+
+ dialog = vssunits, "Units"
+ field = "Preferred Speed Units", prefSpeedUnits
+ field = "Preferred Length Units", prefLengthUnits
+
+ dialog = ssnorth, "", xAxis
+ panel = vss1
+ panel = vss2
+
+ dialog = vss34, "", xAxis
+ panel = vss3
+ panel = vss4
+
+ dialog = gearsunits, "", yAxis
+ panel = gears
+ panel = vssunits
+
+ dialog = vssoutdotr, "", yAxis
+ panel = vssdotlag
+ panel = vsssamp
+
+ dialog = vssoutdot, "", xAxis
+ panel = vssout
+ panel = vssoutdotr
+
+ dialog = sssouth, "", yAxis
+ panel = vss34
+ panel = vssoutdot
+
+ dialog = speedsensorsmain, "", yAxis
+ panel = ssnorth
+ panel = sssouth
+
+ dialog = speedsensors, "Speed and Gear Sensors", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#speedgear"
+ panel = speedsensorsmain
+ panel = gearsunits
+
+ dialog = ss, "Shaft Speed Sensors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#shaftspeed"
+ field = "Sensor 1", ss_opt1
+ field = "Speed sensor #teeth", reluctorteeth3, {ss_opt1 && ss_opt1<15}
+ field = "High Speed Input", ss_opt1_spd, {(ss_opt1 == 4) || (ss_opt1 == 10) || (ss_opt1 == 11) || (ss_opt1 == 12)}
+ field = "Smoothing Lag Factor", ss1LF ;, {ss_opt2 && ss_opt2<15}
+ field = ""
+ field = "Sensor 2", ss_opt2
+ field = "Speed Sensor #Teeth", reluctorteeth4, {ss_opt2 && ss_opt2<15}
+ field = "High Speed Input", ss_opt2_spd, {(ss_opt2 == 4) || (ss_opt2 == 10) || (ss_opt2 == 11) || (ss_opt2 == 12)}
+ field = "Smoothing Lag Factor", ss2LF ;, {ss_opt2 && ss_opt2<15}
+
+ dialog = accelerometer, "Accelerometer Parameters"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelerometer"
+ field = "X Input", accXport
+ field = "Y Input", accYport
+ field = "Z Input", accZport
+ field = "X -1g Calib.", accXcal1, { accXport }
+ field = "X +1g Calib.", accXcal2, { accXport }
+ field = "Y -1g Calib.", accYcal1, { accYport }
+ field = "Y +1g Calib.", accYcal2, { accYport }
+ field = "Z -1g Calib.", accZcal1, { accZport }
+ field = "Z +1g Calib.", accZcal2, { accZport }
+ field = "Lag factor", accxyzLF
+
+ dialog = sdcard_top, ""
+ field = "SD Card Logging:", log_style_on2
+ field = "Datalog Button", log_style2_but, {log_style_on2 == 2}
+ field = "Trigger", log_style4_opt, {log_style_on2 == 3}
+ field = "RPM >", log_trig_rpm, {(log_style_on2 == 3) && (log_style4_opt == 0)}
+ field = "TPS >", log_trig_tps, {(log_style_on2 == 3) && (log_style4_opt == 1)}
+ field = "MAP >", log_trig_map, {(log_style_on2 == 3) && (log_style4_opt == 2)}
+ field = "LED Indicator", log_style_led, {log_style_on2}
+ field = "Log Data Block Size", log_style_block, {log_style_on2}
+ field = "Interleave GPS Data", log_style_gps, {log_style_on2}
+ field = "Sampling", log_style2_samp, {(log_style_block != 1) && log_style_on2 }
+ field = "Sample Interval", log_int, {(log_style_block != 1) && log_style_on2 }
+ displayOnlyField = "Frames/Second", log_rate, {(log_style_block != 1) && log_style_on2 }
+ field = "Log File Max Duration", log_length, {log_style_on2}
+ field = "Stream Input", log_style3_adc, {log_style_block == 1}
+ field = "SPI Comms Speed", log_style_ledspd, {log_style_on2}
+ field = "Trigger pulse output", sdpulse_out, {log_style_on2 >= 2}
+
+ dialog = sdcard_btm, ""
+ logFieldSelector = dataLogFieldSelector, "Log Field Selection", logFieldOffset, logFieldLength, 55
+
+ dialog = sdcard_datalog, "SD Card Datalogging", yAxis
+ panel = sdcard_top
+ panel = dataLogFieldSelector
+
+ dialog = N2OSystem_topl, ""
+ field = "Nitrous Control", N2Oopt_2
+ field = "Enable N2O When Above", N2ORpm, { N2Oopt_2 }
+ field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
+ field = "And TPS >", N2OTps, { N2Oopt_2 }
+ field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
+ field = "Enrich Which Bank", N2Oopt_01, { N2Oopt_2 }
+
+ dialog = N2OSystem_topr, ""
+ field = "On/Off vs Progressive Mode", N2Oopt2_prog, { N2Oopt_2 }
+ field = "Time, RPM, VSS-Based", N2Oopt2_prog_time, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Solenoid Frequency", N2Oopt2_prog_freq, { N2Oopt_2 && N2Oopt2_prog }
+ field = "Fuel Solenoid Frequency", N2Oopt2_prog_freqf, { N2Oopt_2 && N2Oopt2_prog && (n2o1f_pins > 0) }
+ field = "AFR Safety Uses AFR2 Targets", N2Oopt_4, { N2Oopt_2 }
+ field = ""
+ field = "READ THE MANUAL BEFORE USING NITROUS"
+
+ dialog = N2OSystem1, "Nitrous System Stage 1"
+ field = "Stage 1 Output - Nitrous", n2o1n_pins, { N2Oopt_2 }
+ field = "Stage 1 Output - Fuel", n2o1f_pins, { N2Oopt_2 }
+ field = "Enable Input On:", N2Oopt_pins, { N2Oopt_2 }
+ field = "Additional Fuel PW @ N2O Min RPM", N2OPWLo, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 && !N2Oopt2_prog }
+ field = "Retard Ignition By", N2OAngle, { N2Oopt_2 && !N2Oopt2_prog}
+ field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on }
+ field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on }
+ field = "Allow Nitrous During Launch", N2Oopt_5, { N2Oopt_2 && launch_opt_on }
+ field = "Max MAP During Launch", N2Olaunchmaxmap,{ N2Oopt_2 && launch_opt_on && N2Oopt_5}
+
+ dialog = N2OSystem2, "Nitrous System Stage 2"
+ field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
+ field = "Stage 2 Output - Nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Stage 2 Output - Fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 }
+ field = "Enable Stage 2 Above", N2O2Rpm, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Max RPM", N2O2RpmMax, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Delay After Stage1", N2O2delay, { N2Oopt_2 && N2Oopt_3 && (!N2Oopt2_prog || (N2Oopt2_prog_time==0)) }
+ field = "Retard Ignition By", N2O2Angle, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+ field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog }
+
+ dialog = N2OSystem_top, "", border
+ panel = N2OSystem_topl, West
+ panel = N2OSystem_topr, East
+
+ dialog = N2OSystems, "", border
+ panel = N2OSystem1, West
+ panel = N2OSystem2, East
+
+ dialog = nitrous, "Nitrous System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = N2OSystem_top, North
+ panel = N2OSystems, South
+
+ dialog = n2o1_curves_time, ""
+ panel = n2o1_duty_time
+ panel = n2o1_pw_time
+ panel = n2o1_retard_time
+
+ dialog = n2o2_curves_time, ""
+ panel = n2o2_duty_time
+ panel = n2o2_pw_time
+ panel = n2o2_retard_time
+
+ dialog = nitrous_curves_time, "Nitrous - Time-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_time
+ panel = n2o2_curves_time
+
+ dialog = n2o1_curves_rpm, ""
+ panel = n2o1_duty_rpm
+ panel = n2o1_pw_rpm
+ panel = n2o1_retard_rpm
+
+ dialog = n2o2_curves_rpm, ""
+ panel = n2o2_duty_rpm
+ panel = n2o2_pw_rpm
+ panel = n2o2_retard_rpm
+
+ dialog = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_rpm
+ panel = n2o2_curves_rpm
+
+ dialog = n2o1_curves_vss, ""
+ panel = n2o1_duty_vss
+ panel = n2o1_pw_vss
+ panel = n2o1_retard_vss
+
+ dialog = n2o2_curves_vss, ""
+ panel = n2o2_duty_vss
+ panel = n2o2_pw_vss
+ panel = n2o2_retard_vss
+
+ dialog = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#nitrous"
+ panel = n2o1_curves_vss
+ panel = n2o2_curves_vss
+
+
+ dialog = overboost, "Overboost Protection"
+ field = "Overboost Protection", OverBoostOption
+ field = "Maximum MAP (Boost)", OverBoostKpa, { OverBoostOption > 0 }
+ field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 }
+ field = "Boost Tolerance", OverBoostOption_tol, { OverBoostOption && boost_ctl_settings_cl}
+ field = "Tolerance", boosttol, {OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl}
+ field = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))}
+ field = "Alt. Maximum MAP (Boost)", OverBoostKpa2, { (tsw_pin_ob && (OverBoostOption > 0)) || dualfuel_sw2_ob }
+
+ dialog = boostfeat, ""
+ field = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on}
+ field = "Boost Table Switching Gear", boost_gear_switch, { boost_feats_tsw == 15 }
+ field = "Boost Timed From Launch", boost_feats_timed, {boost_ctl_settings_on && launch_opt_on}
+ field = "Specific Launch Duty/Target", boost_feats_launch, {boost_ctl_settings_on && launch_opt_on}
+ field = "Launch Boost Duty", boost_launch_duty, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl == 0}
+ field = "Launch Boost Target", boost_launch_target, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && boost_ctl_settings_cl}
+ field = "Boost vs Speed / Gear", boost_vss, {boost_ctl_settings_on}
+ field = "Above TPS", boost_vss_tps, {boost_ctl_settings_on && boost_vss}
+ field = "Per Gear Targets:"
+
+ dialog = boostgeartargsl, "", yAxis
+ field = "1", boost_geartarg1, {(boost_vss == 3) && gear_method && (gear_no > 0) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "2", boost_geartarg2, {(boost_vss == 3) && gear_method && (gear_no > 1) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "3", boost_geartarg3, {(boost_vss == 3) && gear_method && (gear_no > 2) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargsr, "", yAxis
+ field = "4", boost_geartarg4, {(boost_vss == 3) && gear_method && (gear_no > 3) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "5", boost_geartarg5, {(boost_vss == 3) && gear_method && (gear_no > 4) && boost_ctl_settings_cl && boost_ctl_settings_on}
+ field = "6", boost_geartarg6, {(boost_vss == 3) && gear_method && (gear_no > 5) && boost_ctl_settings_cl && boost_ctl_settings_on}
+
+ dialog = boostgeartargs, "", border
+ panel = boostgeartargsl, West
+ panel = boostgeartargsr, East
+
+ dialog = boostctlSettings, "Boost Control Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost"
+ field = "Boost Control Enabled", boost_ctl_settings_on
+ field = "Solenoid Freq. Range", boost_ctl_pwm, {boost_ctl_settings_on}
+ field = "Solenoid Frequency (Mid)", boost_ctl_pwm_scale, { boost_ctl_settings_on && (boost_ctl_pwm == 1)}
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)}
+ field = "Solenoid Frequency (Slow)", boost_ctl_settings_freq, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)}
+ field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
+ field = "Minimum Duty", boost_ctl_closeduty, {boost_ctl_settings_on }
+ field = "Maximum Duty", boost_ctl_openduty, {boost_ctl_settings_on }
+ field = "Boost Control Lower CLT Threshold",boost_ctl_clt_threshold, {boost_ctl_settings_on}
+ field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_on && boost_ctl_settings_cl }
+ field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on && boost_ctl_settings_on}
+ field = "Tuning Mode", boost_ctl_flags, {boost_ctl_settings_on && boost_ctl_settings_cl}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl && ((boost_ctl_flags == 2) || (boost_ctl_flags == 3)) }
+ field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+ field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) }
+
+ dialog = boosteast, ""
+ panel = overboost, North
+ panel = boostfeat, Center
+ panel = boostgeartargs, South
+
+ dialog = boost, "Boost Control Setings", border
+ panel = boostctlSettings, West
+ panel = boosteast, East
+
+ dialog = boostctlSettings2, "Boost Control Settings 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boost2"
+ field = "Boost Control Enabled", boost_ctl_settings_on2, {boost_ctl_settings_on}
+ field = "Target duty and boost tables 2 are used."
+ field = "Boost vs VSS or time or tableswitch not supported."
+ field = "Frequencies same as channel 1"
+ field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)}
+ field = "Boost Control Pin (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)}
+ field = ""
+ field = "Minimum Duty", boost_ctl_closeduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Maximum Duty", boost_ctl_openduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Boost Control Lower Limit", boost_ctl_lowerlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 }
+ field = ""
+ field = "Algorithm", boost_ctl_settings_cl2, {boost_ctl_settings_on && boost_ctl_settings_on2}
+ slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity2, horizontal, {boost_ctl_settings_on2 && boost_ctl_settings_cl2 && ((boost_ctl_flags2 == 2) || (boost_ctl_flags2 == 3)) }
+ field = "Tuning Mode", boost_ctl_flags2, {boost_ctl_settings_on2 && boost_ctl_settings_cl2}
+ field = "Proportional Gain", boost_ctl_Kp2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Integral Gain", boost_ctl_Ki2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "Differential Gain", boost_ctl_Kd2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) }
+ field = "MAP Sensor To Target", boost_ctl_sensor2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && 0}
+ field = "Must be defined in Generic Sensors"
+
+ dialog = maxafrset, ""
+ field = "Enable AFR Safety", maxafr_opt1_on
+ field = "Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "Load Axis", maxafr_opt1_load, { maxafr_opt1_on }
+ field = "Check above Load", maxafr_en_load, { maxafr_opt1_on }
+ field = "Check above RPM", maxafr_en_rpm, { maxafr_opt1_on }
+ field = "Wait for", maxafr_en_time, { maxafr_opt1_on }
+ field = "Kill spark For", maxafr_spkcut_time, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ field = "Then kill fuel until..." ;, "", { maxafr_opt1_on || egt_conf_action}
+ field = "TPS Below", maxafr_ret_tps, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "MAP Below", maxafr_ret_map, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+ field = "RPM Below", maxafr_ret_rpm, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) }
+
+ dialog = maxafrTbls, "AFR Difference Table"
+ panel = maxafr1Tbl
+
+ dialog = maxafr, "AFR Safety System", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afrsafety"
+ panel = maxafrset, West
+ panel = maxafrTbls, Center
+
+ dialog = egtwestn, "Configuration"
+ field = "No. EGT inputs", egt_num
+ field = ""
+ field = "Calibration - see documentation"
+ field = "Temp At 0V", egtcal_temp0, {egt_num}
+ field = "Temp At 5V", egtcal_tempmax, {egt_num}
+
+ dialog = egtwests, "Actions"
+ field = "EGT Actions", egt_conf_action
+ field = "Warning LED same as AFR safety"
+ field = "Warn Temperature", egt_warn, {egt_conf_action}
+ field = "Added Fuel", egt_addfuel, {egt_conf_action}
+ field = "Add To", egt_conf_bank, {egt_conf_action}
+ field = "Per cylinder", egt_conf_percyl, {egt_conf_action && (sequential == 2) }
+ field = "Shutdown Engine", egt_conf_shutdown, {egt_conf_action}
+ field = "Time > Warn Temp", egt_time, {egt_conf_action && egt_conf_shutdown}
+ field = "Max Temperature", egt_max, {egt_conf_action && egt_conf_shutdown}
+ field = "See AFR safety for shutdown options"
+
+ dialog = egtwest, "", yAxis
+ panel = egtwestn, North
+ panel = egtwests, South
+
+ dialog = egteast, "Data capture"
+ field = "EGT 1 Channel", egt1port, { (egt_num > 0) }
+ field = "EGT 2 Channel", egt2port, { (egt_num > 1) }
+ field = "EGT 3 Channel", egt3port, { (egt_num > 2) }
+ field = "EGT 4 Channel", egt4port, { (egt_num > 3) }
+ field = "EGT 5 Channel", egt5port, { (egt_num > 4) }
+ field = "EGT 6 Channel", egt6port, { (egt_num > 5) }
+ field = "EGT 7 Channel", egt7port, { (egt_num > 6) }
+ field = "EGT 8 Channel", egt8port, { (egt_num > 7) }
+ field = "EGT 9 Channel", egt9port, { (egt_num > 8) }
+ field = "EGT 10 Channel", egt10port, { (egt_num > 9) }
+ field = "EGT 11 Channel", egt11port, { (egt_num > 10) }
+ field = "EGT 12 Channel", egt12port, { (egt_num > 11) }
+ field = "EGT 13 Channel", egt13port, { (egt_num > 12) }
+ field = "EGT 14 Channel", egt14port, { (egt_num > 13) }
+ field = "EGT 15 Channel", egt15port, { (egt_num > 14) }
+ field = "EGT 16 Channel", egt16port, { (egt_num > 15) }
+
+ dialog = egt, "EGT / Thermocouple Inputs", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egt"
+ panel = egtwest
+ panel = egteast
+
+ dialog = injseq, "Sequenced Batch Fire"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#seqbatch"
+ field = "These settings allow batch firing to be sequenced from a specific"
+ field = "trigger number for repeatable phasing on each start."
+ field = "Enable sequenced batch fire", feature3_3
+ field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 }
+
+ dialog = canwest, ""
+ field = "My CAN ID", mycan_id
+ field = "Master Enable", can_enable_on
+ field = "Enable PWM Polling", enable_pollPWM, {can_enable_on}
+ field = "Remote CAN Id", can_poll_id, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Number For PWM Data", poll_tablePWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Table Offset For PWM Data", poll_offsetPWM, { enable_pollPWM && can_enable_on}
+ field = "Remote Clock", canpwm_clk, { enable_pollPWM && can_enable_on}
+ field = "Remote Prescale", canpwm_pre, { enable_pollPWM && can_enable_on}
+ field = "Remote Divider", canpwm_div, { enable_pollPWM && can_enable_on}
+ field = ""
+ field = "Enable ADC Polling", enable_pollADC, {can_enable_on}
+
+ dialog = caneast, ""
+ field = "Digital ports"
+ field = "Remote CAN Id", can_poll_id_ports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Table", poll_tableports, { enable_pollports_digin || enable_pollports_digout}
+ field = "Enable Input Port", enable_pollports_digin
+ field = "Offset", can_poll_digin_offset, { enable_pollports_digin}
+ field = "Enable Output Port", enable_pollports_digout
+ field = "Offset", can_poll_digout_offset, { enable_pollports_digout}
+ field = ""
+ field = "Enable PWM Outputs", enable_pwmout
+
+ field = "Remote CAN Id", can_pwmout_id, { enable_pwmout }
+ field = "Table", can_pwmout_tab, { enable_pwmout }
+ field = "Offset", can_pwmout_offset, { enable_pwmout }
+ field = "Force Duty To 0-255", enable_pwmout255
+
+ ;CAN adcs
+ dialog = canadc_opt, "", yAxis
+ field = "CAN ADC group on/off"
+ field = "CAN ADC 1- 4", canadc_opt1, { enable_pollADC }
+ field = "CAN ADC 5- 8", canadc_opt2, { enable_pollADC }
+ field = "CAN ADC 9-12", canadc_opt3, { enable_pollADC }
+ field = "CAN ADC 13-16", canadc_opt4, { enable_pollADC }
+ field = "CAN ADC 17-20", canadc_opt5, { enable_pollADC }
+ field = "CAN ADC 21-24", canadc_opt6, { enable_pollADC }
+
+ dialog = canadc_id, "", yAxis
+ field = "CAN Id"
+ field = "", canadc_id1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_id2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_id3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_id4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_id5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_id6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_tab, "", yAxis
+ field = "Table"
+ field = "", canadc_tab1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_tab2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_tab3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_tab4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_tab5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_tab6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadc_off, "", yAxis
+ field = "Offset"
+ field = "", canadc_off1, { canadc_opt1 && enable_pollADC }
+ field = "", canadc_off2, { canadc_opt2 && enable_pollADC }
+ field = "", canadc_off3, { canadc_opt3 && enable_pollADC }
+ field = "", canadc_off4, { canadc_opt4 && enable_pollADC }
+ field = "", canadc_off5, { canadc_opt5 && enable_pollADC }
+ field = "", canadc_off6, { canadc_opt6 && enable_pollADC }
+
+ dialog = canadcs, "CAN ADC selection", xAxis
+
+ panel = canadc_opt
+ panel = canadc_id
+ panel = canadc_tab
+ panel = canadc_off
+
+ dialog = can_top, "", xAxis
+ panel = canwest, West
+ panel = caneast, East, {can_enable_on}
+
+ dialog = canparams, "CAN Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canparams"
+ panel = can_top, North
+ panel = canadcs, South, {can_enable_on}
+
+ dialog = canbcast_userdef, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbcastuser"
+ field = "Identifier", can_bcast_user_id
+ field = "Data 0", can_bcast_user_d0
+ field = "Data 1", can_bcast_user_d1
+ field = "Data 2", can_bcast_user_d2
+ field = "Data 3", can_bcast_user_d3
+ field = "Data 4", can_bcast_user_d4
+ field = "Data 5", can_bcast_user_d5
+ field = "Data 6", can_bcast_user_d6
+ field = "Data 7", can_bcast_user_d7
+
+ dialog = canbroadcast, "CAN Broadcasting"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canbroadcast"
+ field = "Enable Broadcasting", can_bcast1_on
+ field = "Broadcast Interval", can_bcast_int, { can_bcast1_on }
+ field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on }
+ field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on }
+ field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on }
+ field = "0x316 RPM", can_bcast1_316, { can_bcast1_on }
+ field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on }
+ field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on }
+ field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on }
+ field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on }
+; field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on }
+ field = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
+
+ dialog = canvss, "CAN VSS and gear selection"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canvss"
+ field = "This is for polling the actual vehicle speed"
+ field = "mph/kph from a remote device."
+ field = "For a pulse input use the CAN PWM instead"
+ field = "Mode", can_poll2_vss
+ field = "Remote CAN Id", vss1_can_id, {can_poll2_vss}
+ field = "Remote CAN Table", vss1_can_table, {can_poll2_vss}
+ field = ""
+ field = "VSS1 Offset", vss1_can_offset, {(vss_opt0_1 == 1) && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss1_can_size, {vss_opt1 == 0x0e}
+ field = ""
+ field = "VSS2 Offset", vss2_can_offset, {(vss_opt0_2 == 1) && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = "Data Size", vss2_can_size, {vss_opt2 == 0x0e}
+ field = ""
+ field = "VSS3 Offset", vss3_can_offset, {(vss_opt0_1 == 1) && vss_opt0_3 && (vss_opt1 == 0x0e) && can_poll2_vss}
+ field = "VSS4 Offset", vss4_can_offset, {(vss_opt0_2 == 1) && vss_opt0_4 && (vss_opt2 == 0x0e) && can_poll2_vss}
+ field = ""
+ field = "Gear# Offset", gear_can_offset, {((gear_method & 0x03) == 0x03)}
+
+ dialog = canrtc, "Real Time Clock"
+ field = "Enable Real Time Clock", opt142_rtc
+ field = "Trim +/-", rtc_trim, {opt142_rtc}
+ field = "Remote CAN Id", can_poll_id_rtc, {(opt142_rtc == 2) && can_enable_on}
+ field = "Table", poll_table_rtc, {(opt142_rtc == 2) && can_enable_on }
+ field = "Offset", poll_offset_rtc, {(opt142_rtc == 2) && can_enable_on}
+
+ dialog = canego1, "EGO Data Via CAN"
+ field = "Fetch EGO Data", can_poll2_ego2
+ field = "Remote CAN Id", can_ego_id, {can_poll2_ego2}
+ field = "Table", can_ego_table, {can_poll2_ego2}
+ field = "Offset", can_ego_offset, {can_poll2_ego2}
+ field = "Smoothing", can_poll2_egolag, {can_poll2_ego2}
+
+ dialog = cangps, "GPS Data Via CAN"
+ field = "Fetch GPS Data", can_poll2_gps
+ field = "Remote CAN Id", can_gps_id, {can_poll2_gps}
+ field = "Table", can_gps_table, {can_poll2_gps}
+ field = "Offset", can_gps_offset, {can_poll2_gps}
+
+ dialog = canego, "CAN EGO, GPS", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#canegogps"
+ panel = canego1
+ panel = cangps
+
+ dialog = realtimeclock, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rtc"
+ panel = canrtc
+ panel = std_ms3Rtc
+
+ dialog = tablesw1, "Table Switching"
+ field = "Fuel Table Switching", f5_0_tsf, { !(dualfuel_sw_on && dualfuel_sw_fuel) }
+ field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "Input pin", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "RPM greater than", tsf_rpm, { f5_0_tsf && (f5_0_tsf_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "MAP greater than", tsf_kpa, { f5_0_tsf && (f5_0_tsf_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = "TPS greater than", tsf_tps, { f5_0_tsf && (f5_0_tsf_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_fuel)}
+ field = ""
+ field = "Spark Table Switching", f5_0_tss, { !(dualfuel_sw_on && dualfuel_sw_spk) }
+ field = "Switch Source", f5_0_tss_opt, { f5_0_tss && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "Input Pin", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) }
+ field = "RPM Greater Than", tss_rpm, { f5_0_tss && (f5_0_tss_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = "MAP Greater Than", tss_kpa, { f5_0_tss && (f5_0_tss_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+
+ field = "TPS Greater Than", tss_tps, { f5_0_tss && (f5_0_tss_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_spk)}
+ field = ""
+ field = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)}
+ field = "Alternate ReqFuel (Lower Number)", ReqFuel_alt, { tsw_pin_rf || (dualfuel_sw_on && dualfuel_sw_rf)}
+ field = ""
+ field = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)}
+ field = ""
+ field = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = "Alternate Stoich", stoich_alt, { tsw_pin_stoich || (dualfuel_sw_on && dualfuel_sw_stoich)}
+ field = ""
+ field = "Boost control table switching is on the boost control menu"
+
+ dialog = dualfuel, "Dual Fuel switching"
+ field = "Dual Fuel Enable", dualfuel_sw_on
+ field = "Mode", dualfuel_opt_mode, { dualfuel_sw_on }
+ field = "Outputs Mode", dualfuel_opt_out, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { dualfuel_sw_on && (dualfuel_opt_mode < 2) && (dualfuel_opt_out || dualfuel_opt_mode) }
+;was { ((dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && ((nCylinders <= 4)) || ((nCylinders > 4) && (sequential == 1))) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { (dualfuel_opt_mode < 2) && ((dualfuel_opt_out || dualfuel_opt_mode) && staged_extended_opts_use_v3) || ((nCylinders > 4) && (dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && !(sequential & 0x1)) }
+ field = "Input Pin", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Fuel Tables", dualfuel_sw_fuel, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Spark Tables", dualfuel_sw_spk, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AFR Tables", dualfuel_sw_afr, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. ReqFuel", dualfuel_sw_rf, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Stoich", dualfuel_sw_stoich, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Warmup", dualfuel_sw_wue, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. AfterStart", dualfuel_sw_ase, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Priming", dualfuel_sw2_prime, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Cranking Pulse", dualfuel_sw2_crank, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Injector Params", dualfuel_sw2_injp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Small Pulsewidths", dualfuel_sw2_smpw, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Alt. Overboost", dualfuel_sw2_ob, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Boost Table", dualfuel_sw2_boosw, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = "Alt. Accel Enrich", dualfuel_sw2_ae, { dualfuel_sw_on && (dualfuel_opt_mode != 1) }
+ field = ""
+ field = "Enable Temperature Adjustment", dualfuel_opt_temp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Temperature On", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp && (dualfuel_opt_mode == 0)}
+ field = "Enable Pressure Adjustment", dualfuel_opt_press, { dualfuel_sw_on && (dualfuel_opt_mode == 0) }
+ field = "Pressure In kPa On", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press && (dualfuel_opt_mode == 0)}
+ field = "Sensor Type", dualfuel_press_type, { dualfuel_sw_on && dualfuel_opt_press && dualfuel_press_sens && (dualfuel_opt_mode == 0)}
+
+ dialog = tablesw, "Table Switch/Dual Fuel", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tablesw"
+ panel = tablesw1, West
+ panel = dualfuel, East
+
+ dialog = outputTestbuttons1a, "", xAxis
+ ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
+ ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm.
+ ; a status bit there would be the expected real expression
+ commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)}
+
+ ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the
+ ; dialog close, but only if the enable condition is true
+ ; valid click flags are:
+ ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true
+ ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false
+ ; clickOnClose - the command will be sent on dialog close always
+ commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled
+
+ dialog = outputTestbuttons1b, ""
+ field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils"
+
+ dialog = outputTestbuttons1, "Test Mode Controls", yAxis
+ panel = outputTestbuttons1a
+ panel = outputTestbuttons1b
+
+ dialog = outputTestbuttons2, "Fuel pump", xAxis
+ commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 }
+ commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 }
+
+ dialog = outputtest_spk_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Coil-on-Plug)", testrpm
+ field = "Coil Testing Mode", testop_coil
+ field = "Coil Output To Test", testsel_coil
+ field = "Dwell", testdwell
+
+ dialog = outputtest_spk_r, "", yAxis
+ commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_inj_l, "", yAxis
+ field = "Output Interval", testint
+ displayOnlyField = "RPM (Full Sequential)", testrpm
+ field = "Injector Testing Mode", testop_inj
+ field = "Injector Channel To Test", testsel_inj
+ field = "Pulsewidth", testpw
+ field = "Total Number Of Injections", testinjcnt
+
+ dialog = outputtest_inj_r, "", yAxis
+ commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt }
+ commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 }
+
+ dialog = outputtest_spk, "Coil Testing", xAxis
+ panel = outputtest_spk_l
+ panel = outputtest_spk_r
+
+ dialog = outputtest_inj, "Injector Testing", xAxis
+ panel = outputtest_inj_l
+ panel = outputtest_inj_r
+
+ dialog = outputtest_controls, "Output Test Modes", yAxis
+ panel = outputTestbuttons1
+ panel = outputTestbuttons2
+ panel = outputtest_spk
+ panel = outputtest_inj
+
+ dialog = outputtest_r, "Reference Gauges", yAxis
+ gauge = voltMeter, North
+ gauge = injcountGauge, South
+
+ dialog = outputtest, "", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testinjspk"
+ panel = outputtest_controls
+ panel = outputtest_r
+
+ dialog = outputtest9, "Fuel Pump", yAxis
+ commandButton = "Off", cmdtest17off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest17on, { status3 & 8 }
+
+ dialog = outputtesta0, "Inj A", yAxis
+ commandButton = "Off", cmdtesta0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta0on, { status3 & 8 }
+ dialog = outputtesta1, "Inj B", yAxis
+ commandButton = "Off", cmdtesta1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta1on, { status3 & 8 }
+ dialog = outputtesta2, "Inj C", yAxis
+ commandButton = "Off", cmdtesta2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta2on, { status3 & 8 }
+ dialog = outputtesta3, "Inj D", yAxis
+ commandButton = "Off", cmdtesta3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta3on, { status3 & 8 }
+ dialog = outputtesta4, "Inj E", yAxis
+ commandButton = "Off", cmdtesta4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta4on, { status3 & 8 }
+ dialog = outputtesta5, "Inj F", yAxis
+ commandButton = "Off", cmdtesta5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta5on, { status3 & 8 }
+ dialog = outputtesta6, "Inj G", yAxis
+ commandButton = "Off", cmdtesta6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta6on, { status3 & 8 }
+ dialog = outputtesta7, "Inj H", yAxis
+ commandButton = "Off", cmdtesta7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtesta7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtesta7on, { status3 & 8 }
+
+ dialog = outputtest_io1inj, "Inj Outputs", xAxis
+ panel = outputtesta0
+ panel = outputtesta1
+ panel = outputtesta2
+ panel = outputtesta3
+ panel = outputtesta4
+ panel = outputtesta5
+ panel = outputtesta6
+ panel = outputtesta7
+
+ dialog = outputtestb0, "Spk A", yAxis
+ commandButton = "Off", cmdtestb0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb0on, { status3 & 8 }
+ dialog = outputtestb1, "Spk B", yAxis
+ commandButton = "Off", cmdtestb1off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb1on, { status3 & 8 }
+ dialog = outputtestb2, "Spk C", yAxis
+ commandButton = "Off", cmdtestb2off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb2on, { status3 & 8 }
+ dialog = outputtestb3, "Spk D", yAxis
+ commandButton = "Off", cmdtestb3off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb3on, { status3 & 8 }
+ dialog = outputtestb4, "Spk E", yAxis
+ commandButton = "Off", cmdtestb4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb4on, { status3 & 8 }
+ dialog = outputtestb5, "Spk F", yAxis
+ commandButton = "Off", cmdtestb5off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb5on, { status3 & 8 }
+ dialog = outputtestb6, "Spk G", yAxis
+ commandButton = "Off", cmdtestb6off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb6on, { status3 & 8 }
+ dialog = outputtestb7, "Spk H", yAxis
+ commandButton = "Off", cmdtestb7off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestb7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestb7on, { status3 & 8 }
+
+ dialog = outputtest_io1spk, "Spk Outputs", xAxis
+ panel = outputtestb0
+ panel = outputtestb1
+ panel = outputtestb2
+ panel = outputtestb3
+ panel = outputtestb4
+ panel = outputtestb5
+ panel = outputtestb6
+ panel = outputtestb7
+
+ dialog = outputtestcano0, "OUT1", yAxis
+ commandButton = "Off", cmdtestcano0off, { (status3 & 8) && (canout1_8 & 1) }
+; commandButton = "Pulsed", cmdtestcano0pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano0on, { (status3 & 8) && ((canout1_8 & 1) == 0) }
+ dialog = outputtestcano1, "OUT2", yAxis
+ commandButton = "Off", cmdtestcano1off, { (status3 & 8) && (canout1_8 & 2) }
+; commandButton = "Pulsed", cmdtestcano1pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano1on, { (status3 & 8) && ((canout1_8 & 2) == 0) }
+ dialog = outputtestcano2, "OUT3", yAxis
+ commandButton = "Off", cmdtestcano2off, { (status3 & 8) && (canout1_8 & 4) }
+; commandButton = "Pulsed", cmdtestcano2pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano2on, { (status3 & 8) && ((canout1_8 & 4) == 0) }
+ dialog = outputtestcano3, "OUT4", yAxis
+ commandButton = "Off", cmdtestcano3off, { (status3 & 8) && (canout1_8 & 8) }
+; commandButton = "Pulsed", cmdtestcano3pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano3on, { (status3 & 8) && ((canout1_8 & 8) == 0) }
+ dialog = outputtestcano4, "OUT5", yAxis
+ commandButton = "Off", cmdtestcano4off, { (status3 & 8) && (canout1_8 & 16) }
+; commandButton = "Pulsed", cmdtestcano4pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano4on, { (status3 & 8) && ((canout1_8 & 16) == 0) }
+ dialog = outputtestcano5, "OUT6", yAxis
+ commandButton = "Off", cmdtestcano5off, { (status3 & 8) && (canout1_8 & 32) }
+; commandButton = "Pulsed", cmdtestcano5pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano5on, { (status3 & 8) && ((canout1_8 & 32) == 0) }
+ dialog = outputtestcano6, "OUT7", yAxis
+ commandButton = "Off", cmdtestcano6off, { (status3 & 8) && (canout1_8 & 64) }
+; commandButton = "Pulsed", cmdtestcano6pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano6on, { (status3 & 8) && ((canout1_8 & 64) == 0) }
+ dialog = outputtestcano7, "OUT8", yAxis
+ commandButton = "Off", cmdtestcano7off, { (status3 & 8) && (canout1_8 & 128) }
+; commandButton = "Pulsed", cmdtestcano7pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano7on, { (status3 & 8) && ((canout1_8 & 128) == 0) }
+
+ dialog = outputtest_iocano, "CANOUT1-8", xAxis
+ panel = outputtestcano0
+ panel = outputtestcano1
+ panel = outputtestcano2
+ panel = outputtestcano3
+ panel = outputtestcano4
+ panel = outputtestcano5
+ panel = outputtestcano6
+ panel = outputtestcano7
+
+ dialog = outputtestcano8, "OUT9", yAxis
+ commandButton = "Off", cmdtestcano8off, { (status3 & 8) && (canout9_16 & 1) }
+; commandButton = "Pulsed", cmdtestcano8pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano8on, { (status3 & 8) && ((canout9_16 & 1) == 0) }
+ dialog = outputtestcano9, "OUT10", yAxis
+ commandButton = "Off", cmdtestcano9off, { (status3 & 8) && (canout9_16 & 2) }
+; commandButton = "Pulsed", cmdtestcano9pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano9on, { (status3 & 8) && ((canout9_16 & 2) == 0) }
+ dialog = outputtestcano10, "OUT11", yAxis
+ commandButton = "Off", cmdtestcano10off, { (status3 & 8) && (canout9_16 & 4) }
+; commandButton = "Pulsed", cmdtestcano10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano10on, { (status3 & 8) && ((canout9_16 & 4) == 0) }
+ dialog = outputtestcano11, "OUT12", yAxis
+ commandButton = "Off", cmdtestcano11off, { (status3 & 8) && (canout9_16 & 8) }
+; commandButton = "Pulsed", cmdtestcano11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano11on, { (status3 & 8) && ((canout9_16 & 8) == 0) }
+ dialog = outputtestcano12, "OUT13", yAxis
+ commandButton = "Off", cmdtestcano12off, { (status3 & 8) && (canout9_16 & 16) }
+; commandButton = "Pulsed", cmdtestcano12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano12on, { (status3 & 8) && ((canout9_16 & 16) == 0) }
+ dialog = outputtestcano13, "OUT14", yAxis
+ commandButton = "Off", cmdtestcano13off, { (status3 & 8) && (canout9_16 & 32) }
+; commandButton = "Pulsed", cmdtestcano13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano13on, { (status3 & 8) && ((canout9_16 & 32) == 0) }
+ dialog = outputtestcano14, "OUT15", yAxis
+ commandButton = "Off", cmdtestcano14off, { (status3 & 8) && (canout9_16 & 64) }
+; commandButton = "Pulsed", cmdtestcano14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano14on, { (status3 & 8) && ((canout9_16 & 64) == 0) }
+ dialog = outputtestcano15, "OUT16", yAxis
+ commandButton = "Off", cmdtestcano15off, { (status3 & 8) && (canout9_16 & 128) }
+; commandButton = "Pulsed", cmdtestcano15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtestcano15on, { (status3 & 8) && ((canout9_16 & 128) == 0) }
+
+ dialog = outputtest_iocano2, "CANOUT9-16", xAxis
+ panel = outputtestcano8
+ panel = outputtestcano9
+ panel = outputtestcano10
+ panel = outputtestcano11
+ panel = outputtestcano12
+ panel = outputtestcano13
+ panel = outputtestcano14
+ panel = outputtestcano15
+
+ dialog = outputtestcani0, "IN1", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 1 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 1) == 0 }
+ dialog = outputtestcani1, "IN2", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 2 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 2) == 0 }
+ dialog = outputtestcani2, "IN3", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 4 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 4) == 0 }
+ dialog = outputtestcani3, "IN4", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 8 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 8) == 0 }
+ dialog = outputtestcani4, "IN5", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 16 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 16) == 0 }
+ dialog = outputtestcani5, "IN6", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 32 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 32) == 0 }
+ dialog = outputtestcani6, "IN7", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 64 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 64) == 0 }
+ dialog = outputtestcani7, "IN8", yAxis
+ commandButton = "High", cmdnull, { canin1_8 & 128 }
+ commandButton = "Low", cmdnull, { (canin1_8 & 128) == 0 }
+
+ dialog = outputtest_iocani, "CANIN1-8 - read-only", xAxis
+ panel = outputtestcani0
+ panel = outputtestcani1
+ panel = outputtestcani2
+ panel = outputtestcani3
+ panel = outputtestcani4
+ panel = outputtestcani5
+ panel = outputtestcani6
+ panel = outputtestcani7
+
+
+ dialog = outputtest16, "PWM Out 2", yAxis
+ commandButton = "Off", cmdtest16off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest16on, { status3 & 8 }
+
+ dialog = outputtest10, "High Curr 3", yAxis
+ commandButton = "Off", cmdtest10off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest10on, { status3 & 8 }
+
+ dialog = outputtest11, "High Curr 1", yAxis
+ commandButton = "Off", cmdtest11off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest11on, { status3 & 8 }
+
+ dialog = outputtest12, "High Curr 2", yAxis
+ commandButton = "Off", cmdtest12off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest12on, { status3 & 8 }
+
+ dialog = outputtest13, "PWM Out 3", yAxis
+ commandButton = "Off", cmdtest13off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest13on, { status3 & 8 }
+
+ dialog = outputtest14, "PWM/Idle 1", yAxis
+ commandButton = "Off", cmdtest14off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest14on, { status3 & 8 }
+
+ dialog = outputtest15, "Tach Out", yAxis
+ commandButton = "Off", cmdtest15off, { status3 & 8 }
+ commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
+ commandButton = "On", cmdtest15on, { status3 & 8 }
+
+ dialog = outputtest_io_warning, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "The pin/port will be forced into an output overriding any other configuration."
+ field = "The Inj/Spk outputs must be used with additional caution to avoid flooding your engine or melting coils."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+
+ dialog = outputtest_io2_text, ""
+ field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK."
+ field = "After testing, turn off/on the ECU to restore normal settings."
+ field = ""
+
+ dialog = outputtest_io_pwm, "Pulse Settings", xAxis
+ field = "Pulse Frequency", pwm_testio
+ field = "Pulse Duty Cycle", duty_testio
+
+ dialog = outputtest_io1, "Outputs", xAxis
+ panel = outputtest9
+ panel = outputtest16
+ panel = outputtest10
+ panel = outputtest11
+ panel = outputtest12
+ panel = outputtest13
+ panel = outputtest14
+ panel = outputtest15
+
+ dialog = outputteste0, "IAC1", yAxis
+ commandButton = "Off", cmdteste0off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste0pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste0on, { status3 & 8 }
+
+ dialog = outputteste4, "IAC2", yAxis
+ commandButton = "Off", cmdteste4off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste4pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste4on, { status3 & 8 }
+
+ dialog = outputteste8, "InjI", yAxis
+ commandButton = "Off", cmdteste8off, { status3 & 8 }
+ commandButton = "Pulsed", cmdteste8pulsed, { status3 & 8 }
+ commandButton = "On", cmdteste8on, { status3 & 8 }
+
+ dialog = outputtestec, "InjJ", yAxis
+ commandButton = "Off", cmdtestecoff, { status3 & 8 }
+ commandButton = "Pulsed", cmdtestecpulsed, { status3 & 8 }
+ commandButton = "On", cmdtestecon, { status3 & 8 }
+
+
+
+
+
+ dialog = outputtest_io2, "Outputs", xAxis
+ panel = outputteste0
+ panel = outputteste4
+ panel = outputteste8
+ panel = outputtestec
+
+ dialog = outputtest_io, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1
+ panel = outputtest_io2
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io2, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_io_pwm
+ panel = outputtest_io1inj
+ panel = outputtest_io1spk
+ panel = outputtest_io_warning
+
+ dialog = outputtest_io3, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testio"
+ panel = outputTestbuttons1
+ panel = outputtest_iocano
+ panel = outputtest_iocano2
+ panel = outputtest_io2_text
+ panel = outputtest_iocani
+
+ dialog = iactest_l, "", yAxis
+ field = "Idle valve testing can be used with the engine running or stationary"
+ field = ""
+ field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 }
+ field = "Idle Valve Step (0-255)", iacpostest, { IdleCtl == 3 }
+ field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
+ field = "Set the steps before enabling testing"
+
+ dialog = iactest_r, "", yAxis
+ commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) }
+ commandButton = "Enable Test - Run Position", cmdtestiacon
+ commandButton = "Enable Test - In/Out Cycle", cmdtestiaccycle, { IdleCtl == 3 }
+ commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled
+
+ dialog = iactest_top, "", xAxis
+ panel = iactest_l
+ panel = iactest_r
+
+ dialog = iactest_bot, "", xAxis
+ gauge = IACgauge
+ gauge = PWMIdlegauge
+
+ dialog = iactest, "Output Test Mode - Idle Valve", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#testidle"
+ panel = iactest_top
+ panel = iactest_bot
+
+ dialog = injseqtest, "Injector Sequential Testing"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injseqtest"
+ commandButton = "Stop Testing", cmdtestinjnorm
+ commandButton = "Batch Fire", cmdtestinjbat
+ commandButton = "Semi Sequential", cmdtestinjsem
+ commandButton = "Full Sequential", cmdtestinjseq
+
+ dialog = special, "Special Options"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#special"
+ field = "Pulsewidth Scaling", feature3_pw4x
+ field = "Digital Switched 12V In Pulldown", feature3_n2oin
+
+; field = "U08 Debug 134, SPI baud", u08_debug134
+; field = "U16 Debug 640", u16_debug640
+; field = "SDcard Run/Test", u08_debug38_0
+ field = "Log trigger times to sensors9-16", u08_debug38_1
+ field = "Fuel flow/consumption calculation interval", fuelcalctime
+ field = "Maximum SpkAdj Value", spkadj_max
+ field = "Minimum SpkAdj Value", spkadj_min
+
+ dialog = lttrim, "Long Term Trim Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#lttrim"
+ field = "Enable Experi. Long Term Trim", ltt_opt_on
+ field = "Sample Interval", ltt_samp_time, {ltt_opt_on}
+ field = "Correction Softness", ltt_agg, {ltt_opt_on}
+ field = "Write Method", ltt_opt_mode, {ltt_opt_on}
+ field = "Burn Button", ltt_but_in, {ltt_opt_on && (ltt_opt_mode == 1)}
+ field = "Burn Interval", ltt_int, {ltt_opt_on && (ltt_opt_mode == 0)}
+ field = "LED Output", ltt_led_out,{ltt_opt_on}
+ field = "Total Change Before Burning", ltt_thresh, {ltt_opt_on}
+ field = "Display Current %Change In Sensor15", ltt_opt_feedback, {ltt_opt_on}
+ commandButton = "Read Table 1 To RAM", cmdlttr1
+ commandButton = "Read Table 2 To RAM", cmdlttr2
+ commandButton = "Burn Table To Flash", cmdlttw
+ commandButton = "Zero Tables", cmdlttz
+
+ dialog = RotaryTrailingSettings, "Rotary Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotary"
+ field = "See also Rotary Split Table"
+ field = "Output Mode", RotarySplitModeFD, { (twoStroke == 3) && (nCylinders == 2) && (spk_mode3 == 2) }
+ field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
+ field = "Trailing Dwell Time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
+
+ dialog = noisefiltering, "", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#noise"
+ field = "#GLOBAL TIMER NOISE FILTER DELAY"
+ field = "Noise Filter Period", dlyct
+ field = "#PRIMARY TACH (crank)"
+ field = "Noise Filter Enabled", NoiseFilterOpts
+ field = "Use noise filter curve to tune"
+ field = "Tach Period Rejection", NoiseFilterOpts1
+ field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0}
+ field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2}
+ field = "#SECONDARY TACH (cam)"
+ field = "Noise Filter Enabled", secondtrigopts;
+ field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 }
+ field = "Tach Period Rejection", secondtrigopts1
+ field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 }
+ field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
+ field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
+
+ dialog = noisefilterpad
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = Eastnoisefilter, "", yAxis
+ panel = NoiseFiltercurve
+ panel = noisefilterpad, South
+
+ dialog = noisefiltering2, "Noise Filtering", xAxis
+ panel = noisefiltering, West
+ panel = Eastnoisefilter, East
+
+ dialog = launchwest, ""
+ field = "Launch Control Option:", launch_opt_on
+ field = "LAUNCH"
+ field = "Input On:", launch_opt_pins, { launch_opt_on }
+ field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
+ field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
+ field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_on }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_on}
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
+ field = "Limiter Method", launchlimopt, { launch_opt_on >0}
+ field = "Disable Launch When VSS1 Above", launch_maxvss, { (launch_opt_on ) && (vss_opt0_1) }
+ field = "Limiter Settings",launchlimopt_adv , { launch_opt_on }
+ field = "Spark Limiter Type",launchlimopt_cut , { launch_opt_on && launchlimopt_adv}
+ field = "Spark Cut Zone",launchcutzone , { launch_opt_on && launchlimopt_adv}
+ field = "Cut Zone Timing",launchcuttiming , { launch_opt_on && launchlimopt_adv}
+ field = "FLAT SHIFT"
+ field = "Disable Flat-Shift When VSS1 Below", flats_minvss, { (launch_opt_on > 1) && (vss_opt0_1) }
+ field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 }
+ field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 }
+ field = "Soft Limit Retard To : ", flats_deg, { launch_opt_on >1 }
+ field = "Cut Fuel Above", launch_fcut_rpm, { (launchlimopt & 1) && (launch_opt_on >0) }
+ field = "TIMED RETARD"
+ field = "Timed Retard After Launch", launch_opt_retard, { launch_opt_on }
+
+ dialog = launchnortheast, "Variable Launch"
+ field = "Variable Launch Input", launch_var_on, { launch_opt_on >0 }
+ field = " -Minimum Setting", launch_var_low, {launch_var_on && launch_opt_on >0 }
+ field = " -Maximum Setting", launch_var_up, {launch_var_on && launch_opt_on >0 }
+
+ dialog = launchsoutheast, "3-Step / Burnout Limiter"
+ field = "3-step Input", launch_3step_in, {launch_opt_on >0 }
+ field = " -Soft Limit Retard To", launch_sft_deg3, {launch_3step_in && launch_opt_on >0}
+ field = " -Hard Limit", launch_hrd_lim3, {launch_3step_in && launch_opt_on >0}
+
+ dialog = llstg, "Line-Lock Staging"
+ field = "Button Input", llstg_in, {launch_opt_on >0 }
+ field = "Relay Output", llstg_out, {launch_opt_on && llstg_in }
+
+ dialog = launchtbtstop, "Transbrake, Throttle Stop"
+ field = "Transbrake Button Input", timedout1_in
+ field = "Transbrake Output", timedout1_out, {timedout1_in}
+ field = "Delay", timedout1_offdelay, {timedout1_in && timedout1_out}
+ field = "Turbo Staging Button", tcs_in, {timedout1_in}
+ field = "Release Time", tcs_offtime, {tcs_in && timedout1_in}
+ field = "On Time", tcs_ontime, {tcs_in && timedout1_in}
+ field = "Main # Moves", tcs_moves, {tcs_in && timedout1_in}
+ field = "Throttle Stop Output", tstop_out, { launch_opt_on }
+ field = "On Delay After Launch", tstop_delay, {tstop_out && launch_opt_on}
+ field = "Keep On For", tstop_hold, {tstop_out && launch_opt_on}
+
+ dialog = launcheast, "", yAxis
+ panel = launchnortheast
+ panel = launchtbtstop
+ panel = launchsoutheast
+ panel = llstg
+
+ dialog = launch, "Launch Control/ 2-Step / 3-Step / T-brake", xAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#launch"
+ panel = launchwest
+ panel = launcheast
+
+ dialog = vsslaunch1, ""
+ field = "Wheel-Speed Based Launch", launch_opt_vss
+ field = "ACTIVATION"
+ field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_vss}
+ field = "Timeout (0 = None)", launchvsstime, { launch_opt_vss}
+ field = "Re-arm Below Speed", launchvss_minvss, { launch_opt_vss}
+ field = "Enable Gear Checking", launch_opt_vssgear, { launch_opt_vss && gear_method }
+ field = "Maximum Gear", launchvss_maxgear, { launch_opt_vss && launch_opt_vssgear && gear_method}
+ field = "LIMITER"
+ field = "Limiter Method", launchlimopt, { launch_opt_vss}
+ field = "Hard limit is taken from the curve"
+ field = "Soft Limit Zone", launch_sft_zone, { launch_opt_vss }
+ field = "Retard To", launch_sft_deg, {launch_opt_vss }
+ field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_vss }
+ field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_vss}
+ field = "Limiter settings are shared with the launch control page."
+
+ dialog = vsslaunch, "Speed-Based Launch Control", xAxis
+ panel = vsslaunch1
+ panel = vsslaunch_curve
+
+ dialog = tacho, "Tacho Output"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tachoout"
+ field = "Tacho Output Enabled", tacho_opt80
+ field = "Output On:", tacho_opt3f, { tacho_opt80 }
+ field = "Fixed or variable", tacho_optvar, { tacho_opt80 }
+ field = "Speed", tacho_opt40, { tacho_opt80 && (tacho_optvar == 0) }
+ field = "Scaling", tacho_scale, { tacho_opt80 && (tacho_optvar == 1) }
+
+ dialog = overrun, "Over-Run Fuel Cut"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#overrun"
+ field = "Over-Run Fuel Cut", OvrRunC
+ field = "Cut fuel when:"
+ field = "RPM Greater Than:", fc_rpm, { OvrRunC }
+ field = "And MAP Lower Than: ", fc_kpa, { OvrRunC }
+ field = "And TPS Lower Than: ", fc_tps, { OvrRunC }
+ field = "And CLT Greater Than:", fc_clt, { OvrRunC }
+ field = "After Delay", fc_delay, { OvrRunC }
+ field = "Progressive Fuel Cut", OvrRunC_progcut, { OvrRunC }
+ field = "Ignition Timing Transition (Cut)", OvrRunC_progign, {OvrRunC}
+ field = "Ignition Timing During Over-Run", fc_timing, { OvrRunC && (OvrRunC_progign || OvrRunC_retign)}
+ field = "Cut Transition Time", fc_transition_time, { OvrRunC && (OvrRunC_progcut || OvrRunC_progign)}
+ field = "Progressive Fuel Return", OvrRunC_progret, { OvrRunC }
+ field = "Ignition Timing Transition Return", OvrRunC_retign, { OvrRunC }
+ field = "Return Transition Time", fc_trans_time_ret, { OvrRunC && (OvrRunC_progret || OvrRunC_retign) }
+ field = "Lowest RPM To Re-Engage Fuel:", fc_rpm_lower, { OvrRunC }
+ field = "RPMdot For Upper RPM Re-Engagement", fuelcut_fuelon_upper_rpmdot, { OvrRunC }
+ field = "RPMdot For Lower RPM Re-Engagement", fuelcut_fuelon_lower_rpmdot, { OvrRunC }
+ field = "Duration Of Fuel Adder", fc_ae_time, { OvrRunC }
+ field = "Size Of Fuel Adder", fc_ae_pct, { OvrRunC && fc_ae_time }
+ field = "Delay EGO After Fuel Return:", fc_ego_delay, { OvrRunC }
+
+ dialog = staging, "Staged Injection"
+ field = "Staged Injection First Parameter", staged_first_param
+ field = "Primary Injector Size", staged_pri_size, { staged_first_param }
+ field = "Secondary Injector Size", staged_sec_size, { staged_first_param }
+ field = "Transition Fully To Secondaries", staged_extended_opts_pw1off, { staged_first_param }
+ field = "Secondary Outputs", staged_extended_opts_use_v3, { staged_first_param && (staged_out1 == 0) }
+ field = "Secondary V3 Alternate", staged_extended_opts_simult, { ((staged_extended_opts_use_v3 && staged_first_param) || ((nCylinders > 4) && (staged_first_param) && (hardware_fuel) && !(sequential & 0x1))) && (staged_out1 == 0) }
+ field = ""
+ field = "Gradual Transition", staged_transition_on, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Transition Events", staged_transition_events, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Reduction Delay", staged_primary_delay, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = "Secondary Enrichment", staged_secondary_enrichment, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) }
+ field = ""
+ field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = ""
+ field = "Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) }
+ field = "Secondary Staging Threshold", staged_param_2, { staged_second_param }
+ field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param }
+ field = "Secondary Staging Logic", staged_second_logic, { staged_second_param }
+ field = ""
+ field = "Relay Output", staged_out1, { staged_first_param }
+ field = "Relay Output Polarity", staged_out1_inv, { staged_first_param && staged_out1}
+ field = "Pre-Relay Output", staged_out2, { staged_first_param }
+ field = "Pre-Relay Output Polarity", staged_out2_inv, { staged_first_param && staged_out2}
+ field = "Pre-Relay Timer", staged_out2_time, { staged_first_param && staged_out2}
+
+ dialog = stagedCombined, "Staged Injection", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#stagedinj"
+ panel = staging, West
+ panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
+
+ dialog = crsettings, "Cranking / Startup Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankstart"
+ field = "Cranking RPM", crankingRPM
+ field = ""
+ field = "Flood Clear TPS", floodClear
+ field = "Above this throttle no fuel is injected"
+ field = "Batch Fire During Crank", feature7_batchcrank, {sequential}
+ field = "Cranking Taper Curve", feature7_cranktaper
+ field = "Cranking Taper Curve Units", feature7_crtpunits, {feature7_cranktaper}
+ field = "Cranking Fuel Pulse Rate ", altcrank
+ field = "Blended Cranking Curves", alternate_blend
+ field = ""
+ field = "Priming Pulse Delay", primedelay
+ field = "Ignore MAT Correction During ASE", feature3_matase
+ field = "ASE Count Units", feature3_aseunit
+
+ dialog = generalSettings, "Baro Sensor Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#barocor"
+ field = "Barometric Correction", baroCorr
+ field = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
+ field = "Upper Limit", baro_upper, {baroCorr}
+ field = "Lower Limit", baro_lower, {baroCorr}
+ field = "Default Baro", baro_default, {baroCorr < 2}
+ field = "Old baro calc", loadopts_oldbaro
+ dialog = gsmap, "MAP Sensor Settings"
+ field = "MAP Sensor Type", mapport_t
+ field = "Voltage Input Port", mapport, {mapport_t == 0}
+ field = "Frequency Input Port", mapport_f, {mapport_t == 1}
+ field = "Low Frequency", map_freq0, {mapport_t == 1}
+ field = "High Frequency", map_freq1, {mapport_t == 1}
+ field = "2nd MAP Port", map2port, { (mapport_t == 0) }
+ field = "(See also Tools->Calibrate MAP/Baro)"
+
+ dialog = gsgen, "General Sensor Settings"
+ field = "MegaView Temp. Units", tempUnits
+ field = "MAP Averaging Lag Factor", mapLF
+ field = "MAF Averaging Lag Factor", mafLF
+ field = "RPM Averaging Lag Factor", rpmLF
+ field = "TPS Averaging Lag Factor", tpsLF
+ field = "Lambda Averaging Lag Factor", egoLF
+ field = "CLT/MAT/Battery/Baro Lag Factor", adcLF
+ field = "Auto-zero TPS", feature3_tps
+
+ dialog = secondaryLoad, "Load Parameters"
+ field = "Primary Fuel Load", algorithm
+ field = "Secondary Fuel Load", algorithm2
+ field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
+ field = "Multiply MAP (VE1/3)", loadMult
+ field = "99% of Speed-Density installs should use Multiply"
+ field = "Multiply MAP (VE2/4)", loadMult2, {algorithm2 && (loadCombine == 2)}
+ field = "Incorporate AFRTarget", loadStoich
+ field = "Stoichiometric AFR", stoich ;, { loadStoich } needed for lambda calc even if not incl AFR
+ field = "Primary Ignition Load", IgnAlgorithm
+ field = "Secondary Ignition Load", IgnAlgorithm2
+ field = "Secondary Ignition", loadCombineign, {IgnAlgorithm2}
+ field = "AFR table Load", afrload
+ field = "EAE curve Load", eaeload
+
+ dialog = overrun_note
+ field = "Overrun is on the fuel menu"
+
+ dialog = eastgeneral, ""
+ panel = secondaryLoad, North
+ panel = overrun_note, South
+
+ dialog = generalsettings3, "", border
+ panel = generalSettings, North
+ panel = gsmap, Center
+ panel = gsgen, South
+
+ dialog = generalsettings2, "General Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#genset"
+ panel = generalsettings3, West
+ panel = eastgeneral, East
+
+ dialog = revlimiter, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#revlim"
+ field = "HARD REV LIMIT"
+ field = "Hard Rev Limit", RevLimNormal2
+ field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst
+ field = "COOLANT TEMP LIMITER"
+ field = "Rev Limiter CLT Based", RevLimCLTbased
+ field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 }
+ field = "SPARK RETARD"
+ field = "Spark Retard Mode", RevLimOption_retard
+ field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 }
+ field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2}
+ field = "SPARK CUT"
+ field = "Enable Spark Cut Limiting", RevLimOption_spkcut
+ field = "FUEL CUT"
+ field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut
+ field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = revlimiter2, "Rev Limiter", border
+ panel = revlimiter, West
+ panel = revlimiterBins, Center, { RevLimCLTbased & 1 }
+
+ dialog = flexn, ""
+ field = "#Spark/Fuel"
+ field = "Sensor Frequency"
+ field = "Ethanol Mix"
+ field = "Fuel Multiplier%"
+ field = "Timing Addition"
+ field = "#Temp Sense"
+ field = "Sensor PW"
+ field = "Fuel Temp"
+
+ dialog = flexl, ""
+ field = "Low"
+ field = "", fuelFreq0, { flexFuel }
+ field = "", flex_pct0, { flexFuel }
+ field = "", fuelCorr0, { flexFuel }
+ field = "", fuelSpkDel0, { flexFuel }
+ field = "Low"
+ field = "", ff_tpw0, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp0, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = flexh, ""
+ field = "High"
+ field = "", fuelFreq1, { flexFuel }
+ field = "", flex_pct1, { flexFuel }
+ field = "", fuelCorr1, { flexFuel }
+ field = "", fuelSpkDel1, { flexFuel }
+ field = "High"
+ field = "", ff_tpw1, { flexFuel && (fueltemp1 == 1)}
+ field = "", ff_temp1, { flexFuel && (fueltemp1 == 1)}
+
+ dialog = ff_table1, "Flex Fuel Calibration", xAxis
+ panel = flexn
+ panel = flexl
+ panel = flexh
+
+ dialog = ff_fallback, "", yAxis
+ field = "Baseline Ethanol%", flex_baseline, { flexFuel }
+ field = "#Fallback For Sensor Failure"
+ field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
+ field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
+ field = "#Flex Blending (enabled on Dual Fuel menu)"
+ field = "Dual Fuel Mode", dualfuel_opt_mode, { 0 }
+
+ dialog = flexFuelTop, ""
+ field = "Flex Fuel Sensor", flexFuel
+ field = "Sensor Port", flexport, { flexFuel > 0 }
+ field = "Temperature Input", fueltemp1
+
+ dialog = flexFuelSettings, "Fuel Sensor Settings", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#flex"
+ panel = flexFuelTop
+ panel = ff_table1
+ panel = ff_fallback
+
+ dialog = sequentialOptions, "Sequential Fuel Injection"
+ field = "Main Fuel Outputs", hardware_fuel
+ field = "Sequential On", sequential
+ field = "Angle Specifies:", sequential_angle_spec, { sequential != 0 }
+ field = "Injector Trim", sequential_trim_on_off
+
+ dialog = firingorder1, "Firing Order"
+ field = "A.", firea
+ field = "B.", fireb, { nCylinders > 1}
+ field = "C.", firec, { nCylinders > 2}
+ field = "D.", fired, { nCylinders > 3}
+ field = "E.", firee, { nCylinders > 4}
+ field = "F.", firef, { nCylinders > 5}
+ field = "G.", fireg, { nCylinders > 6}
+ field = "H.", fireh, { nCylinders > 7}
+
+ dialog = firingorder2, "Firing Order"
+ field = "I.", firei, { nCylinders > 8}
+ field = "J.", firej, { nCylinders > 9}
+ field = "K.", firek, { nCylinders > 10}
+ field = "L.", firel, { nCylinders > 11}
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = firingorder, "", xAxis
+ panel = firingorder1, West
+ panel = firingorder2, East
+
+ dialog = seqfo, "", yAxis
+ panel = sequentialOptions
+ panel = firingorder
+
+ dialog = base3, "", yAxis
+ field = "Engine Size", enginesize
+ field = "Injector Size Each", staged_pri_size
+
+ dialog = base2, "", yAxis
+ panel = std_injection
+ panel = base3
+
+ dialog = base, "Engine and Sequential Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#engseq"
+ panel = base2, West
+ panel = seqfo, Center
+
+;main injector parameters
+ dialog = ot_ot, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", injOpen1
+ field = "B", injOpen2, {opentime_opt1_master}
+ field = "C", injOpen3, {opentime_opt1_master}
+ field = "D", injOpen4, {opentime_opt1_master}
+ field = "E", injOpen5, {opentime_opt1_master}
+ field = "F", injOpen6, {opentime_opt1_master}
+ field = "G", injOpen7, {opentime_opt1_master}
+ field = "H", injOpen8, {opentime_opt1_master}
+ field = "I", injOpena, {opentime_opt1_master}
+ field = "J", injOpenb, {opentime_opt1_master}
+ field = "K", injOpen11, {opentime_opt1_master}
+ field = "L", injOpen12, {opentime_opt1_master}
+
+ dialog = ot_curve, "", yAxis
+ field = "", opentime_opt1_master
+
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime_opt1
+ field = "", opentime_opt2, {opentime_opt1_master}
+ field = "", opentime_opt3, {opentime_opt1_master}
+ field = "", opentime_opt4, {opentime_opt1_master}
+ field = "", opentime_opt5, {opentime_opt1_master}
+ field = "", opentime_opt6, {opentime_opt1_master}
+ field = "", opentime_opt7, {opentime_opt1_master}
+ field = "", opentime_opt8, {opentime_opt1_master}
+ field = "", opentime_opta, {opentime_opt1_master}
+ field = "", opentime_optb, {opentime_opt1_master}
+ field = "", opentime_opt11, {opentime_opt1_master}
+ field = "", opentime_opt12, {opentime_opt1_master}
+
+ dialog = injchar_ms3x, "Injectors", xAxis
+ panel = ot_ot
+ panel = ot_curve
+
+; 9-16
+
+
+ dialog = injcurveswest, "", yAxis
+ panel = opencurve0, North
+ panel = opencurve2, South
+
+ dialog = injcurveseast, "", yAxis
+ panel = opencurve1, North
+ panel = opencurve3, South
+
+ dialog = injcurves, "", xAxis
+ panel = injcurveswest
+ panel = injcurveseast
+
+
+ dialog = injCharswest, "", yAxis
+ panel = injchar_ms3x, North
+
+ dialog = injsettings, "", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt"
+ panel = injCharswest, West
+ panel = injcurves, Center
+
+; table-switched alternate parameters
+
+
+
+ dialog = ot_ot2, "", yAxis
+ field = "Inj Parameters"
+ field = "Dead-Time"
+ field = "@ 100%"
+ field = "A", inj2Open1
+ field = "B", inj2Open2, {opentime2_opt1_master}
+ field = "C", inj2Open3, {opentime2_opt1_master}
+ field = "D", inj2Open4, {opentime2_opt1_master}
+ field = "E", inj2Open5, {opentime2_opt1_master}
+ field = "F", inj2Open6, {opentime2_opt1_master}
+ field = "G", inj2Open7, {opentime2_opt1_master}
+ field = "H", inj2Open8, {opentime2_opt1_master}
+ field = "I", inj2Opena, {opentime2_opt1_master}
+ field = "J", inj2Openb, {opentime2_opt1_master}
+ field = "K", inj2Open11, {opentime2_opt1_master}
+ field = "L", inj2Open12, {opentime2_opt1_master}
+
+ dialog = ot_curve2, "", yAxis
+ field = "", opentime2_opt1_master
+ field = "Voltage Dead"
+ field = "Time Curve"
+ field = "", opentime2_opt1
+ field = "", opentime2_opt2, {opentime2_opt1_master}
+ field = "", opentime2_opt3, {opentime2_opt1_master}
+ field = "", opentime2_opt4, {opentime2_opt1_master}
+ field = "", opentime2_opt5, {opentime2_opt1_master}
+ field = "", opentime2_opt6, {opentime2_opt1_master}
+ field = "", opentime2_opt7, {opentime2_opt1_master}
+ field = "", opentime2_opt8, {opentime2_opt1_master}
+ field = "", opentime2_opta, {opentime2_opt1_master}
+ field = "", opentime2_optb, {opentime2_opt1_master}
+ field = "", opentime2_opt11, {opentime2_opt1_master}
+ field = "", opentime2_opt12, {opentime2_opt1_master}
+
+ dialog = injchar_ms3x_2, "Injectors", xAxis
+ panel = ot_ot2
+ panel = ot_curve2
+
+
+
+ dialog = injCharswest2, "", yAxis
+ panel = injchar_ms3x_2, North
+
+ dialog = injsettings2, ""
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injdt2"
+ panel = injCharswest2
+
+ dialog = smallpwwest2, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw2_opt1_master
+ field = "(This is for the alternate injectors from dual-fuel)"
+
+ field = "Injector A", smallpw2_opt1, { smallpw2_opt1_master }
+ field = "Injector B", smallpw2_opt2, { smallpw2_opt1_master }
+ field = "Injector C", smallpw2_opt3, { smallpw2_opt1_master }
+ field = "Injector D", smallpw2_opt4, { smallpw2_opt1_master }
+ field = "Injector E", smallpw2_opt5, { smallpw2_opt1_master }
+ field = "Injector F", smallpw2_opt6, { smallpw2_opt1_master }
+ field = "Injector G", smallpw2_opt7, { smallpw2_opt1_master }
+ field = "Injector H", smallpw2_opt8, { smallpw2_opt1_master }
+ field = "Injector I", smallpw2_opta, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw2_optb, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw2_opt11, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw2_opt12, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+
+ dialog = smallpw2, "Injector Small Pulsewidths 2", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw2"
+ panel = smallpwwest2, West
+
+ dialog = smallpwwest, ""
+ field = "Enable Non-Linear Small Pulsewidths", smallpw_opt1_master
+ field = "!CAUTION!"
+ field = "Unless you have specific injector data these"
+ field = "'curves' must be a straight line from 0-2"
+ field = "Ensure the start and end points are equal"
+ field = "(e.g. 0.000, 0.000 and 2.000, 2.000)"
+ field = "Select the pulsewidth curve for each injector"
+
+
+ field = "Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) }
+ field = "Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) }
+ field = "Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) }
+ field = "Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) }
+ field = "Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) }
+ field = "Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) }
+ field = "Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) }
+ field = "Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) }
+ field = "Injector I", smallpw_opta, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 8)) }
+ field = "Injector J", smallpw_optb, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 9)) }
+ field = "Injector K", smallpw_opt11, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 10)) }
+ field = "Injector L", smallpw_opt12, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 11)) }
+
+ dialog = smallcurveswest, "", yAxis
+ panel = smallcurve0
+ panel = smallcurve2
+
+ dialog = smallcurveseast, "", yAxis
+ panel = smallcurve1
+ panel = smallcurve3
+
+ dialog = smallcurves, "", xAxis
+ panel = smallcurveswest
+ panel = smallcurveseast
+
+ dialog = smallpw, "Injector Small Pulsewidths", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injsmallpw"
+ panel = smallpwwest, West
+ panel = smallcurves, Center
+
+
+
+ ; dialog = egoControl, "EGO Control"
+ dialog = egoControlright, ""
+ field = "Algorithm", egoAlgorithm, { egoType }
+ field = "Use EGO Delay Table", egoAlgorithm_delay_table, {egoType && (egoAlgorithm < 3)}
+ field = "Ignition Events Per Step", egoCount, { egoType && (egoAlgorithm < 3) && !egoAlgorithm_delay_table}
+ field = "EGO Sensor Response Time", ego_sensor_delay, { egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table}
+ field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) }
+ field = "Use Authority Table", egoAlgorithm_auth, { egoType }
+ field = "Controller Auth +/-", egoLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Only Correct Above:", ego_lower_bound, { egoType && (egoAlgorithm < 3) }
+ field = "And Correct Below:", ego_upper_bound, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
+ field = "Active Above RPM", egoRPM, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Below TPS", TPSOXLimit, { egoType && (egoAlgorithm < 3) }
+ field = "Active Below Load", MAPOXLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "Active Above Load", MAPOXMin, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) }
+ field = "EGO Delay After Start", ego_startdelay, { egoType && (egoAlgorithm < 3) }
+ field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
+ field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
+ field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
+
+ dialog = egoports, "",yAxis
+ field = "EGO 1 Port", egoport1
+ field = "EGO 2 Port", egoport2, {egonum > 1}
+ field = "EGO 3 Port", egoport3, {egonum > 2}
+ field = "EGO 4 Port", egoport4, {egonum > 3}
+ field = "EGO 5 Port", egoport5, {egonum > 4}
+ field = "EGO 6 Port", egoport6, {egonum > 5}
+ field = "EGO 7 Port", egoport7, {egonum > 6}
+ field = "EGO 8 Port", egoport8, {egonum > 7}
+ field = "EGO 9 Port", egoport9, {egonum > 8}
+ field = "EGO 10 Port", egoport10, {egonum > 9}
+ field = "EGO 11 Port", egoport11, {egonum > 10}
+ field = "EGO 12 Port", egoport12, {egonum > 11}
+
+; not implemented
+; dialog = egoports_tgt, "", yAxis
+; field = "AFR target"
+; field = "", egomap1t
+; field = "", egomap2t, {egonum > 1}
+; field = "", egomap3t, {egonum > 2}
+; field = "", egomap4t, {egonum > 3}
+; field = "", egomap5t, {egonum > 4}
+; field = "", egomap6t, {egonum > 5}
+; field = "", egomap7t, {egonum > 6}
+; field = "", egomap8t, {egonum > 7}
+
+ dialog = egoports2, "EGO ports", xAxis
+ panel = egoports
+ ; panel = egoports_tgt
+
+ dialog = egoControlleft, "", yAxis
+ field = "EGO Sensor Type", egoType
+ field = "Number Of Sensors", egonum, { egoType }
+ field = "#Remember to Calibrate and set Project Properties"
+ panel = egoports2
+
+ dialog = egoControlmain, "", xAxis
+ panel = egoControlright, West
+ panel = egoControlleft, East
+
+
+ dialog = egomap_inj, "", yAxis
+ field = "Injector"
+ field = "Inj A"
+ field = "Inj B"
+ field = "Inj C"
+ field = "Inj D"
+ field = "Inj E"
+ field = "Inj F"
+ field = "Inj G"
+ field = "Inj H"
+ field = "Inj I"
+ field = "Inj J"
+ field = "Inj K"
+ field = "Inj L"
+
+ dialog = egomap_ego, "", yAxis
+ field = "- Uses Sensor"
+ field = "", egomap1
+ field = "", egomap2
+ field = "", egomap3
+ field = "", egomap4
+ field = "", egomap5
+ field = "", egomap6
+ field = "", egomap7
+ field = "", egomap8
+ field = "", egomap9
+ field = "", egomap10
+ field = "", egomap11
+ field = "", egomap12
+
+ dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis
+ panel = egomap_inj
+ panel = egomap_ego
+
+ dialog = egoControl, "AFR / EGO Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egocont"
+ panel = egoControlmain, West
+ panel = egomapping, East
+
+
+
+
+
+
+ dialog = ignitionOptions, ""
+ field = "Spark Mode (Dizzy, EDIS, Wheel)", spk_mode0 ; !
+ field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)}
+ field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12}
+ field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 < 31) && (spk_conf2_oddodd != 3) }
+ field = "HEI/GMDIS, TFI, C3I Options", spk_conf2_gmtfi, {(spk_mode0 == 2) || (spk_mode0 == 4)}
+ field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)}
+ field = "Skip Pulses", no_skip_pulses
+ field = "Ignition Input Capture", ICIgnCapture ; !
+ field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ;
+ field = "Number Of Coils", spk_mode3
+ field = "Spark Hardware In Use", hardware_spk
+ field = "Cam Input (See tooltip)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
+ field = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47}
+ field = "Flip Polarity On Hi-Res Tach / Cam", spk_mode3_hirespol, { (spk_mode0 != 4) }
+
+ dialog = moreIgnitionOptions, ""
+ field = "Fixed Advance", timing_flags
+ field = "Use Prediction", use_prediction
+ field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 };
+ field = "Cranking Dwell", crank_dwell
+ field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) }
+ field = ""
+ field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2}
+ field = "Dwell type", dwellmode
+ field = "Use Dwell vs Rpm Curve", spk_conf2_dwell, {dwellmode ==2}
+ field = "Use Dwell Table", spk_conf2_dwelltbl, {dwellmode ==0}
+ field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) && (spk_conf2_dwelltbl==0)}
+ field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
+ field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) && (spk_conf2_dwell==0)}
+ field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) }
+ field = "NOTE: Spark hardware latency should ONLY be used if"
+ field = "you notice spark retard with increasing rpms."
+ field = "Spark Hardware Latency", hw_latency
+ field = "Middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) }
+ field = "Spark Trim", spk_mode3_trim
+ field = "Kick-start crank delay", spk_mode3_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
+ field = "Delay", kickdelay, { spk_mode3_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) }
+
+ dialog = triggerWheel, ""
+ field = "Trigger Wheel Arrangement", spk_config_trig2, { spk_mode0 == 4 }
+ field = "Trigger Wheel Teeth", triggerTeeth, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
+ field = "Tooth #1 Angle", Miss_ang, { (spk_mode0 == 4) || (spk_mode0 == 47) }
+ field = "Main Wheel Speed", spk_config_camcrank, { (spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))}
+ field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && spk_mode0 == 4}
+ field = "Level For Phase 1", spk_config_campol, {(spk_mode0 == 25) || ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "Check At Tooth#", poll_level_tooth, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)}
+ field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && spk_mode0 == 4}
+
+ dialog = padignition
+ field = ""
+
+ dialog = westIgnitionOptions, "", yAxis
+ panel = ignitionOptions
+ panel = triggerWheel
+
+ dialog = oddfireangles1, ""
+ field = "Custom Oddfire Angles In Sequence From #1"
+
+ dialog = oddfireangles3, "", xAxis
+ field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = oddfireangles5, "", xAxis
+ field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+ field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)}
+
+ dialog = eastIgnitionOptions, "", yAxis
+ panel = moreIgnitionOptions
+ panel = oddfireangles1
+ panel = oddfireangles3
+ panel = oddfireangles5
+
+ dialog = IgnitionOptions_join, "", xAxis
+ panel = westIgnitionOptions
+ panel = eastIgnitionOptions
+
+ dialog = combinedignition, "Ignition Options / Wheel Decoder", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ignopts"
+ ; panel = westIgnitionOptions, West
+ panel = IgnitionOptions_join, Center
+
+ dialog = northwestidle, "", yAxis
+ field = "Idle Valve Type", IdleCtl
+ field = "Algorithm", IdleCtl_alg, {IdleCtl > 1}
+
+ dialog = northeastidle, "", yAxis
+ field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 }
+ field = "Hysteresis", IdleHyst, { IdleCtl == 1 }
+
+ dialog = westidle, "Stepper Idle"
+ field = "Time Step Size", IACtstep, { IdleCtl == 3 }
+ field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 }
+ field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 }
+ field = "Homing Steps", IACStart, { IdleCtl == 3 }
+ field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 }
+ field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) }
+ field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
+ field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
+
+ dialog = eastidle, "PWM Idle"
+ field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
+ field = ""
+ field = "Valve mode", pwmidleset_inv, { IdleCtl == 2 }
+ field = "Run Valve Before Start", pwmidle_freq_koeo, { IdleCtl == 2 }
+ field = "Output Port", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) }
+ field = "3 Wire Mode", pwmidle_freq_pin3, { IdleCtl == 2 }
+
+ field = "Frequency", pwmidle_freq_scale, { IdleCtl == 2 }
+ field = "This frequency may be shared with boost control"
+
+ dialog = northidle, "", border
+ panel = northwestidle, West
+ panel = northeastidle, East
+
+ dialog = southidle, "", border
+ panel = westidle, West
+ panel = eastidle, East
+
+ dialog = combinedidle, "Idle Control", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idle"
+ panel = northidle, North
+ panel = southidle, South
+
+ dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidle"
+ field = "Idle Valve Minimum Duty", pwmidle_closed_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Idle Valve Maximum Duty", pwmidle_open_duty, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Dashpot Adder", pwmidle_dp_adder, { (IdleCtl == 2) && (IdleCtl_alg == 1) }
+ field = "Use Last Value or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
+ field = "Idle Valve Minimum Steps", pwmidle_closed_steps, { (IdleCtl == 3) }
+ field = "Idle Valve Maximum Steps", pwmidle_open_steps, { (IdleCtl == 3) }
+ field = "Dashpot Adder", pwmidle_dp_adder_steps
+ field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable
+ field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable }
+ field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay
+ field = "Shift Settings"
+ field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 }
+ field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 }
+
+ dialog = pwmidle_closedloop, "", card
+ panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
+ panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
+
+
+ dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
+ slider = "Closed-Loop Sensitivity", pwmidle_max_rpm_new, horizontal
+ field = "Tuning Mode", pwmidle_cl_opts_display_pid
+ field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_cl_opts_display_pid }
+ field = "Integral Gain", pwmidle_Ki_new, { pwmidle_cl_opts_display_pid }
+ field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_cl_opts_display_pid }
+
+ dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior"
+ field = "PID Delay", pwmidle_pid_wait_timer
+ field = "Crank To Run Taper", pwmidlecranktaper
+ field = "PID Ramp To Target Time", pwmidle_targ_ramptime
+ field = "PID Control Interval", pwmidle_ms
+ field = "PID Disable RPMdot", pwmidle_rpmdot_disablepid, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
+ field = "Use VSS To Activate PID", IdleCtl_vss
+ field = "Minimum VSS1", idleminvss, {IdleCtl_vss}
+ field = "Idle Activation TPS Threshold", pwmidle_tps_threshold
+ field = "RPMdot Threshold", pwmidle_rpmdot_threshold, { IdleCtl_vss != 1 }
+ field = "Max Decel Load", pwmidle_decelload_threshold, { IdleCtl_vss != 1 }
+
+ dialog = pwmidle_empty, ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+ field = ""
+
+ dialog = pwmidle_west_panel, "", yAxis
+ panel = pwmidle_closedloop
+ panel = pwmidle_PID_gains
+
+ dialog = pwmidle_mid_panel, "", yAxis
+ panel = pwmidle_PID_behavior
+ panel = pwmidle_PID_activation
+ panel = pwmidle_empty
+
+ dialog = combinedCLidle, "Closed-Loop Idle Settings", xAxis
+ panel = pwmidle_mid_panel
+ panel = pwmidle_west_panel
+
+; first accel page
+ dialog = accelsettings, "Accel Enrich Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aeset"
+ field = "Use Time-Based or Accel-Pump Accel", AE_options
+ field = "Wall-Wetting AE (EAE, X-tau)", EAEOption
+ field = "TPSdot Uses %WOT", feature7_aetpswot
+ field = "X-Tau MAPdot Thresholds for transition to X, Tau Decel Tables"
+ field = "Start Transition", MapThreshXTD, {EAEOption > 2}
+ field = "Finish Transition", MapThreshXTD2, {EAEOption > 2}
+
+;time based AE
+ dialog = time_ae_south_west, ""
+ field = "Accel MAPdot threshold", mapThresh
+ field = "End Pulsewidth", aeEndPW
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", tpsasync_events, { feature7_aeevents }
+ field = "Accel Taper", tpsasync2_events, { feature7_aeevents }
+ field = "Accel Time", taeTime, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime, { !feature7_aeevents }
+
+ dialog = time_ae_south_east, ""
+ field = "Accel TPSdot Threshold", tpsThresh
+ field = "Decel Fuel Amount", tdePct
+ field = "Cold Accel Adder", taeColdA
+ field = "Cold Accel Multiplier", taeColdM
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = time_ae_south_south, "", xAxis
+ panel = time_ae_south_west
+ panel = time_ae_south_east
+
+ dialog = time_ae_south, "", yAxis
+ liveGraph = timeaeGraph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south
+
+ dialog = time_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal
+
+ dialog = time_ae_north, "", xAxis
+ panel = time_accel_mapdot_curve, West, {tpsProportion < 100}
+ panel = time_accel_tpsdot_curve, East, {tpsProportion > 0}
+
+ dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north
+ panel = time_ae_mid
+ panel = time_ae_south
+
+;accel-pump
+
+ dialog = pump_ae_south_west, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier
+
+ dialog = pump_ae_south_east, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south, "", xAxis
+ panel = pump_ae_south_west
+ panel = pump_ae_south_east
+
+ dialog = pump_ae_south, "", yAxis
+ liveGraph = pump_ae_Graph, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south
+
+ dialog = pump_ae_north, "", xAxis
+ panel = pump_accel_mapdot_curve, West, {accel_blend_percent < 100}
+ panel = pump_accel_tpsdot_curve, East, {accel_blend_percent > 0}
+
+ dialog = pump_ae_mid, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent, horizontal
+
+ dialog = AEpump_settings, "Accel-Pump Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north
+ panel = pump_ae_mid
+ panel = pump_ae_south
+
+;time based AE (2)
+ dialog = time_ae_south_west2, ""
+ field = "Accel MAPdot threshold", mapThresh2
+ field = "End Pulsewidth", aeEndPW2
+ field = "Time Or Ignition Events", feature7_aeevents
+ field = "Accel Duration", taeTime_events2, { feature7_aeevents }
+ field = "Accel Taper", aeTaperTime_events2, { feature7_aeevents }
+ field = "Accel Time", taeTime2, { !feature7_aeevents }
+ field = "Accel Taper Time", aeTaperTime2, { !feature7_aeevents }
+
+ dialog = time_ae_south_east2, ""
+ field = "Accel TPSdot Threshold", tpsThresh2
+ field = "Decel Fuel Amount", tdePct2
+ field = "Cold Accel Adder", taeColdA2
+ field = "Cold Accel Multiplier", taeColdM2
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = time_ae_south_south2, "", xAxis
+ panel = time_ae_south_west2
+ panel = time_ae_south_east2
+
+ dialog = time_ae_south2, "", yAxis
+ liveGraph = timeaeGraph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = time_ae_south_south2
+
+ dialog = time_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion2, horizontal
+
+ dialog = time_ae_north2, "", xAxis
+ panel = time_accel_mapdot_curve2, West, {tpsProportion2 < 100}
+ panel = time_accel_tpsdot_curve2, East, {tpsProportion2 > 0}
+
+ dialog = AEtime_settings2, "Time-Based Accel Enrichment", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aetime"
+ panel = time_ae_north2
+ panel = time_ae_mid2
+ panel = time_ae_south2
+
+;accel-pump (2)
+
+ dialog = pump_ae_south_west2, ""
+ field = "Accel MAPdot Threshold", accel_mapdot_threshold2, { accel_blend_percent < 100 }
+ field = "Accel TPSdot Threshold", accel_tpsdot_threshold2, { accel_blend_percent > 0 }
+ field = "Cold Accel Multiplier", accel_CLT_multiplier2
+
+ dialog = pump_ae_south_east2, ""
+ field = "Accel Enrich Down-Scaling With RPM"
+ field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents }
+ field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents }
+
+ dialog = pump_ae_south_south2, "", xAxis
+ panel = pump_ae_south_west2
+ panel = pump_ae_south_east2
+
+ dialog = pump_ae_south2, "", yAxis
+ liveGraph = pump_ae_Graph2, "AE Graph", South
+ graphLine = afr1
+ graphLine = TPSdot, "%", -2000, 2000, auto, auto
+ graphLine = MAPdot, "%", -2000, 2000, auto, auto
+ panel = pump_ae_south_south2
+
+ dialog = pump_ae_north2, "", xAxis
+ panel = pump_accel_mapdot_curve2, West, {accel_blend_percent2 < 100}
+ panel = pump_accel_tpsdot_curve2, East, {accel_blend_percent2 > 0}
+
+ dialog = pump_ae_mid2, ""
+ slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent2, horizontal
+
+ dialog = AEpump_settings2, "Accel-Pump Accel Enrichment 2", yAxis
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#accelpump"
+ panel = pump_ae_north2
+ panel = pump_ae_mid2
+ panel = pump_ae_south2
+
+ dialog = sensorCal, "Calibrate MAP/Baro"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#calmapbaro"
+ field = "#MAP Sensor"
+#if INI_VERSION_2
+ settingSelector = "Common MAP Sensors"
+ settingOption = "MPX4115", map0=10.6, mapmax=121.7
+ settingOption = "MPX4250", map0=10, mapmax=260
+ settingOption = "GM 1-BAR", map0=10, mapmax=105
+ settingOption = "GM 2-BAR", map0=8.8, mapmax=208
+ settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5
+ settingOption = "MPXH6400", map0=3.5, mapmax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", map0
+ field = "Value At 5.0 Volts", mapmax
+
+ field = "#Barometer Sensor (usually identical to MAP)"
+#if INI_VERSION_2
+ settingSelector = "Common Baro Sensors"
+ settingOption = "MPX4115", baro0=10.6, baromax=121.7
+ settingOption = "MPX4250", baro0=10, baromax=260
+ settingOption = "GM 1-BAR", baro0=10, baromax=105
+ settingOption = "GM 2-BAR", baro0=8.8, baromax=208
+ settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5
+ settingOption = "MPXH6400", baro0=3.5, baromax=416.5
+ settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3
+ settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7
+#endif
+ field = "Value At 0.0 Volts", baro0
+ field = "Value At 5.0 Volts", baromax
+
+ field = "#Barometric Correction"
+ field = "At Total Vacuum ", bcor0
+ field = "Rate", bcormult
+
+ dialog = knockSettings3, "Knock Sensor Settings"
+ field = "Knock Control", knk_option
+ field = "Input Type", knk_option_an, { knk_option }
+ field = "Knock Input Pin", knkport, { knk_option && !knk_option_an }
+ field = "Knock Indicated By:", knkDirection, { knk_option && !knk_option_an }
+ field = "Pullup/Down On Input", knkpull, { knk_option && !knk_option_an }
+ field = "Input Pin", knkport_an, { knk_option && (knk_option_an == 1) }
+ field = "Window Sample Type", knk_option_wind, { knk_option && (knk_option_an == 1) }
+ field = "Window Output", knk_pin_out, { knk_option && (knk_option_an < 2) }
+ field = "Monitor Per Cylinder", knock_conf_percyl, { knk_option > 0 }
+ field = "Control Per Cylinder", knock_conf_percylact, { knk_option > 0 }
+ field = "DEBUG data", knock_conf_debug, { knk_option > 0 }
+ field = "#Detection"
+ field = "Knock Count", knk_ndet, { knk_option > 0 }
+ field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 }
+ field = "RPM Window Low", knk_lorpm, { knk_option > 0 }
+ field = "RPM Window High", knk_hirpm, { knk_option > 0 }
+ field = "Ignore During Launch/Flatshift", knock_conf_launch, { knk_option > 0 }
+ field = "#Retarding"
+ field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
+ field = "Retard Check Time", knk_trtd, { knk_option > 0 }
+ field = "Retard Coarse Step Size", knk_step1, { knk_option > 0 }
+ field = "Retard Fine Step Size", knk_step2, { knk_option > 0 }
+ field = "#Recovery"
+ field = "Advance Check Time", knk_tadv, { knk_option > 0 }
+ field = "Advance Step Size", knk_step_adv, { knk_option > 0 }
+ field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
+
+ dialog = ks4a, "", yAxis
+ field = "Cyl#"
+ field = "1"
+ field = "2"
+ field = "3"
+ field = "4"
+ field = "5"
+ field = "6"
+ field = "7"
+ field = "8"
+ field = "9"
+ field = "10"
+ field = "11"
+ field = "12"
+ dialog = ks4b, "", yAxis
+
+ field = "Gain"
+ field = "", knock_gain01
+ field = "", knock_gain02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_gain03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_gain04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_gain05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_gain06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_gain07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_gain08, {knock_conf_percyl && (nCylinders >7)}
+ field = "", knock_gain09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_gain10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_gain11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_gain12, {knock_conf_percyl && (nCylinders >11)}
+
+ dialog = ks4c, "", yAxis
+ field = "Sensor"
+ field = "", knock_sens01
+ field = "", knock_sens02, {knock_conf_percyl && (nCylinders >1)}
+ field = "", knock_sens03, {knock_conf_percyl && (nCylinders >2)}
+ field = "", knock_sens04, {knock_conf_percyl && (nCylinders >3)}
+ field = "", knock_sens05, {knock_conf_percyl && (nCylinders >4)}
+ field = "", knock_sens06, {knock_conf_percyl && (nCylinders >5)}
+ field = "", knock_sens07, {knock_conf_percyl && (nCylinders >6)}
+ field = "", knock_sens08, {knock_conf_percyl && (nCylinders >7)}
+ field = "", knock_sens09, {knock_conf_percyl && (nCylinders >8)}
+ field = "", knock_sens10, {knock_conf_percyl && (nCylinders >9)}
+ field = "", knock_sens11, {knock_conf_percyl && (nCylinders >10)}
+ field = "", knock_sens12, {knock_conf_percyl && (nCylinders >11)}
+ dialog = ks4bot, "", xAxis
+ panel = ks4a
+ panel = ks4b
+ panel = ks4c
+
+ dialog = ks4top, ""
+ field = "Bandpass Frequency (kHz)", knock_bpass
+ field = "Integrator Time constant (us)", knock_int
+ field = "Number of Sensors", knock_conf_num
+ field = "Monitor Per Cylinder", knock_conf_percyl
+ field = "Knock gain:"
+
+ dialog = knockSettings4, "Knock Sensor Parameters", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockparam"
+ panel = ks4top, North
+ panel = ks4bot, South
+
+ dialog = knockSettings, "Knock Sensor Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knock"
+ panel = knockSettings3, West
+ panel = knockthresh_curve, Center
+
+ dialog = knockSettings2, "Knock Window Settings", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockwindow"
+ panel = knockstart_curve, North
+ panel = knockduration_curve, South
+
+ dialog = idleAdvancemenu, "Idle Advance Settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadv"
+ field = "Idle Advance On", idleadvance_on
+ field = "Idle RPM Timing Correction", idle_special_ops_timing_assist
+ field = "Go to idle advance/Idle RPM timing correction when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleadv, { idleadvance_on || idle_special_ops_timing_assist }
+ field = "TPS Is Below:", idleadvance_tps, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And RPM Is Below:", idleadvance_rpm, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And Load Is Above:", idleadvance_load, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And CLT Is Above:", idleadvance_clt, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+ field = "And After Delay:", idleadvance_delay, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv }
+
+ dialog = idleAdvance, "Idle Advance Settings", border
+ panel = idleAdvancemenu, West
+ panel = idleAdvance_curve, Center
+
+ dialog = idleVemenu, "Idle VE settings"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleve"
+ field = "Idle VE On", idleve_on
+ field = "Go to idle VE when:"
+ field = "PID Idle Activates", idleveadv_to_pid_idleve, { idleve_on }
+ field = "TPS Is Below:", idleve_tps, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And RPM Is Below:", idleve_rpm, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And load Is Above:", idleve_load, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And CLT Is Above:", idleve_clt, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And VSS Zero?", idleve_vsson, { idleve_on && !idleveadv_to_pid_idleve }
+ field = "And After Delay:", idleve_delay, { idleve_on && !idleveadv_to_pid_idleve }
+
+ dialog = idleVeTables_n, "Idle VE Table"
+ panel = idleve1Tbl, North, { idleve_on }
+
+ dialog = idleVeTables_s, "Idle VE Table - Dual Fuel"
+ panel = idleve2Tbl, South, { idleve_on && dualfuel_sw_on }
+
+ dialog = idleVeTables, "", yAxis
+ panel = idleVeTables_n
+ panel = idleVeTables_s
+
+ dialog = idleVe, "Idle VE", border
+ panel = idleVemenu, West
+ panel = idleVeTables, Center
+
+ dialog = setbaud, "Megasquirt Baud Rate"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#baud"
+ field = "#The main baud rate should normally be 115200"
+ field = "Megasquirt Baud Rate", baud
+ field = "9600, 19200, 38400, 57600, 115200 only"
+ field = "SDcard Readback Baud Rate", baudhigh
+ field = "up to 230400 only"
+ field = "Set these, Burn"
+ field = "Then adjust tuning software comms baud rate to match"
+ field = "Then powercycle Megasquirt"
+ field = "Use High Speed Runtime", scatterRuntimeEnabled
+
+ dialog = userdefined, "User Defined Menu"
+ field = "Feature Enabled", user_conf0
+ field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set
+ field = "Value 1", user_value1, { user_conf0 }
+ field = "Value 2", user_value2, { user_conf0 }
+
+ dialog = generic_pid_left_a, ""
+ field = "Enable", generic_pid_flags_a_on
+ field = "Closed-loop (PID) type", generic_pid_flags_a_type, { generic_pid_flags_a_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_a, generic_pid_load_size_a, { generic_pid_flags_a_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_a, generic_pid_PV_size_a, { generic_pid_flags_a_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_a, { generic_pid_flags_a_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_a, { generic_pid_flags_a_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_a, { generic_pid_flags_a_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_a, { generic_pid_flags_a_on }
+ field = "Max Control Output", generic_pid_output_upperlim_a, { generic_pid_flags_a_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_a, { generic_pid_flags_a_on }
+ field = "Output Polarity", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID direction", generic_pid_flags_a_direction, { generic_pid_flags_a_on }
+; field = "Generic PID use stepper", generic_pid_flags_a_output_type, { generic_pid_flags_a_on }
+; field = "Generic PID use table or curve", generic_pid_flags_a_lookup_type, { generic_pid_flags_a_on }
+ field = "Control Interval", generic_pid_control_interval_a, { generic_pid_flags_a_on }
+ field = "P Term", generic_pid_P_a, { generic_pid_flags_a_on }
+ field = "I Term", generic_pid_I_a, { generic_pid_flags_a_on }
+ field = "D Term", generic_pid_D_a, { generic_pid_flags_a_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_grapha, "", card
+ panel = generic_pid_Tbl_a, Center, { generic_pid_flags_a_on }
+
+ dialog = generic_pid_a, "Generic Closed-Loop A", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_a, West
+ panel = generic_pid_curve_grapha, Center
+
+ dialog = generic_pid_left_b, ""
+ field = "Enable", generic_pid_flags_b_on
+ field = "Closed-Loop (PID) Type", generic_pid_flags_b_type, { generic_pid_flags_b_on }
+ channelSelector= "Load Axis", generic_pid_load_offset_b, generic_pid_load_size_b, { generic_pid_flags_b_on }
+ channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_b, generic_pid_PV_size_b, { generic_pid_flags_b_on }
+ field = "Max Feedback Input", generic_pid_upper_inputlim_b, { generic_pid_flags_b_on }
+ field = "Min Feedback Input", generic_pid_lower_inputlim_b, { generic_pid_flags_b_on }
+ field = "Control Output Port/Pin", generic_pid_pwm_outs_b, { generic_pid_flags_b_on }
+ field = "Frequency" , generic_pid_pwm_opts_freq_b, { generic_pid_flags_b_on }
+ field = "Max Control Output", generic_pid_output_upperlim_b, { generic_pid_flags_b_on }
+ field = "Min Control Output", generic_pid_output_lowerlim_b, { generic_pid_flags_b_on }
+ field = "Output Polarity", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID direction", generic_pid_flags_b_direction, { generic_pid_flags_b_on }
+; field = "Generic PID use stepper", generic_pid_flags_b_output_type, { generic_pid_flags_b_on }
+; field = "Generic PID use table or curve", generic_pid_flags_b_lookup_type, { generic_pid_flags_b_on }
+ field = "Control Interval", generic_pid_control_interval_b, { generic_pid_flags_b_on }
+ field = "P Term", generic_pid_P_b, { generic_pid_flags_b_on }
+ field = "I Term", generic_pid_I_b, { generic_pid_flags_b_on }
+ field = "D Term", generic_pid_D_b, { generic_pid_flags_b_on }
+ field = "CLT/MAT Units", sensor_temp, {0}
+
+ dialog = generic_pid_curve_graphb, "", card
+ panel = generic_pid_Tbl_b, Center, { generic_pid_flags_b_on }
+
+ dialog = generic_pid_b, "Generic Closed-Loop B", border
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#gencl"
+ panel = generic_pid_left_b, West
+ panel = generic_pid_curve_graphb, Center
+
+ ;-------------------------------------------------------------------------------
+ ; General help text
+
+ help = helpGeneral, "Megasquirt 3 General Help"
+ webHelp = "http://www.msextra.com/"
+ text = "For current documentation, click the Web Help button,"
+ text = "or visit http://www.msextra.com/."
+ text = "
"
+ text = "
Megasquirt firmware is copyright and is only licensed for use on approved hardware."
+ text = "
See the LICENSE text supplied with your firmware."
+ text = "
"
+ text = "
To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
+
+ ;-------------------------------------------------------------------------------
+#if INI_VERSION_2
+ [PortEditor]
+ ; spare ports
+ ; map the arrays and supply the labels.
+ ; all arrays are expected to be the same length in the first dimension
+ ; thus a [ 7] array will be 7 ports in length and expect 7 labels
+ ; The second dimension will drive the number of conditions per array.
+ ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship.
+ ; a [7x3] will have up to 3 conditions.
+ portEditor = ms3_port_edit, "Programmable On/Off Outputs"
+ ; 1st the array constant, then the labels in the index order.
+ enabledPorts = psEnabled, "INVALID", "INVALID", "INVALID", "Stepper Out 2", "Stepper Out 1", "INVALID", "PWM Out 2", "High Current Out 3", "High Current Out 1", "High Current Out 2", "PWM Out 3", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "Digital Frequency In 2", "Tach Out", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "CANout01", "CANout02", "CANout03", "CANout04", "CANout05", "CANout06", "CANout07", "CANout08", "CANout09", "CANout10", "CANout11", "CANout12", "CANout13", "CANout14", "CANout15", "CANout16", "Loop 1", "Loop 2", "Loop 3"
+ outputOffset = psOutOffset
+ outputSize = psOutSize
+ operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
+ threshold = psThreshold
+ hysteresis = psHysteresis
+ powerOnValue = psInitValue
+ triggerValue = psPortValue
+ conditionRelationship = psConnector, " ", "|", "&"
+ activateOption = extendedDataInSize
+ activateOption = filter32BitChannels
+#endif
+ ;-------------------------------------------------------------------------------
+
+ [CurveEditor]
+ curve = vsslaunch_curve, "RPM Limit vs. Speed"
+ columnLabel = "Speed", "RPM limit", "Retard"
+ xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+ yAxis = 0, {rpmhigh}, 9
+; xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9
+; yAxis = 0, 30, 9
+ xBins = vsslaunch_vss
+ yBins = vsslaunch_rpm
+ yBins = vsslaunch_retard
+
+ curve = cranktaper_curvee, "Cranking Taper Curve (Events)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Events", "%fuel"
+ xAxis = 0, 1000, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_timeevents
+ yBins = cranktaper_pct
+
+ curve = cranktaper_curvet, "Cranking Taper Curve (Time)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankingtaper"
+ columnLabel = "Time", "%fuel"
+ xAxis = 0, 25.5, 5
+ yAxis = 0, 500, 5
+ xBins = cranktaper_time
+ yBins = cranktaper_pct
+
+ curve = oil_curve, "Min/Max Oil Pressure vs. RPM"
+ columnLabel = "RPM", "Min", "Max"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 300, 6
+ xBins = oil_rpm, rpm
+ yBins = oil_press_min
+ yBins = oil_press_max
+ lineLabel = "Min. pressure"
+ lineLabel = "Max. pressure"
+
+ curve = hpte_curve, "Enrichment vs. Time"
+ columnLabel = "Time", "AFR decrease"
+ xAxis = 0, 25.5, 6
+ yAxis = 0, 3, 6
+ xBins = hpte_times
+ yBins = hpte_afrs
+
+ curve = fp_temp_curve, "Temperature Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp1"
+ columnLabel = "Temperature", "adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = fp_temps, fuel_temp1
+ yBins = fp_temp_adj
+
+ curve = fp_press_curve, "Pressure Adjustment (Primary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress1"
+ columnLabel = "Differential Pressure", "adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = fp_presss, fuel_press1
+ yBins = fp_press_adj
+
+ curve = alternator_linearise, "Duty linearisation"
+ columnLabel = "Calc", "Output"
+ xAxis = 0, 100, 7
+ yAxis = 0, 100, 7
+ xBins = alt_dutyin
+ yBins = alt_dutyout
+
+ curve = alternator_tempcurve, "Target Charge Voltage"
+ columnLabel = "Temperature", "Voltage"
+ xAxis = 0, 100, 6
+ yAxis = 12, 16, 6
+ xBins = alternator_temp
+ yBins = alternator_targvolts
+
+ curve = alternator_outduty, "Alternator Control Duty"
+ columnLabel = "Voltage", "Duty %"
+ xAxis = 12, 16, 6
+ yAxis = 0, 100, 6
+ xBins = alternator_dvolts, alt_targv
+ yBins = alternator_dutyv
+
+ curve = alternator_outfreq, "Alternator Control Frequency"
+ columnLabel = "Voltage", "Freq Hz"
+ xAxis = 12, 16, 6
+ yAxis = 0, 250, 6
+ xBins = alternator_fvolts, alt_targv
+ yBins = alternator_freqv
+
+ curve = pwm_curve_a, "PWM curve A"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_a, pwma_load
+ yBins = pwm_yaxis_a
+ size = 300, 240
+
+ curve = pwm_curve_b, "PWM curve B"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_b, pwmb_load
+ yBins = pwm_yaxis_b
+ size = 300, 240
+
+ curve = pwm_curve_c, "PWM curve C"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_c, pwmc_load
+ yBins = pwm_yaxis_c
+ size = 300, 240
+
+ curve = pwm_curve_d, "PWM curve D"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_d, pwmd_load
+ yBins = pwm_yaxis_d
+ size = 300, 240
+
+ curve = pwm_curve_e, "PWM curve E"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_e, pwme_load
+ yBins = pwm_yaxis_e
+ size = 300, 240
+
+ curve = pwm_curve_f, "PWM curve F"
+ columnLabel = "Load", ""
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = pwm_xaxis_f, pwmf_load
+ yBins = pwm_yaxis_f
+ size = 300, 240
+
+ curve = tc_slip_curve, "Slip Threshold vs Knob Input"
+ columnLabel = "Knob Input", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = tcslipx
+ yBins = tcslipy
+
+ curve = blend1_curve, "VE1 -> VE2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx1
+ yBins = blendy1
+
+ curve = blend2_curve, "Spk1 -> Spk2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx2
+ yBins = blendy2
+
+ curve = blend3_curve, "VE1+2 -> VE3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx3
+ yBins = blendy3
+
+ curve = blend4_curve, "Spk1+2 -> Spk3+4"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx4
+ yBins = blendy4
+
+ curve = blend5_curve, "AFR1 -> AFR2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx5
+ yBins = blendy5
+
+ curve = blend6_curve, "Boost1 -> Boost2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx6
+ yBins = blendy6
+
+ curve = blend7_curve, "Crank % 1 -> Crank % 2"
+ columnLabel = "X", "%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx7
+ yBins = blendy7
+
+ curve = blend8_curve, "Flex Blending"
+ columnLabel = "Flex%", "Blend%"
+ xAxis = 0, 100, 6
+ yAxis = 0, 100, 7
+ xBins = blendx8
+ yBins = blendy8
+
+ curve = tpswot_curve, "TPS for WOT"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tpswot"
+ columnLabel = "RPM", "TPS"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 7
+ xBins = tpswot_rpm, rpm
+ yBins = tpswot_tps
+
+ curve = launch_retard_time, "Timed Retard After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#timedretard"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = launch_time
+ yBins = launch_retard
+
+ curve = cl_idle_timing_curve, "Idle RPM Timing Correction Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idleadvrpm"
+ columnLabel = "RPM delta", "Timing Delta"
+ xAxis = -400, 400, 8
+ yAxis = -20, 20, 8
+ xBins = cl_idle_timing_target_deltas
+ yBins = cl_idle_timing_advance_deltas
+
+ curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlevolt"
+ columnLabel = "Voltage", "Duty"
+ xAxis = 9, 17, 6
+ yAxis = -10, 10, 6
+ xBins = idle_voltage_comp_voltage
+ yBins = idle_voltage_comp_delta
+
+;time-based
+ curve = time_accel_mapdot_curve, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates, MAPdot
+ yBins = maeBins
+
+;time-based
+ curve = time_accel_tpsdot_curve, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates, TPSdot
+ yBins = taeBins
+
+;time-based2
+ curve = time_accel_mapdot_curve2, "MAP based AE"
+ columnLabel = "MAPdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = maeRates2, MAPdot
+ yBins = maeBins2
+
+;time-based2
+ curve = time_accel_tpsdot_curve2, "TPS based AE"
+ columnLabel = "TPSdot", "Added"
+ xAxis = 0, 1200, 6
+ yAxis = 0, 48, 4
+ xBins = taeRates2, TPSdot
+ yBins = taeBins2
+
+;accel-pump
+ curve = pump_accel_mapdot_curve, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots, MAPdot
+ yBins = accel_mapdot_amts
+
+;accel-pump
+ curve = pump_accel_tpsdot_curve, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots, TPSdot
+ yBins = accel_tpsdot_amts
+
+;accel-pump2
+ curve = pump_accel_mapdot_curve2, "Accel MAPdot Curve"
+ columnLabel = "MAPdot", "Added"
+ xAxis = -2000, 2000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_mapdots2, MAPdot
+ yBins = accel_mapdot_amts2
+
+;accel-pump2
+ curve = pump_accel_tpsdot_curve2, "Accel TPSdot Curve"
+ columnLabel = "TPSdot", "Added"
+ xAxis = -1000, 1000, 5
+ yAxis = -200, 200, 5
+ xBins = accel_tpsdots2, TPSdot
+ yBins = accel_tpsdot_amts2
+
+ curve = knockstart_curve, "Knock Window Start"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -40, 10, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_starts
+
+ curve = knockduration_curve, "Knock Window Duration"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 40, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_durations
+
+ curve = knockthresh_curve, "Knock Input Threshold"
+ columnLabel = "RPM", "%"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = knock_rpms, rpm
+ yBins = knock_thresholds
+ gauge = knockinGauge
+
+ curve = knockupscale_curve, "Knock Coolant Scaling"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#knockcoolant"
+ columnLabel = "clt", "%"
+ xAxis = {cltlowlim}, {clthighlim}, 6
+ yAxis = 100, 500, 6
+ xBins = knock_clts, coolant
+ yBins = knock_upscale
+ gauge = cltGauge
+
+ curve = tc_perfect_curve, "Traction Control - Perfect Run VSS"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectvss"
+ columnLabel = "Time", "VSS"
+ xAxis = 0, 20, 9
+ yAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_vss
+
+ curve = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#tractionperfectrpm"
+ columnLabel = "Time", "RPM"
+ xAxis = 0, 20, 9
+ yAxis = 0, {rpmhigh}, 6
+ xBins = tc_perfect_time
+ yBins = tc_perfect_rpm
+
+ curve = tc_retard_curve, "Spark Retard"
+ columnLabel = "Slip x time", "Retard"
+ xAxis = 0, 100, 5
+ yAxis = 0, 30, 5
+ xBins = tc_react_x
+ yBins = tc_retard
+
+ curve = tc_spkcut_curve, "Spark Cut"
+ columnLabel = "Slip x time", "Spark"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_spkcut
+
+ curve = tc_nitrous_curve, "Nitrous%"
+ columnLabel = "Slip x time", "Nitrous"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_nitrous
+
+ curve = tc_boost_curve, "Boost Cut"
+ columnLabel = "Slip x Time", "Boost"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost
+
+ curve = tc_boost_duty_delta_curve, "Boost Duty +/-"
+ columnLabel = "Slip x Time", "Boost Duty +/-"
+ xAxis = 0, 100, 5
+ yAxis = -100, 100, 5
+ xBins = tc_react_x
+ yBins = tc_boost_duty_delta
+
+ curve = tc_addfuel_curve, "Add Fuel"
+ columnLabel = "Slip x time", "Added Fuel"
+ xAxis = 0, 100, 5
+ yAxis = 0, 100, 5
+ xBins = tc_react_x
+ yBins = tc_addfuel
+
+ curve = dualfuel_temp_curve, "Temperature Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fueltemp2"
+ columnLabel = "Temperature", "Adj %"
+ xAxis = -40, 220, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_temp, fuel_temp2
+ yBins = dualfuel_temp_adj
+
+ curve = dualfuel_press_curve, "Pressure Adjustment (Secondary Fuel)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fuelpress2"
+ columnLabel = "Differential Pressure", "Adj %"
+ xAxis = 200, 600, 9
+ yAxis = -200, 200, 6
+ xBins = dualfuel_press, fuel_press2
+ yBins = dualfuel_press_adj
+
+ curve = primingPW2, "Priming Pulse 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep2"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p21, coolant, readonly
+ yBins = primePWTable2
+ gauge = cltGauge
+
+ curve = crankingPW2, "Cranking Pulse % 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp2"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant
+ yBins = crankPctTable2
+ gauge = cltGauge
+
+ curve = asePct2, "Afterstart Enrichment (ASE) Percentage 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep2"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = asePctTable2
+ gauge = cltGauge
+
+ curve = aseTaper2, "Afterstart Enrichment (ASE) Taper 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset2"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = aseCntTable2
+ gauge = cltGauge
+
+ curve = warmup_curve2, "Warmup Enrichment (WUE) Curve 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue2"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p21, coolant, readonly
+ yBins = wueBins2
+ gauge = cltGauge
+
+ curve = MAFtable1f, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Freq", "Flow"
+ xAxis = {maf_freq0}, {maf_freq1}, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = maff, maf_freq
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1, "MAF Flow Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafflow"
+ columnLabel = "MAF Volts", "Flow"
+ xAxis = 0, 5, 11
+ yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11
+ xBins = mafv, maf_volts
+ yBins = mafflow
+ gauge = maf_voltsGauge
+
+ curve = MAFtable1old, "MAF Correction Table (Old)"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafcor"
+ columnLabel = "MAF Flow", "Correction"
+ xAxis = 0, 300, 11
+ yAxis = 0, 255, 11
+ xBins = MAFFlow, maf
+ yBins = MAFCor
+ gauge = mafGauge
+
+ curve = dwellrpm_curve, "Dwell vs RPM"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellvsrpm"
+ columnLabel = "RPM", "Dwell"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 6, 6
+ xBins = dwellrpm_rpm
+ yBins = dwellrpm_dwell
+
+
+ curve = boostvss_duty_curve, "Boost Duty vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "Duty"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 100, 6
+ xBins = boostvss_speed
+ yBins = boostvss_duty
+
+ curve = boostvss_target_curve, "Boost Target vs Speed"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostspeed"
+ columnLabel = "Speed", "kPa"
+ xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6
+ yAxis = 0, 400, 6
+ xBins = boostvss_speed
+ yBins = boostvss_target
+
+ ; nitrous 1 vs time
+ curve = n2o1_duty_time, "Nitrous1 - Duty vs Time"
+ columnLabel = "s", "Duty"
+
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_time
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_time, "Nitrous1 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_time
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_time, "Nitrous1 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_time
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs time
+ curve = n2o2_duty_time, "Nitrous2 - Duty vs Time"
+ columnLabel = "s", "Duty"
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_time
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_time, "Nitrous2 - Added Fuel vs Time"
+ columnLabel = "s", "pw"
+ xAxis = 0, 15, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_time
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_time, "Nitrous2 - Retard vs Time"
+ columnLabel = "s", "Retard"
+ xAxis = 0, 15, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_time
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs rpm
+ curve = n2o1_duty_rpm, "Nitrous1 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_rpm, "Nitrous1 - Added fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_rpm
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_rpm, "Nitrous1 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_rpm
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs rpm
+ curve = n2o2_duty_rpm, "Nitrous2 - Duty vs RPM"
+ columnLabel = "RPM", "Duty"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_rpm, "Nitrous2 - Added Fuel vs RPM"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_rpm
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_rpm, "Nitrous2 - Retard vs RPM"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, {rpmhigh}, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_rpm
+ yBins = n2o2_retard
+
+ ; nitrous 1 vs VSS
+ curve = n2o1_duty_vss, "Nitrous1 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o1_vss
+ yBins = n2o1_duty
+
+ curve = n2o1_pw_vss, "Nitrous1 - Added fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o1_vss
+ yBins = n2o1_pw
+
+ curve = n2o1_retard_vss, "Nitrous1 - Retard vs VSS"
+ columnLabel = "RPM", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o1_vss
+ yBins = n2o1_retard
+
+ ; nitrous 2 vs vss
+ curve = n2o2_duty_vss, "Nitrous2 - Duty vs VSS"
+ columnLabel = "VSS", "Duty"
+ xAxis = 0, 200, 6
+ yAxis = 0, 100, 6
+ xBins = n2o2_vss
+ yBins = n2o2_duty
+
+ curve = n2o2_pw_vss, "Nitrous2 - Added Fuel vs VSS"
+ columnLabel = "RPM", "pw"
+ xAxis = 0, 200, 6
+ yAxis = -5, 20, 6
+ xBins = n2o2_vss
+ yBins = n2o2_pw
+
+ curve = n2o2_retard_vss, "Nitrous2 - Retard vs VSS"
+ columnLabel = "VSS", "Retard"
+ xAxis = 0, 200, 6
+ yAxis = 0, 30, 7
+ xBins = n2o2_vss
+ yBins = n2o2_retard
+
+ ;mat/clt
+ curve = matclt_curve, "MAT/CLT correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matcltcor"
+ columnLabel = "flow", "%CLT"
+ xAxis = 0, {rpmhigh * 400}, 5
+ yAxis = 0, 100, 5
+ xBins = matclt_flow, calcflow
+ yBins = matclt_pct
+
+ ;small pulsewidths
+ curve = smallcurve0, "Small Pulsewidth Curve 1"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw0
+
+ curve = smallcurve1, "Small Pulsewidth Curve 2"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw1
+
+ curve = smallcurve2, "Small Pulsewidth Curve 3"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw2
+
+ curve = smallcurve3, "Small Pulsewidth Curve 4"
+ columnLabel = "Original", "New"
+ xAxis = 0, 2, 5
+ yAxis = 0, 2, 5
+ xBins = smallpwpw
+ yBins = smallpw3
+
+ curve = opencurve0, "Dead Time Voltage % Curve 1"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct0
+
+ curve = opencurve1, "Injector Dead Time Curve 2"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct1
+
+ curve = opencurve2, "Injector Dead Time Curve 3"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct2
+
+ curve = opencurve3, "Injector Dead Time Curve 4"
+ columnLabel = "Voltage", ""
+ xAxis = 7.2, 19.2, 7
+ yAxis = 0, 500, 6
+ xBins = opentimev, batteryVoltage
+ yBins = opentimepct3
+
+ curve = boost_timed_curve, "Boost %age After Launch"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostdelay"
+ columnLabel = "Time", ""
+ xAxis = 0, 15, 6
+ yAxis = 0, 100, 6
+ xBins = boost_timed_time
+ yBins = boost_timed_pct
+
+ curve = mapsample_curve, "MAP Sample Timing"
+ columnLabel = "RPM", "deg"
+ xAxis = 0, {rpmhigh}, 8
+ yAxis = 0, 180, 8
+ xBins = map_sample_rpms
+ yBins = map_sample_timing
+ gauge = tachometer
+
+ curve = dwellSettings, "Dwell Battery Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwellbat"
+ columnLabel = "Voltage", "%age"
+ xAxis = 6, 16, 6
+ yAxis = 0, 500, 6
+ xBins = dwellvolts
+ yBins = dwellcorr
+
+ curve = coldAdvance, "Cold Advance"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#coldadv"
+ columnLabel = "Coolant", "Offset"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = -10, 10, 5
+ xBins = tempTable, coolant, readonly
+ yBins = cold_adv_table
+ gauge = cltGauge
+
+ curve = iacBins, "Stepper Idle Warmup Position"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "IAC Steps"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 300, 7
+ xBins = tempTable, coolant, readonly
+ yBins = iacstepTable
+ gauge = cltGauge
+
+ curve = ipwBins, "PWM Idle Warmup Duty Cycle"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlewu"
+ columnLabel = "Coolant", "Idle PWM duty"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = tempTable, coolant, readonly
+ yBins = ipwmTable
+ gauge = cltGauge
+
+ curve = primingPW, "Priming Pulse"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#primep"
+ columnLabel = "Coolant", "Prime PW"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 20, 5
+ xBins = temp_table_p5, coolant, readonly
+ yBins = primePWTable
+ gauge = cltGauge
+
+ curve = crankingPW, "Cranking Pulse %"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#crankp"
+ columnLabel = "Coolant", "Cranking PW%"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant
+ yBins = crankPctTable
+ gauge = cltGauge
+
+ curve = asePct, "Afterstart Enrichment (ASE) Percentage"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#asep"
+ columnLabel = "Coolant", "Afterstart"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 100, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = asePctTable
+ gauge = cltGauge
+
+ curve = aseTaper, "Afterstart Enrichment (ASE) Taper"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#aset"
+ columnLabel = "Coolant", "Taper"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = temp_table_p5, coolant, readonly
+ yBins = aseCntTable
+ gauge = cltGauge
+
+ curve = matBasedRetard, "MAT-Based Timing Retard"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#matretard"
+ columnLabel = "MAT", "Retard"
+ xAxis = -40, {mathigh}, 9
+ yAxis = 0, 15, 7
+ xBins = matTemps, airtemp
+ yBins = matRetard
+ gauge = matGauge
+
+ curve = barometerCorr, "Barometric Correction"
+ columnLabel = "Barometer", "Correction"
+ xAxis = 60, 120, 7
+ yAxis = 80, 120, 7
+ xBins = baroCorrVals, barometer
+ yBins = baroCorrDelta
+ gauge = barometerGauge
+
+ curve = airdenCorr, "MAT Air density"
+ columnLabel = "Air temp", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = 70, 130, 7
+ xBins = matCorrTemps2, airtemp
+ yBins = matCorrDelta2
+ gauge = airtempGauge
+
+ curve = manifoldTempCorr, "MAF/MAT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#mafmatcor"
+ columnLabel = "MAT", "Correction"
+ xAxis = -40, 200, 9
+ yAxis = -30, 30, 7
+ xBins = matCorrTemps, mat
+ yBins = matCorrDelta
+ gauge = matGauge
+
+; this is just as an example.. not yet finished
+ curve = EAEmanycurves, "Combined EAE Curve Graph - example to test TunerStudio features"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ xBins = EAESOCRPMbins2, rpm ; commented out to show last yAxis tied to previous xAxis
+ yBins = EAESON2
+ gauge = EAEGauge1 ; As always gauge is optional
+
+ lineLabel = "Sucked-from-walls const"
+ lineLabel = "Adhere-to-walls coef"
+ lineLabel = "Adhere-to-walls coef 2"
+ lineLabel = "Sucked-from-walls Correction"
+
+ curve = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins, eaeload1
+ yBins = EAEBAWC
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins, eaeload1
+ yBins = EAEBSOC
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins, rpm
+ yBins = EAEAWN
+ gauge = EAEGauge1
+
+ curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins, rpm
+ yBins = EAESON
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins, coolant
+ yBins = EAESOW
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins, coolant
+ yBins = EAEAWW
+ gauge = EAEGauge1
+
+ curve = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawc2"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 100, 12
+ xBins = EAEAWCKPAbins2, fuelload
+ yBins = EAEBAWC2
+ gauge = EAEGauge1
+
+ curve = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswc"
+ columnLabel = "%", "Correction"
+ xAxis = 0, 255, 12
+ yAxis = 0, 25.5, 12
+ xBins = EAESOCKPAbins2, fuelload
+ yBins = EAEBSOC2
+ gauge = EAEGauge1
+
+ curve = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWCRPMbins2, rpm
+ yBins = EAEAWN2
+ gauge = EAEGauge1
+
+ curve = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswrc2"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOCRPMbins2, rpm
+ yBins = EAESON2
+ gauge = EAEGauge1
+
+ curve = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeswcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAESOWCLTbins2, coolant
+ yBins = EAESOW2
+ gauge = EAEGauge1
+
+ curve = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#eaeawcc2"
+ columnLabel = "CLT", "Correction"
+ xAxis = 0, {clthighlim}, 12
+ yAxis = 0, 200, 12
+ xBins = EAEAWWCLTbins2, coolant
+ yBins = EAEAWW2
+ gauge = EAEGauge1
+
+ curve = XAccTable, "X Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddlea"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 120, 4
+ xBins = XTrpms, rpm
+ yBins = XAcc
+ gauge = EAEGauge1
+
+ curve = XDecTable, "X Decel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtpuddled"
+ columnLabel = "RPM", "Correction"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 120, 9
+ xBins = XTrpms, rpm
+ yBins = XDec
+ gauge = EAEGauge1
+
+ curve = TauAccTable, "Tau Accel Fuel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimea"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauAcc
+ gauge = EAEGauge1
+
+ curve = TauDecTable, "Tau Decel Correction"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xttimed"
+ columnLabel = "RPM", "time"
+ xAxis = 0, {rpmhigh}, 9
+ yAxis = 0, 1000, 9
+ xBins = XTrpms, rpm
+ yBins = TauDec
+ gauge = EAEGauge1
+
+ curve = XCltTable, "X (Puddling) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtxtemp"
+ columnLabel = "Temperature", "Correction"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = XClt_temps
+ yBins = XClt
+ gauge = cltGauge
+
+ curve = TCltTable, "Tau (Time) Temp. Correction Factors"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#xtttemp"
+ columnLabel = "Temperature", "time"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 600, 9
+ xBins = TauClt_temps
+ yBins = TauClt
+ gauge = cltGauge
+
+ curve = NoiseFiltercurve, "Noise Filter Curve"
+ columnLabel = "RPMS", "usec"
+ xAxis = 0, {rpmhigh}, 4
+ yAxis = 0, 2000, 4
+ xBins = NoiseFilterRpm
+ yBins = NoiseFilterLen
+
+ curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#wue"
+ columnLabel = "Coolant", "WUE %"
+ xAxis = -40, {clthighlim}, 9
+ yAxis = 0, 500, 6
+ xBins = tempTable, coolant
+ yBins = wueBins
+ gauge = cltGauge
+
+ curve = idleAdvance_curve, "Idle Advance Timing"
+ columnLabel = "Load %", "deg"
+ xAxis = 0, 100, 4
+ yAxis = -10, 90, 4
+ xBins = idleadvance_loads, fuelload
+ yBins = idleadvance_curve
+
+ curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidletarg"
+ columnLabel = "CLT", "RPM"
+ xAxis = 0, {clthighlim}, 8
+ yAxis = 0, 2000, 8
+ xBins = pwmidle_clt_temps, coolant
+ yBins = pwmidle_target_rpms
+
+ curve = revlimiterBins, "Coolant Based Rev Limit"
+ columnLabel = "Coolant", "Rev limit"
+ xAxis = -40, {clthighlim}, 8
+ yAxis = 0, 15000, 8
+ xBins = RevLimLookup, coolant
+ yBins = RevLimRpm1
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Duty %"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 100, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_duty
+ gauge = cltGauge
+
+ curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps"
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#idlecrank"
+ columnLabel = "Coolant", "Steps"
+ xAxis = -40, {clthighlim}, 4
+ yAxis = 0, 512, 4
+ xBins = pwmidle_crank_clt_temps, coolant
+ yBins = pwmidle_crank_dutyorsteps_steps
+ gauge = cltGauge
+
+ curve = ITB_load_loadvals_curve, "ITB Load at TPS Switchpoint"
+ columnLabel = "RPM", "Load"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_loadvals
+
+ curve = ITB_load_switchpoint_curve, "ITB Load TPS Switchpoints"
+ columnLabel = "RPM", "TPS %"
+ xAxis = 0, {rpmhigh}, 12
+ yAxis = 0, 100, 12
+ xBins = ITB_load_rpms, rpm
+ yBins = ITB_load_switchpoints
+
+ [TableEditor]
+ ; table_id, map3d_id, "title", page
+ table = dwell_tbl, dwell_tblMap, "Dwell Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#dwelltable"
+ xBins = dwell_table_rpms, rpm
+ yBins = dwell_table_loads, ignload
+ zBins = dwell_table_values
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = ego_delay_Tbl, ego_delay_Map, "EGO Delay Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egodelay"
+ xBins = ego_delay_rpms, rpm
+ yBins = ego_delay_loads, afrload1
+ zBins = ego_delay_table
+ upDownLabel = "SHORTER", "LONGER"
+ gridOrient = 250, 0, 340
+
+ table = ego_auth_Tbl, ego_auth_Map, "EGO Authority Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#egoauth"
+ xBins = ego_auth_rpms, rpm
+ yBins = ego_auth_loads, afrload1
+ zBins = ego_auth_table
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ltt_Table1Tbl, ltt_Table1Map, "Long Term Trim Table 1", 15
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ltttable"
+ xBins = ltt_rpms, rpm
+ yBins = ltt_loads, fuelload
+ zBins = ltt_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = fp_dutyTbl, fp_dutyMap, "Fuel Pump Duty Table", 1
+ ; constant, variable
+ xBins = fpd_rpm rpm
+ yBins = fpd_load, fuelload
+ zBins = fpd_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = alphaMAPTbl, alphaMAPMap, "Fallback MAP Table", 1
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#fallbackmap"
+ xBins = amap_rpm, rpm
+ yBins = amap_tps, tps
+ zBins = alphaMAPtable
+ upDownLabel = "UP", "DOWN"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_duties
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+ table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#clidleinit"
+ xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm
+ yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower
+ zBins = pwmidle_cl_initialvalues_steps
+ upDownLabel = "INCREASE","DECREASE"
+ gridOrient = 250, 0, 340
+
+;vvt timing
+ table = vvt_timing1_tbl, vvt_timing1_map, "VVT Intake (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtint"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing1
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = vvt_timing2_tbl, vvt_timing2_map, "VVT Exhaust (Relative Timing)", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtexh"
+ xBins = vvt_timing_rpm, rpm
+ yBins = vvt_timing_load, vvt_load
+ zBins = vvt_timing2
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_rifuelcut_tbl, als_rifuelcut_map, "Turbo Anti-lag Roving Idle", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#alsidle"
+ xBins = als_rirpms, rpm
+ yBins = als_ritpss, tps
+ zBins = als_rifuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_fuelcut_tbl, als_fuelcut_map, "ALS Fuel Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_fuelcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_sparkcut_tbl, als_sparkcut_map, "ALS Spark Cut%", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_sparkcut
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = als_timing_tbl, als_timing_map, "ALS Timing", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = als_addfuel_tbl, als_addfuel_map, "ALS Added Fuel %age", 14
+ xBins = als_rpms, rpm
+ yBins = als_tpss, tps
+ zBins = als_addfuel
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_a, pwm_duties_map_a, "Generic PWM Output A", 11
+ xBins = pwm_rpms_a, rpm
+ yBins = pwm_loadvals_a, pwma_load
+ zBins = pwm_duties_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_b, pwm_duties_map_b, "Generic PWM Output B", 2
+ xBins = pwm_rpms_b, rpm
+ yBins = pwm_loadvals_b, pwmb_load
+ zBins = pwm_duties_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_c, pwm_duties_map_c, "Generic PWM Output C", 2
+ xBins = pwm_rpms_c, rpm
+ yBins = pwm_loadvals_c, pwmc_load
+ zBins = pwm_duties_c
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_d, pwm_duties_map_d, "Generic PWM Output D", 2
+ xBins = pwm_rpms_d, rpm
+ yBins = pwm_loadvals_d, pwmd_load
+ zBins = pwm_duties_d
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_vvt, pwm_duties_map_vvt, "Generic PWM Output E / VVT", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#vvtonoff"
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, vvt_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_e, pwm_duties_map_e, "Generic PWM Output E", 2
+ xBins = pwm_rpms_e, rpm
+ yBins = pwm_loadvals_e, pwme_load
+ zBins = pwm_duties_e
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = pwm_duties_Tbl_f, pwm_duties_map_f, "Generic PWM Output F", 2
+ xBins = pwm_rpms_f, rpm
+ yBins = pwm_loadvals_f, pwmf_load
+ zBins = pwm_duties_f
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_a, generic_pid_map_a, "Generic Closed-Loop A", 17
+ xBins = generic_pid_rpms_a, rpm
+ yBins = generic_pid_loadvals_a, generic_pid_load_a
+ zBins = generic_pid_targets_a
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = generic_pid_Tbl_b, generic_pid_map_b, "Generic Closed-Loop B", 17
+ xBins = generic_pid_rpms_b, rpm
+ yBins = generic_pid_loadvals_b, generic_pid_load_b
+ zBins = generic_pid_targets_b
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = waterinjTbl, waterinjMap, "Water Injection Duty Table ", 1
+ xBins = waterinj_rpm, rpm
+ yBins = waterinj_map, map
+ zBins = waterinj_duty
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+#if LAMBDA
+ table = maxafr1Tbl, maxafr1Map, "Max AFR 1 in Lambda", 1
+#else
+ table = maxafr1Tbl, maxafr1Map, "Max AFR Difference", 1
+#endif
+ xBins = maxafr1_rpm, rpm
+ yBins = maxafr1_load, maxafrload
+ zBins = maxafr1_diff
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve1"
+ ; constant, variable
+ xBins = frpm_table1, rpm
+ yBins = fmap_table1, fuelload
+ zBins = veTable1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve2"
+ xBins = frpm_table2, rpm
+ yBins = fmap_table2, fuelload2
+ zBins = veTable2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve3"
+ ; constant, variable
+ xBins = frpm_table3, rpm
+ yBins = fmap_table3, fuelload
+ zBins = veTable3
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = veTable4Tbl, veTable4Map, "Fuel VE Table 4", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ve4"
+ ; constant, variable
+ xBins = frpm_table4, rpm
+ yBins = fmap_table4, fuelload2
+ zBins = veTable4
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = idleve1Tbl, idleve1Map, "Idle VE table", 10
+ xBins = idleve_rpms1, rpm
+ yBins = idleve_loads1, fuelload
+ zBins = idleve_table1
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = idleve2Tbl, idleve2Map, "Idle VE Table - Dual Fuel", 10
+ xBins = idleve_rpms2, rpm
+ yBins = idleve_loads2, fuelload
+ zBins = idleve_table2
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340
+
+ table = stagedTable, stagedMap, "Staged Injection Table", 6
+ xBins = staged_rpms, rpm
+ yBins = staged_loads, fuelload
+ zBins = staged_percents
+ upDownLabel = "MORE", "LESS"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
+#else
+ table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr1"
+ xBins = arpm_table1, rpm
+ yBins = amap_table1, afrload1
+ zBins = afrTable1
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+#if LAMBDA
+ table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1
+#else
+ table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1
+#endif
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#afr2"
+ xBins = arpm_table2, rpm
+ yBins = amap_table2, fuelload
+ zBins = afrTable2
+ upDownLabel = "LEANER", "RICHER"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign1"
+ xBins = srpm_table1, rpm
+ yBins = smap_table1, ignload
+ zBins = advanceTable1
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign2"
+ xBins = srpm_table2, rpm
+ yBins = smap_table2, ignload2
+ zBins = advanceTable2
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign3"
+ xBins = srpm_table3, rpm
+ yBins = smap_table3, ignload
+ zBins = advanceTable3
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = ignitionTbl4, ignitionMap4, "Ignition Table 4 (Spark Advance)", 4
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#ign4"
+ xBins = srpm_table4, rpm
+ yBins = smap_table4, ignload2
+ zBins = advanceTable4
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#rotarysplit"
+ xBins = RotarySplitRPM, rpm
+ yBins = RotarySplitLoad, ignload
+ zBins = RotarySplitTable
+ upDownLabel = "ADVANCING", "RETARDING"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys, boostctlDtyMap, "Boost Control Duty 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty"
+ xBins = boost_ctl_pwmtarg_rpm_bins, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins, throttle
+ zBins = boost_ctl_pwm_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs, boostctlTargMap, "Boost Control Targets 1", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg"
+ xBins = boost_ctl_loadtarg_rpm_bins, rpm
+ yBins = boost_ctl_loadtarg_tps_bins, throttle
+ zBins = boost_ctl_load_targets
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlDutys2, boostctlDtyMap2, "Boost Control Duty 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boostduty2"
+ xBins = boost_ctl_pwmtarg_rpm_bins2, rpm
+ yBins = boost_ctl_pwmtarg_tps_bins2, throttle
+ zBins = boost_ctl_pwm_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Bias Duty 1", 15
+ xBins = boost_ctl_cl_pwm_rpms1, rpm
+ yBins = boost_ctl_cl_pwm_targboosts1, boost_targ_1
+ zBins = boost_ctl_cl_pwm_targs1
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlCLPWMtargs2, boostctlCLPWMtargsMap2, "Boost Control Bias Duty 2", 15
+ xBins = boost_ctl_cl_pwm_rpms2, rpm
+ yBins = boost_ctl_cl_pwm_targboosts2, boost_targ_2
+ zBins = boost_ctl_cl_pwm_targs2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ table = boostctlTargs2, boostctlTargMap2, "Boost Control Targets 2", 2
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#boosttarg2"
+ xBins = boost_ctl_loadtarg_rpm_bins2, rpm
+ yBins = boost_ctl_loadtarg_tps_bins2, throttle
+ zBins = boost_ctl_load_targets2
+ upDownLabel = "HIGHER", "LOWER"
+ gridOrient = 250, 0, 340
+
+ ;injector trims
+ table = inj_trimaTbl, inj_trimaMap, "Cyl 1 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimbTbl, inj_trimbMap, "Cyl 2 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimcTbl, inj_trimcMap, "Cyl 3 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimdTbl, inj_trimdMap, "Cyl 4 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimeTbl, inj_trimeMap, "Cyl 5 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimfTbl, inj_trimfMap, "Cyl 6 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimgTbl, inj_trimgMap, "Cyl 7 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimhTbl, inj_trimhMap, "Cyl 8 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+
+ table = inj_trim1Tbl, inj_trim1Map, "Injector Trim 1", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim1"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trim2Tbl, inj_trim2Map, "Injector Trim 2", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injtrim2"
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimiTbl, inj_trimiMap, "Cyl 9 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm
+ yBins = inj_trim_load, fuelload
+ zBins = inj_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimjTbl, inj_trimjMap, "Cyl 10 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimkTbl, inj_trimkMap, "Cyl 11 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimlTbl, inj_trimlMap, "Cyl 12 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimmTbl, inj_trimmMap, "Cyl 13 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimnTbl, inj_trimnMap, "Cyl 14 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimoTbl, inj_trimoMap, "Cyl 15 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = inj_trimpTbl, inj_trimpMap, "Cyl 16 Fuel Trim", 7
+ ; constant, variable
+ xBins = inj_trim_rpm, rpm, readonly
+ yBins = inj_trim_load, fuelload, readonly
+ zBins = inj_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+;inj timing
+ table = inj_timing_tbl, inj_timing_map, "Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt1"
+ xBins = inj_timing_rpm, rpm
+ yBins = inj_timing_load, fuelload
+ zBins = inj_timing
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ table = inj_timing_sec_tbl, inj_timing_sec_map, "Secondary Injector Timing", 7
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#injt2"
+ xBins = inj_timing_sec_rpm, rpm
+ yBins = inj_timing_sec_load, fuelload
+ zBins = inj_timing_sec
+ upDownLabel = "ADVANCE", "RETARD"
+ gridOrient = 250, 0, 340
+
+ ;spark trims
+ table = spk_trimaTbl, spk_trimaMap, "Spark Trim 1", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trima
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimbTbl, spk_trimbMap, "Spark Trim 2", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimb
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimcTbl, spk_trimcMap, "Spark Trim 3", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimc
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimdTbl, spk_trimdMap, "Spark Trim 4", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimd
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimeTbl, spk_trimeMap, "Spark Trim 5", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trime
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimfTbl, spk_trimfMap, "Spark Trim 6", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimf
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimgTbl, spk_trimgMap, "Spark Trim 7", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimg
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimhTbl, spk_trimhMap, "Spark Trim 8", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimh
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimiTbl, spk_trimiMap, "Spark Trim 9", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimi
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimjTbl, spk_trimjMap, "Spark Trim 10", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimj
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimkTbl, spk_trimkMap, "Spark Trim 11", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimk
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimlTbl, spk_trimlMap, "Spark Trim 12", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_triml
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimmTbl, spk_trimmMap, "Spark Trim 13", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimm
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimnTbl, spk_trimnMap, "Spark Trim 14", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimn
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimoTbl, spk_trimoMap, "Spark Trim 15", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimo
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = spk_trimpTbl, spk_trimpMap, "Spark Trim 16", 8
+ ; constant, variable
+ xBins = spk_trim_rpm, rpm
+ yBins = spk_trim_load, ignload
+ zBins = spk_trimp
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ table = narrowband_tgts_tbl, narrowband_tgts_map, "Narrowband EGO targets", 14
+ topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.4.pdf#narrowtargs"
+ xBins = narrowband_tgts_rpms, rpm
+ yBins = narrowband_tgts_loads, afrload1
+ zBins = narrowband_tgts
+ upDownLabel = "RICHER", "LEANER"
+ gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
+
+ ;-------------------------------------------------------------------------------
+
+ [GaugeConfigurations]
+
+ ;-------------------------------------------------------------------------------
+ ; Define a gauge's characteristics here, then go to a specific layout
+ ; block (Tuning or FrontPage) and use the name you've defined here to
+ ; display that gauge in a particular position.
+ ;
+ ; Name = Case-sensitive, user-defined name for this gauge configuration.
+ ; Var = Case-sensitive name of variable to be displayed, see the
+ ; OutputChannels block in this file for possible values.
+ ; Title = Title displayed at the top of the gauge.
+ ; Units = Units displayed below value on gauge.
+ ; Lo = Lower scale limit of gauge.
+ ; Hi = Upper scale limit of gauge.
+ ; LoD = Lower limit at which danger color is used for gauge background.
+ ; LoW = Lower limit at which warning color is used.
+ ; HiW = Upper limit at which warning color is used.
+ ; HiD = Upper limit at which danger color is used.
+ ; vd = Decimal places in displayed value
+ ; ld = Label decimal places for display of Lo and Hi, above.
+
+ ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
+
+ gaugeCategory = "Outputs 1"
+ pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq1Gauge = pwseq1, "Pulse Width Seq 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq2Gauge = pwseq2, "Pulse Width Seq 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq3Gauge = pwseq3, "Pulse Width Seq 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq4Gauge = pwseq4, "Pulse Width Seq 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq5Gauge = pwseq5, "Pulse Width Seq 5", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq6Gauge = pwseq6, "Pulse Width Seq 6", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq7Gauge = pwseq7, "Pulse Width Seq 7", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq8Gauge = pwseq8, "Pulse Width Seq 8", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq9Gauge = pwseq9, "Pulse Width Seq 9", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq10Gauge = pwseq10, "Pulse Width Seq 10", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq11Gauge = pwseq11, "Pulse Width Seq 11", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ pulseWidthSeq12Gauge = pwseq12, "Pulse Width Seq 12", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Outputs 2"
+ IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0
+ dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1
+ ; IAC step == idle pwm, when using pwm idle control.
+ PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1
+ advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ boostdutyGauge2 = boostduty2, "Boost Duty 2", "%", 0, 100, -1, -1, 100, 100, 1, 1
+ injtimingpriGauge = inj_timing_pri, "Injector timing (pri)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ injtimingsecGauge = inj_timing_sec, "Injector timing (sec)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+
+ gaugeCategory = "Outputs 3"
+ nitrous1_duty = nitrous1_duty, "Nitrous 1 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ nitrous2_duty = nitrous2_duty, "Nitrous 2 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ water_duty = water_duty, "Water Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_a = duty_pwm_a, "Generic PWM A Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_b = duty_pwm_b, "Generic PWM B Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_c = duty_pwm_c, "Generic PWM C Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_d = duty_pwm_d, "Generic PWM D Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_e = duty_pwm_e, "Generic PWM E Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ duty_pwm_f = duty_pwm_f, "Generic PWM F Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0
+ vvt_duty1 = vvt_duty1, "VVT 1 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty2 = vvt_duty2, "VVT 2 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty3 = vvt_duty3, "VVT 3 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ vvt_duty4 = vvt_duty4, "VVT 4 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1
+ fp_duty = fp_duty, "Fuel pump duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ alt_duty = alt_duty, "Alternator Control Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ alt_freq = alt_freq, "Alternator Control Frequency", "Hz", 0, 255, 255, 255, 255, 255, 0, 0
+ alt_targv = alt_targv, "Alternator Target Volts", "V", 0, 16, 16, 16, 16, 16, 1, 1
+ generic_pid_duty_a = generic_pid_duty_a, "Generic Closed-Loop A Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+ generic_pid_duty_b = generic_pid_duty_b, "Generic Closed-Loop B Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1
+
+ gaugeCategory = "Calculations 1"
+ accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0
+ accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3
+ gammaEnrichGauge = gammaEnrich, "Total cor", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ gammaairGauge = airCorrection, "Air density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ warmupgauge = warmupEnrich, "Warmup Enrichment", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1
+ WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0
+ EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0
+ fuelcorr = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0
+ fueltemp_cor = fueltemp_cor, "Fuel Temperature Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ fuelpress_cor = fuelpress_cor, "Fuel Pressure Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1
+ ltt_cor = ltt_cor, "Long Term Trim Correction", "%", -12.7, 12.7, -12.7, -12.7, 12.7, 12.7, 1, 1
+ veGauge1 = veCurr1, "VE1 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
+ nitrous_addfuel = n2o_addfuel, "Nitrous added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ tps_accel = tps_accel, "tps_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ map_accel = map_accel, "map_accel", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ total_accel = total_accel, "total_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ als_addfuel = als_addfuel, "ALS added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3
+ reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+ deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
+
+ gaugeCategory = "Calculations 2"
+ knockGauge = knockRetard, "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
+ coldAdvGauge = coldAdvDeg, "Cold advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ tc_retardGauge = tc_retard, "Traction Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ cel_retardGauge = cel_retard, "CEL Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ fc_retardGauge = fc_retard, "Fuel cut Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ adv4Gauge = adv4, "Spark Table 4", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ als_timingGauge = als_timing, "ALS Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launch_timingGauge = launch_timing, "Launch Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ step3_timingGauge = step3_timing, "3-step Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+ launchvss_retardGauge = launchvss_retard, "Launch VSS Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
+
+ timingerrGauge = timing_err, "Timing pred err", "%", -127, 127, 255,255,255,255,0,0
+; user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ nitrous_retard = n2o_retard, "Nitrous retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ launch_timer = launch_timer, "Launch timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+ launch_retard = launch_retard, "Launch timed retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1
+ nitrous_timer = nitrous_timer, "Nitrous Timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3
+
+ gaugeCategory = "Calculations 3"
+ lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0
+ syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0
+ clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
+ vss1dot = vss1dot, "VSS1 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ vss2dot = vss2dot, "VSS2 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel
+ RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0
+ vvttargGauge1 = vvt_target1, "VVT 1 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge2 = vvt_target2, "VVT 2 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge3 = vvt_target3, "VVT 3 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvttargGauge4 = vvt_target4, "VVT 4 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ fuelflowGauge = fuelflow, "Fuel flow (avg)", "cc/min", 0, 65535, -1, -1, 99999, 99999, 0, 0
+ economy_l_100km = economy_l_100km, "Fuel economy", "l/100km", 0, 300, -1, -1, 900, 900, 1, 1
+ economy_mpg_us = economy_mpg_us, "Fuel economy", "mpg_us", 0, 60, -1, -1, 99, 99, 0, 0
+ economy_mpg_uk = economy_mpg_uk, "Fuel economy", "mpg_uk", 0, 60, -1, -1, 99, 99, 0, 0
+ boost_target_1 = boost_targ_1, "Boost Target 1", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ boost_target_2 = boost_targ_2, "Boost Target 2", "%", 0, 500, -1, -1, 999, 999, 1, 1
+ cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ tc_slipxtime = tc_slipxtime, "T/C Slip * Time", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+
+ gaugeCategory = "EGT inputs"
+#if CELSIUS
+ egtGauge1 = egt1, "EGT 01", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge2 = egt2, "EGT 02", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge3 = egt3, "EGT 03", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge4 = egt4, "EGT 04", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge5 = egt5, "EGT 05", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge6 = egt6, "EGT 06", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge7 = egt7, "EGT 07", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge8 = egt8, "EGT 08", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge9 = egt9, "EGT 09", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge10 = egt10, "EGT 10", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge11 = egt11, "EGT 11", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge12 = egt12, "EGT 12", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge13 = egt13, "EGT 13", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge14 = egt14, "EGT 14", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge15 = egt15, "EGT 15", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+ egtGauge16 = egt16, "EGT 16", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0
+#else
+ egtGauge1 = egt1, "EGT 01", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge2 = egt2, "EGT 02", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge3 = egt3, "EGT 03", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge4 = egt4, "EGT 04", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge5 = egt5, "EGT 05", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge6 = egt6, "EGT 06", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge7 = egt7, "EGT 07", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge8 = egt8, "EGT 08", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge9 = egt9, "EGT 09", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge10 = egt10, "EGT 10", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge11 = egt11, "EGT 11", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge12 = egt12, "EGT 12", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge13 = egt13, "EGT 13", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge14 = egt14, "EGT 14", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge15 = egt15, "EGT 15", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+ egtGauge16 = egt16, "EGT 16", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0
+#endif
+
+ gaugeCategory = "Sensor inputs1"
+#if CELSIUS
+ cltGauge = coolant, "Coolant Temp", "°C", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0
+#else
+ cltGauge = coolant, "Coolant Temp", "°F", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0
+ matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+
+ airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0
+#endif
+ voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2
+ tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
+ throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 0
+ mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0
+ fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
+ mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0
+ maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1
+ maf_freqGauge = maf_freq, "MAF Frequency", "Hz", 0, 30000, 0, 30000, 30000, 30000, 0, 0
+ mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0
+ boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2
+ boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1
+ boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1
+ knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
+
+ gaugeCategory = "Sensor inputs2"
+ stream_levelGauge = stream_level, "Stream Level", "", 0, 128, 128, 128, 128, 128, 0, 0
+ vehiclespeed1 = vss1, "Vehicle Speed 1", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed2 = vss2, "Vehicle Speed 2", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed3 = vss3, "Vehicle Speed 3", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ vehiclespeed4 = vss4, "Vehicle Speed 4", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+
+ shaftspeed1 = ss1, "Shaft Speed 1", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ shaftspeed2 = ss2, "Shaft Speed 2", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0
+ gear = gear, "Gear", "", -1, 6, 6, 6, 6, 6, 0 ,0
+ accelx = accelx, "Accel X", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accely = accely, "Accel Y", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ accelz = accelz, "Accel Z", "ms-2", -59, 59, 59, 59, 59, 59, 2, 2
+ fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
+#if CELSIUS
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°C", -40, 110, -100, -100, 95, 105, 0, 0
+#else
+ fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+ fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°F", -40, 240, -100, -100, 200, 220, 0, 0
+#endif
+ fuelpressGauge1kpa = fuel_press1, "Fuel Pressure1", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1psi = fuel_press1_psi, "Fuel Pressure1", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge1bar = fuel_press1_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2kpa = fuel_press2, "Fuel Pressure2", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2psi = fuel_press2_psi, "Fuel Pressure2", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0
+ fuelpressGauge2bar = fuel_press2_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0
+ TPSADCGauge = tpsADC, "TPS ADC", "ADC", 0, 1023, -1, 1, 1024, 1024, 0, 0
+ load_duty = load_duty, "Alternator Load Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0
+ batt_curr = batt_curr, "Battery Current", "A", -100, 100, 200, 200, 200, 200, 1, 1
+
+gaugeCategory = "Sensor inputs3"
+ vvtGauge1 = vvt_ang1, "VVT 1 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge2 = vvt_ang2, "VVT 2 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge3 = vvt_ang3, "VVT 3 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ vvtGauge4 = vvt_ang4, "VVT 4 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1
+ knock01Gauge = knock_cyl01, "Knock cyl# 1", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock02Gauge = knock_cyl02, "Knock cyl# 2", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock03Gauge = knock_cyl03, "Knock cyl# 3", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock04Gauge = knock_cyl04, "Knock cyl# 4", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock05Gauge = knock_cyl05, "Knock cyl# 5", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock06Gauge = knock_cyl06, "Knock cyl# 6", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock07Gauge = knock_cyl07, "Knock cyl# 7", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock08Gauge = knock_cyl08, "Knock cyl# 8", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock09Gauge = knock_cyl09, "Knock cyl# 9", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock10Gauge = knock_cyl10, "Knock cyl#10", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock11Gauge = knock_cyl11, "Knock cyl#11", "", 0, 100, 0, 0, 100, 100, 1, 0
+ knock12Gauge = knock_cyl12, "Knock cyl#12", "", 0, 100, 0, 0, 100, 100, 1, 0
+
+gaugeCategory = "Sensor inputs4"
+ gps_latdeggauge = gps_latdeg, "GPS Latitude deg", "deg", -90, +90, -90, -90, 90, 90, 0, 0
+ gps_latmingauge = gps_latmin, "GPS Latitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_latsecgauge = gps_latsec, "GPS Latitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_londeggauge = gps_londeg, "GPS Longitude deg", "deg", 0, +180, 0, 0, 180, 180, 0, 0
+ gps_lonmingauge = gps_lonmin, "GPS Longitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0
+ gps_lonsecgauge = gps_lonsec, "GPS Longitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3
+ gps_lonEWgauge = gps_lonEW, "GPS Longitude E/W", "E/W", 0, 255, 0, 0, 255, 255, 0, 0
+ gps_altgauge = gps_alt, "GPS Altitude", "m", -100, +13000, -100, -100, 13000, 13000, 1, 1
+ gps_speedgauge = gps_speed, "GPS Speed", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0
+ gps_coursegauge = gps_course, "GPS Course", "deg", 0, 360, 0, 0, 360, 360, 1, 1
+
+ gps_latitudegauge = gps_latitude, "GPS Latitude", "deg", -90, +90, -90, -90, 90, 90, 5, 5
+ gps_longitudegauge = gps_longitude, "GPS Longitude", "deg", -180, +180, -180, -180, 180, 180, 5, 5
+
+gaugeCategory = "AFR/EGO inputs"
+#if NARROW_BAND_EGO
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 1, 1, 1, 1, 1, 2, 2
+#elif LAMBDA
+
+ lambda1Gauge = lambda1, "Lambda 1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda2Gauge = lambda2, "Lambda 2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda3Gauge = lambda3, "Lambda 3", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda4Gauge = lambda4, "Lambda 4", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda5Gauge = lambda5, "Lambda 5", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda6Gauge = lambda6, "Lambda 6", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda7Gauge = lambda7, "Lambda 7", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda8Gauge = lambda8, "Lambda 8", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#else
+
+ afr1Gauge = afr1, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr3Gauge = afr3, "Air:Fuel Ratio 3", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr4Gauge = afr4, "Air:Fuel Ratio 4", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr5Gauge = afr5, "Air:Fuel Ratio 5", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr6Gauge = afr6, "Air:Fuel Ratio 6", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ afr7Gauge = afr7, "Air:Fuel Ratio 7", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr8Gauge = afr8, "Air:Fuel Ratio 8", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+ egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+#endif
+
+gaugeCategory = "AFR/EGO calculations"
+#if NARROW_BAND_EGO
+ afr1targetGauge = afrtgt1, "EgoV 1 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr2targetGauge = afrtgt2, "EgoV 2 Target", "", 0, 1, 20, 20, 20, 20, 3, 3
+ afr1errGauge = afr1err, "EgoV 1 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+ afr2errGauge = afr2err, "EgoV 2 Error", "", -1, +1, 12, 13, 15, 16, 3, 3
+#elif LAMBDA
+ afr1targetGauge = afrtgt1, "Lambda 1 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "Lambda 2 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "Lambda 1 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "Lambda 2 Error", "", -2, +2, 12, 13, 15, 16, 2, 2
+#else
+ afr1targetGauge = afrtgt1, "AFR 1 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr2targetGauge = afrtgt2, "AFR 2 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2
+ afr1errGauge = afr1err, "AFR 1 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+ afr2errGauge = afr2err, "AFR 2 Error", "", -5, +5, 12, 13, 15, 16, 2, 2
+#endif
+ egoCorrGauge1 = egocor1, "EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge2 = egocor2, "EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge3 = egocor3, "EGO Correction 3", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge4 = egocor4, "EGO Correction 4", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge5 = egocor5, "EGO Correction 5", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge6 = egocor6, "EGO Correction 6", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge7 = egocor7, "EGO Correction 7", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge8 = egocor8, "EGO Correction 8", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+
+gaugeCategory = "AFR/EGO inputs 9-16"
+#if NARROW_BAND_EGO
+;
+#elif LAMBDA
+ lambda9Gauge = lambda9, "Lambda 9", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda10Gauge = lambda10, "Lambda 10", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda11Gauge = lambda11, "Lambda 11", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+ lambda12Gauge = lambda12, "Lambda 12", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
+#else
+ afr9Gauge = afr9, "Air:Fuel Ratio 9", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr10Gauge = afr10, "Air:Fuel Ratio 10", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr11Gauge = afr11, "Air:Fuel Ratio 11", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+ afr12Gauge = afr12, "Air:Fuel Ratio 12", "", 10, 19.4, 12, 13, 15, 16, 2, 2
+#endif
+ egoV9Gauge = egov9, "Exhaust Gas Oxygen 9", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV10Gauge = egov10, "Exhaust Gas Oxygen 10", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV11Gauge = egov11, "Exhaust Gas Oxygen 11", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+ egoV12Gauge = egov12, "Exhaust Gas Oxygen 12", "volts", 0, 5, 5, 5, 5, 5, 2, 2
+
+gaugeCategory = "AFR/EGO calculations 9-16"
+ egoCorrGauge9 = egocor9, "EGO Correction 9", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge10 = egocor10, "EGO Correction 10", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge11 = egocor11, "EGO Correction 11", "%", 50, 150, 90, 99, 101, 110, 1, 1
+ egoCorrGauge12 = egocor12, "EGO Correction 12", "%", 50, 150, 90, 99, 101, 110, 1, 1
+
+gaugeCategory = "Generic sensor inputs"
+ sensor01Gauge = sensor01, { stringValue(sensor01Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor02Gauge = sensor02, { stringValue(sensor02Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor03Gauge = sensor03, { stringValue(sensor03Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor04Gauge = sensor04, { stringValue(sensor04Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor05Gauge = sensor05, { stringValue(sensor05Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor06Gauge = sensor06, { stringValue(sensor06Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor07Gauge = sensor07, { stringValue(sensor07Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor08Gauge = sensor08, { stringValue(sensor08Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor09Gauge = sensor09, { stringValue(sensor09Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor10Gauge = sensor10, { stringValue(sensor10Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor11Gauge = sensor11, { stringValue(sensor11Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor12Gauge = sensor12, { stringValue(sensor12Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor13Gauge = sensor13, { stringValue(sensor13Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor14Gauge = sensor14, { stringValue(sensor14Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor15Gauge = sensor15, { stringValue(sensor15Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
+ sensor16Gauge = sensor16, "ECU temp.", "", -40, 200, -3277, -3277, 3277, 3277, 0, 0
+
+gaugeCategory = "CAN board inputs/outputs"
+ canin1_8Gauge = canin1_8, "CAN inputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout1_8Gauge = canout1_8, "CAN outputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0
+ canout9_16Gauge = canout9_16, "CAN outputs 9-16", "", 0, 255, 255, 255, 255, 255,0, 0
+ canpwmin0Gauge = canpwmin0, "CAN PWMin 0", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin1Gauge = canpwmin1, "CAN PWMin 1", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin2Gauge = canpwmin2, "CAN PWMin 2", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ canpwmin3Gauge = canpwmin3, "CAN PWMin 3", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+
+gaugeCategory = "X-Code dev"
+ status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0
+ status5sGauge = status5s, "Status 5 (signed)", "",-32767, 65535, 65535, 65535, 65535, 65535,0, 0
+ status6Gauge = status6, "Status 6", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status7Gauge = status7, "Status 7", "", 0, 255, 255, 255, 255, 255, 0, 0
+ status8Gauge = status8, "Status 8", "", 0, 255, 255, 255, 255, 255, 0, 0
+ injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
+ looptimeGauge = looptime, "Mainloop time", "us", 0, 10000, -1, -1, 1000, 6000, 0, 0
+ sd_filenum = sd_filenum, "SDcard file number", "", 0, 9999, 9999, 9999, 9999, 9999, 0 ,0
+ sd_error = sd_error, "SDcard error", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_status = sd_status, "SDcard status", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ sd_phase = sd_phase, "SDcard phase", "", 0, 255, 255, 255, 255, 255, 0 ,0
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1
+ veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
+ cel_statusGauge = cel_status, "CEL Status", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_status2Gauge = cel_status2, "CEL Status2", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
+ cel_errorcodeGauge = cel_errorcode, "CEL Error code", "", 0, 32, 32, 32, 32, 32, 0, 0
+ loopGauge = loop, "Loop bits 1-3", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0
+ can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0
+;------------------------------------------------------------------------------
+
+[FrontPage]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+ ; Gauges are numbered left to right, top to bottom.
+ ;
+ ; 1 2 3 4
+ ; 5 6 7 8
+
+ gauge1 = tachometer
+; gauge2 = EAEGauge1
+ gauge2 = throttleGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = cltGauge
+ gauge5 = advdegGauge
+ gauge6 = fuelloadGauge
+#if NARROW_BAND_EGO
+ gauge7 = egoV1Gauge
+#elif LAMBDA
+ gauge7 = lambda1Gauge
+#else
+ gauge7 = afr1Gauge
+#endif
+; gauge7 = dwellGauge
+; gauge8 = matGauge
+ gauge8 = lostsyncGauge
+
+ ;----------------------------------------------------------------------------
+ ; Indicators
+ ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+
+ indicator = { ready }, "Not Ready", "Ready", white, black, green, black
+ indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
+ indicator = { startw }, "ASE OFF", "ASE", white, black, green, black
+ indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black
+ indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black
+ indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
+ indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black
+ indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
+; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black
+
+ indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
+ indicator = { status1 & 2}, "Data Lost", "Lost Data", white, black, red, black
+ indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
+ indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
+ indicator = { status1 & 32}, "VE1/2", "VE3/4", white, black, green, black
+ indicator = { status1 & 64}, "SPK1/2", "SPK3/4", white, black, green, black
+ indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
+
+ indicator = { status2 & 1}, "N2O 1 off", "N2O 1 on", white, black, green, black
+ indicator = { status2 & 2}, "N2O 2 off", "N2O 2 on", white, black, green, black
+ indicator = { status2 & 4}, "No Launch", "Launch in", white, black, green, black
+ indicator = { status2 & 16}, "No Flat shift", "Flat shift", white, black, green, black
+ indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black
+ indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black
+ indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black
+
+ indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black
+ indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black
+ indicator = { status3 & 4}, "3 step off", "3 step on", white, black, green, black
+ indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black
+ indicator = { status3 & 16}, "No 3 step", "3 step in", white, black, green, black
+ indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black
+ indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black
+ indicator = { status3 & 128}, "Launch Off", "Launch on", white, black, red, black
+
+ indicator = { status6 & 1}, "EGT warn", "EGT warn", white, black, red, black
+ indicator = { status6 & 2}, "EGT shutdown", "EGT shutdown", white, black, red, black
+ indicator = { status6 & 4}, "AFR warn", "AFR warn", white, black, red, black
+ indicator = { status6 & 8}, "AFR shutdown", "AFR shutdown", white, black, red, black
+ indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black
+ indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black
+ indicator = { status6 & 64}, "Fan", "Fan", white, black, green, black
+ indicator = { status6 & 128}, "MAPsample error!", "MAPsample error!", white, black, red, black
+
+ indicator = { status7 & 1}, "VVT1 err", "VVT1 err", white, black, red, black
+ indicator = { status7 & 2}, "VVT2 err", "VVT2 err", white, black, red, black
+ indicator = { status7 & 4}, "VVT3 err", "VVT3 err", white, black, red, black
+ indicator = { status7 & 8}, "VVT4 err", "VVT4 err", white, black, red, black
+ indicator = { status7 & 16}, "No Knock", "Knock", white, black, red, black
+ indicator = { status7 & 32}, "AC", "AC", white, black, green, black
+ indicator = { status7 & 64}, "Check Engine", "Check Engine", white, black, red, black
+ indicator = { status7 & 128}, "Limp mode", "Limp mode", white, black, red, black
+
+ indicator = { status8 & 4}, "W.I. low", "W.I. low!", white, black, red, black
+ indicator = { status8 & 8}, "PW4X", "PW4X", white, black, red, black
+ indicator = { status8 & 16}, "VSS launch L/O", "VSS launch L/O", white, black, red, black
+ indicator = { status8 & 32}, "VSS launch on", "VSS launch on", white, black, red, black
+
+ indicator = { sd_status & 1}, "No SD", "SD in", white, black, green, black
+ indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black
+ indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black
+ indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black
+
+ indicator = { (gammaEnrich < 70) }, "-", "Tune error", white, black, red, black
+
+#if PORT_STATUS
+ indicator = { porta0 }, "PORTA0", "PORTA0", white, black, green, black
+ indicator = { porta1 }, "PORTA1", "PORTA1", white, black, green, black
+ indicator = { porta2 }, "PORTA2", "PORTA2", white, black, green, black
+ indicator = { porta3 }, "PORTA3", "PORTA3", white, black, green, black
+ indicator = { porta4 }, "PORTA4", "PORTA4", white, black, green, black
+ indicator = { porta5 }, "PORTA5", "PORTA5", white, black, green, black
+ indicator = { porta6 }, "PORTA6", "PORTA6", white, black, green, black
+ indicator = { porta7 }, "PORTA7", "PORTA7", white, black, green, black
+
+ indicator = { portb0 }, "PORTB0", "PORTB0", white, black, green, black
+ indicator = { portb1 }, "PORTB1", "PORTB1", white, black, green, black
+ indicator = { portb2 }, "PORTB2", "PORTB2", white, black, green, black
+ indicator = { portb3 }, "PORTB3", "PORTB3", white, black, green, black
+ indicator = { portb4 }, "PORTB4", "PORTB4", white, black, green, black
+ indicator = { portb5 }, "PORTB5", "PORTB5", white, black, green, black
+ indicator = { portb6 }, "PORTB6", "PORTB6", white, black, green, black
+ indicator = { portb7 }, "PORTB7", "PORTB7", white, black, green, black
+
+ indicator = { porte0 }, "PORTE0", "PORTE0", white, black, green, black
+ indicator = { porte1 }, "PORTE1", "PORTE1", white, black, green, black
+ indicator = { porte2 }, "PORTE2", "PORTE2", white, black, green, black
+ indicator = { porte4 }, "PORTE4", "PORTE4", white, black, green, black
+ indicator = { porth6 }, "PORTH6", "PORTH6", white, black, green, black
+ indicator = { porth7 }, "PORTH7", "PORTH7", white, black, green, black
+
+ indicator = { portk0 }, "PORTK0", "PORTK0", white, black, green, black
+ indicator = { portk1 }, "PORTK1", "PORTK1", white, black, green, black
+ indicator = { portk2 }, "PORTK2", "PORTK2", white, black, green, black
+ indicator = { portk3 }, "PORTK3", "PORTK3", white, black, green, black
+ indicator = { portk7 }, "PORTK7", "PORTK7", white, black, green, black
+
+ indicator = { portj0 }, "PORTJ0", "PORTJ0", white, black, green, black
+ indicator = { portj1 }, "PORTJ1", "PORTJ1", white, black, green, black
+ indicator = { portm2 }, "PORTM2", "PORTM2", white, black, green, black
+ indicator = { portm3 }, "PORTM3", "PORTM3", white, black, green, black
+ indicator = { portm4 }, "PORTM4", "PORTM4", white, black, green, black
+ indicator = { portm5 }, "PORTM5", "PORTM5", white, black, green, black
+ indicator = { portj7 }, "PORTJ7", "PORTJ7", white, black, green, black
+
+ indicator = { portp2 }, "PORTP2", "PORTP2", white, black, green, black
+ indicator = { portp3 }, "PORTP3", "PORTP3", white, black, green, black
+ indicator = { portp4 }, "PORTP4", "PORTP4", white, black, green, black
+ indicator = { portp5 }, "PORTP5", "PORTP5", white, black, green, black
+ indicator = { portp6 }, "PORTP6", "PORTP6", white, black, green, black
+ indicator = { portp7 }, "PORTP7", "PORTP7", white, black, green, black
+
+ indicator = { portt0 }, "PORTT0", "PORTT0", white, black, green, black
+ indicator = { portt1 }, "PORTT1", "PORTT1", white, black, green, black
+ indicator = { portt2 }, "PORTT2", "PORTT2", white, black, green, black
+ indicator = { portt3 }, "PORTT3", "PORTT3", white, black, green, black
+ indicator = { portt4 }, "PORTT4", "PORTT4", white, black, green, black
+ indicator = { portt5 }, "PORTT5", "PORTT5", white, black, green, black
+ indicator = { portt6 }, "PORTT6", "PORTT6", white, black, green, black
+
+ indicator = { canin1_8 & 1 }, "CANIN1", "CANIN1", white, black, green, black
+ indicator = { canin1_8 & 2 }, "CANIN2", "CANIN2", white, black, green, black
+ indicator = { canin1_8 & 4 }, "CANIN3", "CANIN3", white, black, green, black
+ indicator = { canin1_8 & 8 }, "CANIN4", "CANIN4", white, black, green, black
+ indicator = { canin1_8 & 16 }, "CANIN5", "CANIN5", white, black, green, black
+ indicator = { canin1_8 & 32 }, "CANIN6", "CANIN6", white, black, green, black
+ indicator = { canin1_8 & 64 }, "CANIN7", "CANIN7", white, black, green, black
+ indicator = { canin1_8 & 128}, "CANIN8", "CANIN8", white, black, green, black
+#endif
+
+ indicator = { cel_status_map }, "MAP fault", "MAP fault", white, black, red, black ; 1
+ indicator = { cel_status_mat }, "MAT fault", "MAT fault", white, black, red, black ; 2
+ indicator = { cel_status_clt }, "CLT fault", "CLT fault", white, black, red, black ; 4
+ indicator = { cel_status_tps }, "TPS fault", "TPS fault", white, black, red, black ; 8
+ indicator = { cel_status_batt }, "BATT fault", "BATT fault", white, black, red, black ; 16
+ indicator = { cel_status_afr0 }, "AFR0 fault", "AFR0 fault", white, black, red, black ; 32
+ indicator = { cel_status_sync }, "SYNC fault", "SYNC fault", white, black, red, black ; 64
+ indicator = { cel_status_egt }, "EGT fault", "EGT fault", white, black, red, black ; 128
+ indicator = { cel_status_flex }, "Flex fault", "Flex fault", white, black, red, black ;256
+ indicator = { cel_status_maf }, "MAF fault", "MAF fault", white, black, red, black ; 512
+ indicator = { cel_status_knock }, "Knock fault", "Knock fault", white, black, red, black ; 1024
+ indicator = { cel_status_cam }, "Cam fault", "Cam fault", white, black, red, black ; 2048
+ indicator = { cel_status_oil}, "Oil fault", "Oil fault", white, black, red, black ; 4096
+ indicator = { cel_status_fp}, "Fuel press.", "Fuel press.", white, black, red, black ; 4096
+ indicator = { cel_status_egtshut}, "CEL EGT shutdown", "CEL EGT shutdown", white, black, red, black ; 16384
+ indicator = { cel_status_afrshut}, "CEL AFR shutdown", "CEL AFR shutdown", white, black, red, black ; 32768
+
+ indicator = { cel_status2_winj}, "CEL W.Inj low", "CEL W.Inj low", white, black, red, black ; 1
+ indicator = { cel_status2_shutd}, "Safety shutdown", "Safety shutdown", white, black, red, black ; 2
+
+;-------------------------------------------------------------------------------
+
+[RunTime]
+ barHysteresis = 2.5 ; Seconds
+ coolantBar = {cltlowlim}, {clthighlim}
+ matBar = -40, {mathigh}
+ batteryBar = 6, 15
+ dutyCycleBar = 0, 100
+
+#if NARROW_BAND_EGO
+ egoBar = 0.0 , 1.0
+#elif LAMBDA
+ egoBar = 0.5, 1.5
+#else
+ egoBar = 9.7, 19.7
+#endif
+
+ gammaEBar = 0, 200
+ mapBar = 0, 255
+ pulseWidthBar = 0, 25.5
+ rpmBar = 0, {rpmhigh}
+ throttleBar = 0, 100
+ egoCorrBar = 0, 200
+ baroCorrBar = 0, 200
+ warmupCorrBar = 0, 200
+ airdenCorrBar = 0, 200
+ veCorrBar = 0, 200
+ accCorrBar = 0, 100
+
+;-------------------------------------------------------------------------------
+
+[Tuning]
+#if NARROW_BAND_EGO
+ egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings.
+#elif LAMBDA
+ egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings.
+#else
+ egoLEDs = 19.7, 9.7, 14.7 ; Afr settings.
+#endif
+
+; font = "Lucida Console", 12
+
+; font = "Courier", 14
+ spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
+ cursorDepth = 2 ; Same as spot depth.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+#if NARROW_BAND_EGO
+ gauge3 = egoV1Gauge, egoV1Gauge, egoV1Gauge, egoV1Gauge
+#elif LAMBDA
+ gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
+#else
+ gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
+#endif
+ gauge4 = egoCorrGauge1, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = egoCorrGauge2, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[AccelerationWizard]
+ tpsDotBar = 0, 800
+ mapDotBar = 0, 700
+
+;-------------------------------------------------------------------------------
+
+[BurstMode]
+; getCommand = "a\x00\x06"
+ getCommand = "A"
+
+[OutputChannels]
+ deadValue = { 0 } ; Convenient unchanging value.
+ ochBlockSize = 512 ; change this if adding extra data to outpc
+#if CAN_COMMANDS
+ ochGetCommand = "r\$tsCanId\x07%2o%2c" ; leave this alone
+#else
+; fast get via serial
+ ochGetCommand = "A"
+#endif
+
+ scatteredOffsetArray = qfrtfielddata
+ scatteredOchGetCommand = "g"
+ scatteredGetEnabled = { scatterRuntimeEnabled && (tsLocalCanId == tsCanId) }
+
+ seconds = scalar, U16, 0, "s", 1.000, 0.0
+ secl = { seconds % 256 }, "s" ; For runtime screen.
+#if PW_4X
+ pulseWidth1 = scalar, U16, 2, "ms", 0.004, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.004, 0.0
+#else
+ pulseWidth1 = scalar, U16, 2, "ms", 0.001, 0.0
+ pulseWidth2 = scalar, U16, 4, "ms", 0.001, 0.0
+#endif
+ pulseWidth = { pulseWidth1 }, "ms" ; For runtime screen.
+
+ rpm = scalar, U16, 6, "RPM", 1.000, 0.0
+ advance = scalar, S16, 8, "deg", 0.100, 0.0
+
+ ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10
+ squirt = scalar, U08, 10, "bit", 1.000, 0.0
+ ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above
+ ; inj1: equ 3 ; 0 = no squirt 1 = squirt
+ ; inj2: equ 5 ; 0 = no squirt 1 = squirt
+ ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt
+ ; firing1: equ 0 ; 0 = not squirting 1 = squirting
+ ; sched2: equ 4
+ ; firing2: equ 1
+ firing1 = bits, U08, 10, [0:0]
+ firing2 = bits, U08, 10, [1:1]
+ sched1 = bits, U08, 10, [2:2]
+ inj1 = bits, U08, 10, [3:3]
+ sched2 = bits, U08, 10, [4:4]
+ inj2 = bits, U08, 10, [5:5]
+
+ engine = scalar, U08, 11, "bit", 1.000, 0.0
+ ; Engine Operating/Status variables - bit fields for "engine" variable above
+ ; ready: equ 0 ; 0 = engine not ready 1 = ready to run
+ ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking
+ ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment
+ ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup
+ ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode
+ ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode
+ ready = bits, U08, 11, [0:0]
+ crank = bits, U08, 11, [1:1]
+ startw = bits, U08, 11, [2:2]
+ warmup = bits, U08, 11, [3:3]
+ tpsaccaen = bits, U08, 11, [4:4]
+ tpsaccden = bits, U08, 11, [5:5]
+ mapaccaen = bits, U08, 11, [6:6]
+ mapaccden = bits, U08, 11, [7:7]
+
+#if NARROW_BAND_EGO
+ afrtgt1 = scalar, U08, 12, "Volts", 0.00489, 0.0
+ afrtgt2 = scalar, U08, 13, "Volts", 0.00489, 0.0
+#elif LAMBDA
+ afrtgt1raw = scalar, U08, 12, "Lambda", 0.1, 0.0
+ afrtgt2raw = scalar, U08, 13, "Lambda", 0.1, 0.0
+#else
+ afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
+ afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
+#endif
+ ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr valid
+ wbo2_en1 = scalar, U08, 14, "", 1.000, 0.0
+ wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0
+
+ ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10
+ ; // map - kpa x 10
+ ; // mat, clt deg(C/F)x 10
+ ; // tps - % x 10
+ ; // batt - vlts x 10
+ ; // ego1,2 - afr x 10
+ ; // knock - volts x 10
+ barometer = scalar, S16, 16, "kPa", 0.100, 0.0
+ map = scalar, S16, 18, "kPa", 0.100, 0.0
+#if CELSIUS
+ mat = scalar, S16, 20, "°C", 0.05555, -320.0
+ coolant = scalar, S16, 22, "°C", 0.05555, -320.0
+#else
+ mat = scalar, S16, 20, "°F", 0.100, 0.0
+ coolant = scalar, S16, 22, "°F", 0.100, 0.0
+#endif
+ tps = scalar, S16, 24, "%", 0.100, 0.0
+ throttle = { tps }, "%"
+ batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0
+ afr1_old = scalar, S16, 28, "AFR", 0.100, 0.0
+ afr2_old = scalar, S16, 30, "AFR", 0.100, 0.0
+ knock = scalar, S16, 32, "%", 0.100, 0.0
+
+ ; egocor1,egocor2,aircor,warmcor, // all in %
+ egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0
+ egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges.
+ egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0
+ airCorrection = scalar, S16, 38, "%", 0.1000, 0.0
+ warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0
+
+ ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units)
+ ; // tpsfuelcut - %
+ ; // barcor,gammae - %
+ accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0
+ tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0
+ baroCorrection = scalar, S16, 46, "%", 0.1000, 0.0
+ gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0
+
+ ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - %
+ ; // iacstep - steps
+ ; // cold_adv_deg - deg x 10
+ veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0
+ veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0
+ veCurr = { veCurr1 }, "%" ; For runtime display.
+ iacstep = scalar, S16, 54, "", 1.000, 0.0
+ idleDC = scalar, S16, 54, "%", 0.392, 0.0
+ coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0
+ TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0
+ MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0
+ dwell = scalar, U16, 62, "ms", 0.1000, 0.0
+ mafload = scalar, S16, 64, "kPa", 0.1000, 0.0
+ fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm
+ fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Correcton based on percent alcohol in fuel.
+ sd_status = scalar, U08, 70, "", 1.0, 0.0
+ knockRetard = scalar, U08, 71, "deg", 0.1, 0.0
+ EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0
+ egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted
+ egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted
+ status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1
+ status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2
+ status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3
+ status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4
+ status6 = scalar, U08, 82, "", 1.0, 0.0
+ status7 = scalar, U08, 83, "", 1.0, 0.0
+ status5 = scalar, U16, 84, "", 1, 0 ; istatus5
+ status5s = scalar, S16, 84, "", 1, 0 ; istatus5
+ cel_status = scalar, U16, 86, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status_map = bits, U08, 87, [0:0] ; low byte
+ cel_status_mat = bits, U08, 87, [1:1]
+ cel_status_clt = bits, U08, 87, [2:2]
+ cel_status_tps = bits, U08, 87, [3:3]
+ cel_status_batt = bits, U08, 87, [4:4]
+ cel_status_afr0 = bits, U08, 87, [5:5]
+ cel_status_sync = bits, U08, 87, [6:6]
+ cel_status_egt = bits, U08, 87, [7:7]
+ cel_status_flex = bits, U08, 86, [0:0] ; high byte
+ cel_status_maf = bits, U08, 86, [1:1] ; high byte
+ cel_status_knock = bits, U08, 86, [2:2] ; high byte
+ cel_status_cam = bits, U08, 86, [3:3] ; high byte
+ cel_status_oil = bits, U08, 86, [4:4] ; high byte
+ cel_status_fp = bits, U08, 86, [5:5] ; high byte
+ cel_status_egtshut= bits, U08, 86, [6:6] ; high byte
+ cel_status_afrshut= bits, U08, 86, [7:7] ; high byte
+ fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
+ ignload = scalar, S16, 90, "%", 0.100, 0.0
+ ignload2 = scalar, S16, 92, "%", 0.100, 0.0
+ synccnt = scalar, U08, 94, "", 1, 0
+ syncreason = scalar, U08, 95, "", 1.0, 0.0
+ wallfuel1 = scalar, U32, 96, "uS", 0.010, 0.0
+ wallfuel2 = scalar, U32, 100, "uS", 1.000, 0.0
+ sensor01 = scalar, S16, 104, "", 0.1000, 0.0
+ sensor02 = scalar, S16, 106, "", 0.1000, 0.0
+ sensor03 = scalar, S16, 108, "", 0.1000, 0.0
+ sensor04 = scalar, S16, 110, "", 0.1000, 0.0
+ sensor05 = scalar, S16, 112, "", 0.1000, 0.0
+ sensor06 = scalar, S16, 114, "", 0.1000, 0.0
+ sensor07 = scalar, S16, 116, "", 0.1000, 0.0
+ sensor08 = scalar, S16, 118, "", 0.1000, 0.0
+ sensor09 = scalar, S16, 120, "", 0.1000, 0.0
+ sensor10 = scalar, S16, 122, "", 0.1000, 0.0
+ sensor11 = scalar, S16, 124, "", 0.1000, 0.0
+ sensor12 = scalar, S16, 126, "", 0.1000, 0.0
+ sensor13 = scalar, S16, 128, "", 0.1000, 0.0
+ sensor14 = scalar, S16, 130, "", 0.1000, 0.0
+ sensor15 = scalar, S16, 132, "", 0.1000, 0.0
+ sensor16 = scalar, S16, 134, "", 0.1000, 0.0
+ canin1_8 = scalar, U08, 136, "", 1.000, 0.0
+ canout1_8 = scalar, U08, 137, "", 1.000, 0.0
+ canout9_16 = scalar, U08, 138, "", 1.000, 0.0
+ boostduty = scalar, U08, 139 , "%", 1.0, 0.0
+#if PW_4X
+ n2o_addfuel = scalar, S16, 140, "ms", 0.004, 0
+#else
+ n2o_addfuel = scalar, S16, 140, "ms", 0.001, 0
+#endif
+ n2o_retard = scalar, S16, 142, "deg", 0.1, 0
+#if PW_4X
+ pwseq1 = scalar, U16, 144, "ms", 0.004, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.004, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.004, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.004, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.004, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.004, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.004, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.004, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.004, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.004, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.004, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.004, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.004, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.004, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.004, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.004, 0.0
+#else
+ pwseq1 = scalar, U16, 144, "ms", 0.001, 0.0
+ pwseq2 = scalar, U16, 146, "ms", 0.001, 0.0
+ pwseq3 = scalar, U16, 148, "ms", 0.001, 0.0
+ pwseq4 = scalar, U16, 150, "ms", 0.001, 0.0
+ pwseq5 = scalar, U16, 152, "ms", 0.001, 0.0
+ pwseq6 = scalar, U16, 154, "ms", 0.001, 0.0
+ pwseq7 = scalar, U16, 156, "ms", 0.001, 0.0
+ pwseq8 = scalar, U16, 158, "ms", 0.001, 0.0
+ pwseq9 = scalar, U16, 160, "ms", 0.001, 0.0
+ pwseq10 = scalar, U16, 162, "ms", 0.001, 0.0
+ pwseq11 = scalar, U16, 164, "ms", 0.001, 0.0
+ pwseq12 = scalar, U16, 166, "ms", 0.001, 0.0
+ pwseq13 = scalar, U16, 168, "ms", 0.001, 0.0
+ pwseq14 = scalar, U16, 170, "ms", 0.001, 0.0
+ pwseq15 = scalar, U16, 172, "ms", 0.001, 0.0
+ pwseq16 = scalar, U16, 174, "ms", 0.001, 0.0
+#endif
+ nitrous1_duty = scalar, U08, 176, "%", 1, 0
+ nitrous2_duty = scalar, U08, 177, "%", 1, 0
+#if CELSIUS
+ egt1 = scalar, S16, 178, "°C", 0.05555, -320
+ egt2 = scalar, S16, 180, "°C", 0.05555, -320
+ egt3 = scalar, S16, 182, "°C", 0.05555, -320
+ egt4 = scalar, S16, 184, "°C", 0.05555, -320
+ egt5 = scalar, S16, 186, "°C", 0.05555, -320
+ egt6 = scalar, S16, 188, "°C", 0.05555, -320
+ egt7 = scalar, S16, 190, "°C", 0.05555, -320
+ egt8 = scalar, S16, 192, "°C", 0.05555, -320
+ egt9 = scalar, S16, 194, "°C", 0.05555, -320
+ egt10 = scalar, S16, 196, "°C", 0.05555, -320
+ egt11 = scalar, S16, 198, "°C", 0.05555, -320
+ egt12 = scalar, S16, 200, "°C", 0.05555, -320
+ egt13 = scalar, S16, 202, "°C", 0.05555, -320
+ egt14 = scalar, S16, 204, "°C", 0.05555, -320
+ egt15 = scalar, S16, 206, "°C", 0.05555, -320
+ egt16 = scalar, S16, 208, "°C", 0.05555, -320
+#else
+ egt1 = scalar, S16, 178, "°F", 0.1, 0
+ egt2 = scalar, S16, 180, "°F", 0.1, 0
+ egt3 = scalar, S16, 182, "°F", 0.1, 0
+ egt4 = scalar, S16, 184, "°F", 0.1, 0
+ egt5 = scalar, S16, 186, "°F", 0.1, 0
+ egt6 = scalar, S16, 188, "°F", 0.1, 0
+ egt7 = scalar, S16, 190, "°F", 0.1, 0
+ egt8 = scalar, S16, 192, "°F", 0.1, 0
+ egt9 = scalar, S16, 194, "°F", 0.1, 0
+ egt10 = scalar, S16, 196, "°F", 0.1, 0
+ egt11 = scalar, S16, 198, "°F", 0.1, 0
+ egt12 = scalar, S16, 200, "°F", 0.1, 0
+ egt13 = scalar, S16, 202, "°F", 0.1, 0
+ egt14 = scalar, S16, 204, "°F", 0.1, 0
+ egt15 = scalar, S16, 206, "°F", 0.1, 0
+ egt16 = scalar, S16, 208, "°F", 0.1, 0
+#endif
+ maf = scalar, U16, 210, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
+ canpwmin0 = scalar, U16, 212, "", 1.000, 0.0
+ canpwmin1 = scalar, U16, 214, "", 1.000, 0.0
+ canpwmin2 = scalar, U16, 216, "", 1.000, 0.0
+ canpwmin3 = scalar, U16, 218, "", 1.000, 0.0
+ fuelflow = scalar, U16, 220, "cc/min", 1, 0.0
+ fuelcons = scalar, U16, 222, "l/km", 1, 0.0
+ EAEFuelCorr2 = scalar, U16, 224 , "%", 1.0, 0.0
+ tpsADC = scalar, U16, 226, "ADC", 1, 0 ; REAL for calibrator
+ eaeload1 = scalar, S16, 228, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.0
+ afrload1 = scalar, S16, 230, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1000, 0.0
+ gear = scalar, U08, 232, "", 1, 0
+ timing_err = scalar, S08, 233, "%", 1, 0 ; accuracy of timing prediction
+ RPMdot = scalar, S16, 234, "rpm/sec", 10, 0
+ vss1dot = scalar, S16, 236, "ms-2", 0.1, 0
+ vss2dot = scalar, S16, 238, "ms-2", 0.1, 0
+ accelx = scalar, S16, 240, "ms-2", 0.001, 0
+ accely = scalar, S16, 242, "ms-2", 0.001, 0
+ accelz = scalar, S16, 244, "ms-2", 0.001, 0
+ duty_pwm_a = scalar, U08, 246, "%", 1, 0
+ duty_pwm_b = scalar, U08, 247, "%", 1, 0
+ duty_pwm_c = scalar, U08, 248, "%", 1, 0
+ duty_pwm_d = scalar, U08, 249, "%", 1, 0
+ duty_pwm_e = scalar, U08, 250, "%", 1, 0
+ duty_pwm_f = scalar, U08, 251, "%", 1, 0
+ afr1 = scalar, U08, 252, "AFR", 0.1, 0.0
+ afr2 = scalar, U08, 253, "AFR", 0.1, 0.0
+ afr3 = scalar, U08, 254, "AFR", 0.1, 0.0
+ afr4 = scalar, U08, 255, "AFR", 0.1, 0.0
+ afr5 = scalar, U08, 256, "AFR", 0.1, 0.0
+ afr6 = scalar, U08, 257, "AFR", 0.1, 0.0
+ afr7 = scalar, U08, 258, "AFR", 0.1, 0.0
+ afr8 = scalar, U08, 259, "AFR", 0.1, 0.0
+ afr9 = scalar, U08, 260, "AFR", 0.1, 0.0
+ afr10 = scalar, U08, 261, "AFR", 0.1, 0.0
+ afr11 = scalar, U08, 262, "AFR", 0.1, 0.0
+ afr12 = scalar, U08, 263, "AFR", 0.1, 0.0
+ afr13 = scalar, U08, 264, "AFR", 0.1, 0.0
+ afr14 = scalar, U08, 265, "AFR", 0.1, 0.0
+ afr15 = scalar, U08, 266, "AFR", 0.1, 0.0
+ afr16 = scalar, U08, 267, "AFR", 0.1, 0.0
+ egov1 = scalar, U16, 268, "V", 0.00489, 0.0
+ egov2 = scalar, U16, 270, "V", 0.00489, 0.0
+ egov3 = scalar, U16, 272, "V", 0.00489, 0.0
+ egov4 = scalar, U16, 274, "V", 0.00489, 0.0
+ egov5 = scalar, U16, 276, "V", 0.00489, 0.0
+ egov6 = scalar, U16, 278, "V", 0.00489, 0.0
+ egov7 = scalar, U16, 280, "V", 0.00489, 0.0
+ egov8 = scalar, U16, 282, "V", 0.00489, 0.0
+ egov9 = scalar, U16, 284, "V", 0.00489, 0.0
+ egov10 = scalar, U16, 286, "V", 0.00489, 0.0
+ egov11 = scalar, U16, 288, "V", 0.00489, 0.0
+ egov12 = scalar, U16, 290, "V", 0.00489, 0.0
+ egov13 = scalar, U16, 292, "V", 0.00489, 0.0
+ egov14 = scalar, U16, 294, "V", 0.00489, 0.0
+ egov15 = scalar, U16, 296, "V", 0.00489, 0.0
+ egov16 = scalar, U16, 298, "V", 0.00489, 0.0
+ egocor1 = scalar, S16, 300, "%", 0.1000, 0.0
+ egocor2 = scalar, S16, 302, "%", 0.1000, 0.0
+ egocor3 = scalar, S16, 304, "%", 0.1000, 0.0
+ egocor4 = scalar, S16, 306, "%", 0.1000, 0.0
+ egocor5 = scalar, S16, 308, "%", 0.1000, 0.0
+ egocor6 = scalar, S16, 310, "%", 0.1000, 0.0
+ egocor7 = scalar, S16, 312, "%", 0.1000, 0.0
+ egocor8 = scalar, S16, 314, "%", 0.1000, 0.0
+ egocor9 = scalar, S16, 316, "%", 0.1000, 0.0
+ egocor10 = scalar, S16, 318, "%", 0.1000, 0.0
+ egocor11 = scalar, S16, 320, "%", 0.1000, 0.0
+ egocor12 = scalar, S16, 322, "%", 0.1000, 0.0
+ egocor13 = scalar, S16, 324, "%", 0.1000, 0.0
+ egocor14 = scalar, S16, 326, "%", 0.1000, 0.0
+ egocor15 = scalar, S16, 328, "%", 0.1000, 0.0
+ egocor16 = scalar, S16, 330, "%", 0.1000, 0.0
+ stream_level = scalar, U08, 332, "", 1,0
+ water_duty = scalar, U08, 333, "%", 1, 0
+ dwell_trl = scalar, U16, 334, "ms", 0.1000, 0.0
+ vss1 = scalar, U16, 336, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss2 = scalar, U16, 338, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss1_ms_1 = scalar, U16, 336, "ms-1", 0.1, 0.0 ; see calcs converting this raw number into kph or mph
+ vss2_ms_1 = scalar, U16, 338, "ms-1", 0.1, 0.0
+ ss1 = scalar, U16, 340, "RPM", 10.000, 0.0 ; now in steps of 10 rpm
+ ss2 = scalar, U16, 342, "RPM", 10.000, 0.0
+ nitrous_timer = scalar, U16, 344, "s", 0.001, 0
+ sd_filenum = scalar, U16, 346, "", 1, 0
+ sd_error = scalar, U08, 348, "", 1, 0
+ sd_phase = scalar, U08, 349, "", 1, 0
+ boostduty2 = scalar, U08, 350 , "%", 1.0, 0.0
+ status8 = scalar, U08, 351, "", 1.0, 0.0
+ vvt_ang1 = scalar, S16, 352, "deg", 0.100, 0.0
+ vvt_ang2 = scalar, S16, 354, "deg", 0.100, 0.0
+ vvt_ang3 = scalar, S16, 356, "deg", 0.100, 0.0
+ vvt_ang4 = scalar, S16, 358, "deg", 0.100, 0.0
+ inj_timing_pri = scalar, S16, 360, "deg", 0.100, 0.0
+ inj_timing_sec = scalar, S16, 362, "deg", 0.100, 0.0
+ vvt_target1 = scalar, S16, 364, "deg", 0.100, 0.0
+ vvt_target2 = scalar, S16, 366, "deg", 0.100, 0.0
+ vvt_target3 = scalar, S16, 368, "deg", 0.100, 0.0
+ vvt_target4 = scalar, S16, 370, "deg", 0.100, 0.0
+ vvt_duty1 = scalar, U08, 372 , "%", 0.392, 0.0
+ vvt_duty2 = scalar, U08, 373 , "%", 0.392, 0.0
+ vvt_duty3 = scalar, U08, 374 , "%", 0.392, 0.0
+ vvt_duty4 = scalar, U08, 375 , "%", 0.392, 0.0
+ fuel_pct = scalar, U16, 376, "%", 0.1000, 0.0
+#if CELSIUS
+ fuel_temp1 = scalar, S16, 378, "°C", 0.05555, -320.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#else
+ fuel_temp1 = scalar, S16, 378, "°F", 0.100, 0.0
+ fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0
+#endif
+ tps_accel = scalar, S16, 382, "%", 0.1000, 0.0
+ map_accel = scalar, S16, 384, "%", 0.1000, 0.0
+ total_accel = scalar, S16, 386, "%", 0.1000, 0.0
+ knock_cyl01 = scalar, U08, 388, "%", 0.4, 0
+ knock_cyl02 = scalar, U08, 389, "%", 0.4, 0
+ knock_cyl03 = scalar, U08, 390, "%", 0.4, 0
+ knock_cyl04 = scalar, U08, 391, "%", 0.4, 0
+ knock_cyl05 = scalar, U08, 392, "%", 0.4, 0
+ knock_cyl06 = scalar, U08, 393, "%", 0.4, 0
+ knock_cyl07 = scalar, U08, 394, "%", 0.4, 0
+ knock_cyl08 = scalar, U08, 395, "%", 0.4, 0
+ knock_cyl09 = scalar, U08, 396, "%", 0.4, 0
+ knock_cyl10 = scalar, U08, 397, "%", 0.4, 0
+ knock_cyl11 = scalar, U08, 398, "%", 0.4, 0
+ knock_cyl12 = scalar, U08, 399, "%", 0.4, 0
+ knock_cyl13 = scalar, U08, 400, "%", 0.4, 0
+ knock_cyl14 = scalar, U08, 401, "%", 0.4, 0
+ knock_cyl15 = scalar, U08, 402, "%", 0.4, 0
+ knock_cyl16 = scalar, U08, 403, "%", 0.4, 0
+ launch_timer = scalar, U16, 404, "s", 0.001, 0
+ launch_retard = scalar, S16, 406, "deg", 0.1, 0
+ maf_volts = scalar, U16, 408, "V", 0.001, 0.0
+ porta = scalar, U08, 410, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porta0 = bits, U08, 410, [0:0]
+ porta1 = bits, U08, 410, [1:1]
+ porta2 = bits, U08, 410, [2:2]
+ porta3 = bits, U08, 410, [3:3]
+ porta4 = bits, U08, 410, [4:4]
+ porta5 = bits, U08, 410, [5:5]
+ porta6 = bits, U08, 410, [6:6]
+ porta7 = bits, U08, 410, [7:7]
+
+ portb = scalar, U08, 411, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portb0 = bits, U08, 411, [0:0]
+ portb1 = bits, U08, 411, [1:1]
+ portb2 = bits, U08, 411, [2:2]
+ portb3 = bits, U08, 411, [3:3]
+ portb4 = bits, U08, 411, [4:4]
+ portb5 = bits, U08, 411, [5:5]
+ portb6 = bits, U08, 411, [6:6]
+ portb7 = bits, U08, 411, [7:7]
+
+ porteh = scalar, U08, 412, "bit", 1.000, 0.0 ; raw i/o port status bits
+ porte0 = bits, U08, 412, [0:0]
+ porte1 = bits, U08, 412, [1:1]
+ porte2 = bits, U08, 412, [2:2]
+ porte4 = bits, U08, 412, [4:4]
+ porth6 = bits, U08, 412, [6:6]
+ porth7 = bits, U08, 412, [7:7]
+
+ portk = scalar, U08, 413, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portk0 = bits, U08, 413, [0:0]
+ portk1 = bits, U08, 413, [1:1]
+ portk2 = bits, U08, 413, [2:2]
+ portk3 = bits, U08, 413, [3:3]
+ portk7 = bits, U08, 413, [7:7]
+
+ portmj = scalar, U08, 414, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portj0 = bits, U08, 414, [0:0]
+ portj1 = bits, U08, 414, [1:1]
+ portm2 = bits, U08, 414, [2:2]
+ portm3 = bits, U08, 414, [3:3]
+ portm4 = bits, U08, 414, [4:4]
+ portm5 = bits, U08, 414, [5:5]
+ portj7 = bits, U08, 414, [7:7]
+
+ portp = scalar, U08, 415, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portp2 = bits, U08, 415, [2:2]
+ portp3 = bits, U08, 415, [3:3]
+ portp4 = bits, U08, 415, [4:4]
+ portp5 = bits, U08, 415, [5:5]
+ portp6 = bits, U08, 415, [6:6]
+ portp7 = bits, U08, 415, [7:7]
+
+ portt = scalar, U08, 416, "bit", 1.000, 0.0 ; raw i/o port status bits
+ portt0 = bits, U08, 416, [0:0]
+ portt1 = bits, U08, 416, [1:1]
+ portt2 = bits, U08, 416, [2:2]
+ portt3 = bits, U08, 416, [3:3]
+ portt4 = bits, U08, 416, [4:4]
+ portt5 = bits, U08, 416, [5:5]
+ portt6 = bits, U08, 416, [6:6]
+ cel_errorcode = scalar, U08, 417, "bit", 1, 0.0
+ boost_targ_1 = scalar, S16, 418, "%", 0.1, 0
+ boost_targ_2 = scalar, S16, 420, "%", 0.1, 0
+#if CELSIUS
+ airtemp = scalar, S16, 422, "°C", 0.05555, -320.0
+#else
+ airtemp = scalar, S16, 422, "°F", 0.100, 0.0
+#endif
+ looptime = scalar, U16, 424, "us", 1.0, 0.0
+ vss3 = scalar, U16, 426, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss4 = scalar, U16, 428, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ vss3_ms_1 = scalar, U16, 426, "ms-1", 0.1, 0.0
+ vss4_ms_1 = scalar, U16, 428, "ms-1", 0.1, 0.0
+ fuel_press1 = scalar, S16, 430, "kPa", 0.100, 0.0
+ fuel_press2 = scalar, S16, 432, "kPa", 0.100, 0.0
+ cl_idle_targ_rpm = scalar, U16, 434, "rpm", 1, 0
+ fp_duty = scalar, U08, 436, "%", 0.392, 0.0
+ alt_duty = scalar, U08, 437, "%", 1, 0.0
+ alt_freq = scalar, U08, 437, "Hz", 1, 0.0
+ load_duty = scalar, U08, 438, "%", 1, 0.0
+ alt_targv = scalar, U08, 439, "V", 0.100, 0.0
+ batt_curr = scalar, S16, 440, "A", 0.1, 0.0
+ fueltemp_cor = scalar, S16, 442, "%", 0.100, 0.0
+ fuelpress_cor = scalar, S16, 444, "%", 0.100, 0.0
+ ltt_cor = scalar, S08, 446, "%", 0.100, 0.0
+; engine_state_
+ tc_retard = scalar, S16, 448, "deg", 0.100, 0.0
+ cel_retard = scalar, S16, 450, "deg", 0.100, 0.0
+ fc_retard = scalar, S16, 452, "deg", 0.100, 0.0
+ ext_advance = scalar, S16, 454, "deg", 0.100, 0.0
+ base_advance = scalar, S16, 456, "deg", 0.100, 0.0
+ idle_cor_advance = scalar, S16, 458, "deg", 0.100, 0.0
+ mat_retard = scalar, S16, 460, "deg", 0.100, 0.0
+ flex_advance = scalar, S16, 462, "deg", 0.100, 0.0
+ adv1 = scalar, S16, 464, "deg", 0.100, 0.0
+ adv2 = scalar, S16, 466, "deg", 0.100, 0.0
+ adv3 = scalar, S16, 468, "deg", 0.100, 0.0
+ adv4 = scalar, S16, 470, "deg", 0.100, 0.0
+ revlim_retard = scalar, S16, 472, "deg", 0.100, 0.0
+ als_timing = scalar, S16, 474, "deg", 0.100, 0.0
+#if PW_4X
+ als_addfuel = scalar, S16, 476, "ms", 0.004, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.004, 0.0
+#else
+ als_addfuel = scalar, S16, 476, "ms", 0.001, 0.0
+ deadtime1 = scalar, S16, 478, "ms", 0.001, 0.0
+#endif
+ launch_timing = scalar, S16, 480, "deg", 0.100, 0.0
+ step3_timing = scalar, S16, 482, "deg", 0.100, 0.0
+ launchvss_retard = scalar, S16, 484, "deg", 0.100, 0.0
+; cel_status2_xx = bits, U08, 486, [0:0] ; high byte
+ cel_status2 = scalar, U16, 486, "bit", 1.000, 0.0 ; engine fault bits
+ cel_status2_winj = bits, U08, 487, [0:0] ; low byte
+ cel_status2_shutd = bits, U08, 487, [1:1]
+ gps_latdeg = scalar, S08, 488, "", 1,0
+ gps_latmin = scalar, U08, 489, "", 1,0
+ gps_latmmin = scalar, U16, 490, "", 1,0
+ gps_londeg = scalar, U08, 492, "", 1,0
+ gps_lonmin = scalar, U08, 493, "", 1,0
+ gps_lonmmin = scalar, U16, 494, "", 1,0
+ gps_outstatus = scalar, U08, 496, "", 1,0
+ gps_altk = scalar, S08, 497, "", 1,0
+ gps_altm = scalar, S16, 498, "", 0.1,0
+ gps_speed = scalar, U16, 500, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0
+ gps_speed_ms_1 = scalar, U16, 500, "ms-1", 0.1, 0.0
+ gps_course = scalar, U16, 502, "", 0.1,0
+ generic_pid_duty_a = scalar, U08, 504, "%", 0.392, 0.0
+ generic_pid_duty_b = scalar, U08, 505, "%", 0.392, 0.0
+ tc_slipxtime = scalar, U16, 506, "", 1,0
+ loop = scalar, U08, 508, "", 1, 0
+ can_error_cnt = scalar, U08, 509, "", 1,0
+ can_error = scalar, U16, 510, "", 1,0
+; can_error_rxovr = bits, U08, 510, [0:0]
+; can_error_rxwrn = bits, U08, 510, [0:0]
+; can_error_rxerr = bits, U08, 510, [0:0]
+; can_error_txwrn = bits, U08, 510, [0:0]
+; can_error_txerr = bits, U08, 510, [0:0]
+; can_error_pass = bits, U08, 510, [0:0]
+; can_error_oor = bits, U08, 510, [0:0]
+; can_error_pass2 = bits, U08, 510, [0:0]
+
+;very nearly out of space. 512+ requires firmware changes
+;---------------
+
+ accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%"
+ accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%"
+ accEnrichMS = { accelEnrich }, "ms"
+ decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%"
+ decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime
+
+ time = { timeNow }, "s"
+ rpm100 = { rpm / 100.0 }
+
+ cycleTime1 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts1 = { nCylinders/divider}
+ altDiv1 = { alternate ? 2 : 1 }
+ dcfactor1 = { (sequential == 0) ? nSquirts1/altDiv1 : ( (sequential == 1) ? 2 : 1) }
+ dutyCycle1 = { cycleTime1 ? (100.0*dcfactor1*pulseWidth1/cycleTime1) : 0}, "%"
+
+ cycleTime2 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms"
+ nSquirts2 = { nCylinders/divider }
+ altDiv2 = { alternate ? 2 : 1 } ; ought to look at staging parameters too
+ dcfactor2a = { (sequential == 0) ? nSquirts2/altDiv2 : ( (sequential == 1) ? 2 : 1) } ; ought to look at staging parameters too
+ dcfactor2b = { (staged_first_param && staged_extended_opts_use_v3) ? 1 : dcfactor2a }
+ dutyCycle2 = { cycleTime2 ? (100.0*dcfactor2b*pulseWidth2/cycleTime2) : 0}, "%"
+
+#if NARROW_BAND_EGO
+ egoVoltage = { egoV }, "V" ; For LED bars...
+ afr1err = { egov1 - afrtgt1 }
+ afr2err = { egov2 - afrtgt2 }
+#elif LAMBDA
+ lambda1 = { afr1 / stoich }, "Lambda"
+ lambda2 = { afr2 / stoich }, "Lambda2"
+ lambda3 = { afr3 / stoich }, "Lambda3"
+ lambda4 = { afr4 / stoich }, "Lambda4"
+ lambda5 = { afr5 / stoich }, "Lambda5"
+ lambda6 = { afr6 / stoich }, "Lambda6"
+ lambda7 = { afr7 / stoich }, "Lambda7"
+ lambda8 = { afr8 / stoich }, "Lambda8"
+ egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
+ afrtgt1 = { afrtgt1raw / stoich * (egoType == 2) } ; return zero if NB because of mixed units with target in volts
+ afrtgt2 = { afrtgt2raw / stoich * (egoType == 2) }
+ afr1err = { (afr1 - afrtgt1raw) / stoich * (egoType == 2)}
+ afr2err = { (afr2 - afrtgt2raw) / stoich * (egoType == 2)}
+#else
+ egoVoltage = { afr1 }, "AFR" ; For LED bars...
+ afr1err = { afr1 - afrtgt1 }
+ afr2err = { afr2 - afrtgt2 }
+#endif
+
+ pwma_load = { getChannelValueByOffset( pwm_opt_load_a_offset ) }
+ pwmb_load = { getChannelValueByOffset( pwm_opt_load_b_offset ) }
+ pwmc_load = { getChannelValueByOffset( pwm_opt_load_c_offset ) }
+ pwmd_load = { getChannelValueByOffset( pwm_opt_load_d_offset ) }
+ pwme_load = { getChannelValueByOffset( pwm_opt_load_e_offset ) }
+ pwmf_load = { getChannelValueByOffset( pwm_opt_load_f_offset ) }
+ maxafrload = { (maxafr_opt1_load & 1) ? tps : map }
+
+ vvt_load = { (vvt_opt7_yaxis == 0) ? fuelload : ((vvt_opt7_yaxis == 1) ? map : ( (vvt_opt7_yaxis == 2) ? (map*100/barometer) : ((vvt_opt7_yaxis == 3) ? tps : ((vvt_opt7_yaxis == 4) ? mafload : fuelload ) ) ) ) }
+
+ reqfuel = { reqFuel }
+ Stoich = { stoich }
+
+ ; Vacuum and Boost Gauges
+ boostbar = { (map - barometer) / 101.33}
+ boostpsig = { (map - barometer) * 0.1450}
+ vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
+ boostvac = { map < barometer ? -vacuum : boostpsig }
+
+; calculate instantaneous economy from fuel flow (not calculated in firmware at this time)
+ economy_l_km = { vss1_ms_1 ? (fuelflow / (vss1_ms_1 * 60)) : 0 }
+; economy_mpg_us = { (1 / economy_l_km) * 3.800 / 1.609344 }
+ economy_mpg_us = { vss1_ms_1 ? (2.361 / economy_l_km) : 0 }
+ economy_mpg_uk = { vss1_ms_1 ? (2.825 / economy_l_km) : 0 }
+ economy_l_100km = { economy_l_km * 100 }
+
+ pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }
+ rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm"
+
+#if CELSIUS
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 230 : 120 }
+ cltlowdang = { clt_exp ? 65 : 10 }
+ cltlowwarn = { clt_exp ? 93 : 65 }
+ clthighwarn = { clt_exp ? 162 : 93 }
+ clthighdang = { clt_exp ? 176 : 104 }
+ mathigh = { 110 }
+#else ; fahrenheit
+ cltlowlim = { clt_exp ? -40 : -40 }
+ clthighlim = { clt_exp ? 450 : 250 }
+ cltlowdang = { clt_exp ? 150 : 50 }
+ cltlowwarn = { clt_exp ? 200 : 150 }
+ clthighwarn = { clt_exp ? 325 : 200 }
+ clthighdang = { clt_exp ? 350 : 220 }
+ mathigh = { 215 }
+#endif
+
+;synthetic air flow
+ calcflow = { fuelload * rpm * veCurr1/100 }
+ maf_freq = { MAFOption_t ? (maf_freq0 + ((maf_freq1 - maf_freq0) * maf_volts / 5)) : 0 }
+
+;old names
+ tpsDOT = { TPSdot }
+ mapDOT = { MAPdot }
+
+;fuel pressures
+ fuel_press1_psi = {fuel_press1 * 0.147 }, "psi"
+ fuel_press2_psi = {fuel_press2 * 0.147 }, "psi"
+ fuel_press1_bar = {fuel_press1 / 101.35 }, "bar"
+ fuel_press2_bar = {fuel_press2 / 101.35 }, "bar"
+
+ msToPrefUnitsScale = { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, ""
+
+ gps_latsec = { 60 * gps_latmmin / 10000 }
+ gps_lonsec = { 60 * gps_lonmmin / 10000 }
+ gps_alt = { gps_altk * 1000 + gps_altm }
+ gps_latitude = { gps_latdeg + (gps_latmin / 60) + (gps_latsec / 3600) }
+ gps_long = { gps_londeg + (gps_lonmin / 60) + (gps_lonsec / 3600) }
+ gps_lonEW = { (gps_outstatus & 1) ? 1 : 0 }
+ gps_longitude = { gps_lonEW ? 0-gps_long : gps_long } ; the 0 is redundant, but causes a TS error otherwise
+
+ generic_pid_load_a = { getChannelValueByOffset( generic_pid_load_offset_a ) }
+ generic_pid_load_b = { getChannelValueByOffset( generic_pid_load_offset_b ) }
+
+;-------------------------------------------------------------------------------
+;-- The entries are saved in the datalog file in the order in which they --
+;-- appear in the list below. --
+;-- --
+;-- Channel - Case sensitive name of output channel to be logged. --
+;-- Label - String written to header line of log. --
+;-- Type - Data type of output, converted before writing. --
+;-- Format - C-style output format of data. --
+
+[Datalog]
+ ; Channel Label Type Format
+ ; -------------- ---------- ----- ------
+ entry = time, "Time", float, "%.3f"
+ entry = seconds, "SecL", int, "%d"
+ entry = rpm, "RPM", int, "%d"
+ entry = map, "MAP", float, "%.1f"
+ entry = boostpsig, "Boost psi", float, "%.1f"
+ entry = throttle, "TPS", float, "%.1f"
+ entry = tpsADC, "TPSADC", int, "%d" ; for debug
+ entry = maf, "MAF", float, "%.2f", { MAFOption || MAFOption_t }
+ entry = mafload, "MAFload", float, "%.1f", { MAFOption || MAFOption_t }
+ entry = maf_volts, "MAF volts", float, "%.3f", { MAFOption }
+ entry = maf_freq, "MAF Freq", int, "%d", { MAFOption_t }
+#if NARROW_BAND_EGO
+ entry = egov1 , "O2", float, "%.3f", {egonum > 0}
+ entry = egov2 , "O2 #2", float, "%.3f", {egonum > 1}
+ entry = egov3 , "O2 #3", float, "%.3f", {egonum > 2}
+ entry = egov4 , "O2 #4", float, "%.3f", {egonum > 3}
+ entry = egov5 , "O2 #5", float, "%.3f", {egonum > 4}
+ entry = egov6 , "O2 #6", float, "%.3f", {egonum > 5}
+ entry = egov7 , "O2 #7", float, "%.3f", {egonum > 6}
+ entry = egov8 , "O2 #8", float, "%.3f", {egonum > 7}
+#elif LAMBDA
+ entry = lambda1, "Lambda", float, "%.3f", {egonum > 0}
+ entry = lambda2, "Lambda2", float, "%.3f", {egonum > 1}
+ entry = lambda3, "Lambda3", float, "%.3f", {egonum > 2}
+ entry = lambda4, "Lambda4", float, "%.3f", {egonum > 3}
+ entry = lambda5, "Lambda5", float, "%.3f", {egonum > 4}
+ entry = lambda6, "Lambda6", float, "%.3f", {egonum > 5}
+ entry = lambda7, "Lambda7", float, "%.3f", {egonum > 6}
+ entry = lambda8, "Lambda8", float, "%.3f", {egonum > 7}
+#else
+ entry = afr1, "AFR", float, "%.2f", {egonum > 0}
+ entry = afr2, "AFR2", float, "%.2f", {egonum > 1}
+ entry = afr3, "AFR3", float, "%.2f", {egonum > 2}
+ entry = afr4, "AFR4", float, "%.2f", {egonum > 3}
+ entry = afr5, "AFR5", float, "%.2f", {egonum > 4}
+ entry = afr6, "AFR6", float, "%.2f", {egonum > 5}
+ entry = afr7, "AFR7", float, "%.2f", {egonum > 6}
+ entry = afr8, "AFR8", float, "%.2f", {egonum > 7}
+#endif
+ entry = mat, "MAT", float, "%.1f"
+ entry = coolant, "CLT", float, "%.1f"
+ entry = engine, "Engine", int, "%d"
+ entry = batteryVoltage, "Batt V", float, "%.1f"
+
+ entry = egocor1, "EGO cor1", int, "%.1f"
+ entry = egocor2, "EGO cor2", int, "%.1f", {egonum > 1}
+ entry = egocor3, "EGO cor3", int, "%.1f", {egonum > 2}
+ entry = egocor4, "EGO cor4", int, "%.1f", {egonum > 3}
+ entry = egocor5, "EGO cor5", int, "%.1f", {egonum > 4}
+ entry = egocor6, "EGO cor6", int, "%.1f", {egonum > 5}
+ entry = egocor7, "EGO cor7", int, "%.1f", {egonum > 6}
+ entry = egocor8, "EGO cor8", int, "%.1f", {egonum > 7}
+
+ entry = airCorrection, "Fuel: Air cor", int, "%.1f"
+ entry = warmupEnrich, "Fuel: Warmup cor", int, "%d"
+ entry = baroCorrection, "Fuel: Baro cor", int, "%.1f"
+ entry = gammaEnrich, "Fuel: Total cor", int, "%d"
+ entry = accDecEnrich, "Fuel: Accel enrich", int, "%d"
+ entry = accEnrichMS, "Fuel: Accel PW", float, "%.3f"
+
+ entry = veCurr1, "VE1", int, "%.1f"
+ entry = pulseWidth1, "PW", float, "%.3f"
+ entry = dutyCycle1, "Duty Cycle1", float, "%.1f"
+
+ entry = veCurr2, "VE2", int, "%.1f"
+ entry = pulseWidth2, "PW2", float, "%.3f"
+ entry = dutyCycle2, "Duty Cycle2", float, "%.1f"
+
+ entry = pwseq1, "Seq PW1", float, "%.3f", { sequential }
+ entry = pwseq2, "Seq PW2", float, "%.3f", { sequential }
+ entry = pwseq3, "Seq PW3", float, "%.3f", { sequential }
+ entry = pwseq4, "Seq PW4", float, "%.3f", { sequential }
+ entry = pwseq5, "Seq PW5", float, "%.3f", { sequential }
+ entry = pwseq6, "Seq PW6", float, "%.3f", { sequential }
+ entry = pwseq7, "Seq PW7", float, "%.3f", { sequential }
+ entry = pwseq8, "Seq PW8", float, "%.3f", { sequential }
+ entry = pwseq9, "Seq PW9", float, "%.3f", { sequential }
+ entry = pwseq10, "Seq PW10", float, "%.3f", { sequential }
+ entry = pwseq11, "Seq PW11", float, "%.3f", { sequential }
+ entry = pwseq12, "Seq PW12", float, "%.3f", { sequential }
+
+ entry = advance, "SPK: Spark Advance", float, "%.1f"
+ entry = knockRetard, "SPK: Knock retard", float, "%.1f"
+ entry = knock, "Knock in", float, "%.1f"
+ entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f"
+ entry = tc_retard, "SPK: Traction retard", float, "%.1f"
+ entry = cel_retard, "SPK: CEL retard", float, "%.1f"
+ entry = fc_retard, "SPK: Fuel cut retard", float, "%.1f"
+ entry = ext_advance, "SPK: External advance", float, "%.1f"
+ entry = base_advance, "SPK: Base Spark Advance",float, "%.1f"
+ entry = idle_cor_advance,"SPK: Idle Correction Advance", float, "%.1f"
+ entry = mat_retard, "SPK: MAT Retard", float, "%.1f"
+ entry = flex_advance, "SPK: Flex Advance", float, "%.1f"
+ entry = adv1, "SPK: Spark Table 1", float, "%.1f"
+ entry = adv2, "SPK: Spark Table 2", float, "%.1f"
+ entry = adv3, "SPK: Spark Table 3", float, "%.1f"
+ entry = adv4, "SPK: Spark Table 4", float, "%.1f"
+ entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
+ entry = als_timing, "SPK: ALS Timing", float, "%.1f"
+ entry = launch_timing, "SPK: Launch Timing", float, "%.1f"
+ entry = step3_timing, "SPK: 3-step Timing", float, "%.1f"
+ entry = launchvss_retard,"SPK: Launch VSS Retard",float, "%.1f"
+ entry = n2o_retard, "SPK: Nitrous Retard", float, "%.1f", { N2Oopt_2 }
+
+ entry = dwell, "Dwell", float, "%.2f"
+ entry = barometer, "Barometer", float, "%.1f"
+ entry = iacstep, "Stepper Idle position", int, "%d", {IdleCtl == 3}
+ entry = idleDC, "PWM Idle duty", float, "%.1f", {IdleCtl == 2}
+ entry = cl_idle_targ_rpm, "Closed-loop idle target RPM", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = rpm_target_error_follower, "Closed-loop idle RPM error", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist }
+ entry = boostduty, "Boost duty", int, "%d", { boost_ctl_settings_on }
+ entry = boost_targ_1, "Boost target 1", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
+ entry = boostduty2, "Boost duty 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_on2 }
+ entry = boost_targ_2, "Boost target 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_on2 }
+
+#if NARROW_BAND_EGO
+ entry = afrtgt1, "EgoV 1 Target", float, "%.1f"
+ entry = afrtgt2, "EgoV 2 Target", float, "%.1f"
+ entry = afr1err, "EgoV 1 Error", float, "%.1f"
+ entry = afr2err, "EgoV 2 Error", float, "%.1f"
+#elif LAMBDA
+ entry = afrtgt1, "Lambda 1 Target", float, "%.1f"
+ entry = afrtgt2, "Lambda 2 Target", float, "%.1f"
+ entry = afr1err, "Lambda 1 Error", float, "%.1f"
+ entry = afr2err, "Lambda 2 Error", float, "%.1f"
+#else
+ entry = afrtgt1, "AFR 1 Target", float, "%.1f"
+ entry = afrtgt2, "AFR 2 Target", float, "%.1f"
+ entry = afr1err, "AFR 1 Error", float, "%.1f"
+ entry = afr2err, "AFR 2 Error", float, "%.1f"
+#endif
+ entry = TPSdot, "TPSdot", float, "%.1f"
+ entry = MAPdot, "MAPdot", float, "%.1f"
+ entry = RPMdot, "RPMdot", int, "%d"
+
+ entry = wallfuel1, "Wall fuel1", int, "%d", {EAEOption}
+ entry = wallfuel2, "Wall fuel2", int, "%d", {EAEOption}
+
+ entry = EAEFuelCorr1, "EAE1", int, "%d", {EAEOption}
+ entry = EAEFuelCorr2, "EAE2", int, "%d", {EAEOption}
+ entry = fuelload, "Load", float, "%.1f"
+ entry = fuelload2, "Secondary load", float, "%.1f"
+ entry = ignload, "Ign load", float, "%.1f"
+ entry = ignload2, "Secondary ign load", float, "%.1f"
+ entry = eaeload1, "EAE load", float, "%.1f", {EAEOption}
+ entry = afrload1, "AFR load", float, "%.1f"
+
+ entry = inj_timing_pri, "Injector timing pri", float, "%.1f"
+ entry = inj_timing_sec, "Injector timing sec", float, "%.1f"
+
+ entry = egt1, "EGT1", int, "%d", {egt_num > 0}
+ entry = egt2, "EGT2", int, "%d", {egt_num > 1}
+ entry = egt3, "EGT3", int, "%d", {egt_num > 2}
+ entry = egt4, "EGT4", int, "%d", {egt_num > 3}
+ entry = egt5, "EGT5", int, "%d", {egt_num > 4}
+ entry = egt6, "EGT6", int, "%d", {egt_num > 5}
+ entry = egt7, "EGT7", int, "%d", {egt_num > 6}
+ entry = egt8, "EGT8", int, "%d", {egt_num > 7}
+ entry = egt9, "EGT9", int, "%d", {egt_num > 8}
+ entry = egt10, "EGT10", int, "%d", {egt_num > 9}
+ entry = egt11, "EGT11", int, "%d", {egt_num > 10}
+ entry = egt12, "EGT12", int, "%d", {egt_num > 11}
+ entry = egt13, "EGT13", int, "%d", {egt_num > 12}
+ entry = egt14, "EGT14", int, "%d", {egt_num > 13}
+ entry = egt15, "EGT15", int, "%d", {egt_num > 14}
+ entry = egt16, "EGT16", int, "%d", {egt_num > 15}
+
+; for debug, enable these always
+ entry = sensor01, { stringValue(sensor01Alias) }, float, "%.1f";, { sensor01_source }
+ entry = sensor02, { stringValue(sensor02Alias) }, float, "%.1f";, { sensor02_source }
+ entry = sensor03, { stringValue(sensor03Alias) }, float, "%.1f";, { sensor03_source }
+ entry = sensor04, { stringValue(sensor04Alias) }, float, "%.1f";, { sensor04_source }
+ entry = sensor05, { stringValue(sensor05Alias) }, float, "%.1f";, { sensor05_source }
+ entry = sensor06, { stringValue(sensor06Alias) }, float, "%.1f";, { sensor06_source }
+ entry = sensor07, { stringValue(sensor07Alias) }, float, "%.1f";, { sensor07_source }
+ entry = sensor08, { stringValue(sensor08Alias) }, float, "%.1f";, { sensor08_source }
+ entry = sensor09, { stringValue(sensor09Alias) }, float, "%.1f";, { sensor09_source }
+ entry = sensor10, { stringValue(sensor10Alias) }, float, "%.1f";, { sensor10_source }
+ entry = sensor11, { stringValue(sensor11Alias) }, float, "%.1f";, { sensor11_source }
+ entry = sensor12, { stringValue(sensor12Alias) }, float, "%.1f";, { sensor12_source }
+ entry = sensor13, { stringValue(sensor13Alias) }, float, "%.1f";, { sensor13_source }
+ entry = sensor14, { stringValue(sensor14Alias) }, float, "%.1f";, { sensor14_source }
+ entry = sensor15, { stringValue(sensor15Alias) }, float, "%.1f";, { sensor15_source }
+ entry = sensor16, "ECU Temperature", float, "%.1f"
+
+ entry = canpwmin0, "CANpwmin0", int, "%d", { enable_pollPWM }
+ entry = canpwmin1, "CANpwmin1", int, "%d", { enable_pollPWM }
+ entry = canpwmin2, "CANpwmin2", int, "%d", { enable_pollPWM }
+ entry = canpwmin3, "CANpwmin3", int, "%d", { enable_pollPWM }
+ entry = canin1_8, "canin1_8", int, "%d"
+ entry = canout1_8, "canout1_8", int, "%d"
+ entry = canout9_16, "canout9_16", int, "%d"
+
+ entry = timing_err, "Timing err", float, "%.1f"
+ entry = synccnt, "Lost sync count", int, "%d"
+ entry = syncreason, "Lost sync reason", int, "%d"
+
+ entry = fuelflow, "Fuel flow cc/min", int, "%d"
+
+ entry = vss1, "VSS1", int, "%.1f", {vss_opt0_1}
+ entry = vss2, "VSS2", int, "%.1f", {vss_opt0_2}
+ entry = vss3, "VSS3", int, "%.1f", {vss_opt0_3}
+ entry = vss4, "VSS4", int, "%.1f", {vss_opt0_4}
+ entry = vss1_ms_1, "VSS1 ms-1", int, "%.1f", {vss_opt0_1}
+ entry = vss2_ms_1, "VSS2 ms-1", int, "%.1f", {vss_opt0_2}
+ entry = vss3_ms_1, "VSS3 ms-1", int, "%.1f", {vss_opt0_3}
+ entry = vss4_ms_1, "VSS4 ms-1", int, "%.1f", {vss_opt0_4}
+
+ entry = economy_mpg_us, "MPG(USA)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_mpg_uk, "MPG(UK)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)}
+ entry = economy_l_100km, "l/100km", int, "%d", {vss_opt0_1 && (prefSpeedUnits == 1)}
+
+ entry = ss1, "Shaft rpm 1", int, "%d", { ss_opt1 }
+ entry = ss2, "Shaft rpm 2", int, "%d", { ss_opt2 }
+ entry = n2o_addfuel, "Nitrous added fuel", float, "%.3f", { N2Oopt_2 }
+ entry = nitrous1_duty, "Nitrous 1 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous2_duty, "Nitrous 2 duty", int, "%d", { N2Oopt_2 }
+ entry = nitrous_timer, "Nitrous Timer", float, "%.3f", { N2Oopt_2 }
+ entry = water_duty, "Water inj duty", int, "%d", { water_freq_on }
+ entry = als_addfuel, "ALS added fuel", float, "%.3f", { als_in_pin }
+ entry = als_timing, "ALS timing", float, "%.1f", { als_in_pin }
+ entry = sd_filenum, "SDcard file number", int, "%d", { log_style_on2 }
+ entry = sd_status, "SDcard status", int, "%d", { log_style_on2 }
+ entry = sd_phase, "SDcard phase", int, "%d", { log_style_on2 }
+ entry = sd_error, "SDcard error", int, "%d", { log_style_on2 }
+ entry = gear, "Gear", int, "%d", { gear_method }
+ entry = vss1dot, "VSS1dot", float, "%.1f", {vss_opt0_1}
+ entry = vss2dot, "VSS2dot", float, "%.1f", {vss_opt0_2}
+ entry = accelx, "Accel X", float, "%.2f", { accXport }
+ entry = accely, "Accel Y", float, "%.2f", { accYport }
+ entry = accelz, "Accel Z", float, "%.2f", { accZport }
+ entry = duty_pwm_a, "PWM A duty", int, "%d", { pwm_opt_on_a }
+ entry = duty_pwm_b, "PWM B duty", int, "%d", { pwm_opt_on_b }
+ entry = duty_pwm_c, "PWM C duty", int, "%d", { pwm_opt_on_c }
+ entry = duty_pwm_d, "PWM D duty", int, "%d", { pwm_opt_on_d }
+ entry = duty_pwm_e, "PWM E duty", int, "%d", { pwm_opt_on_e }
+ entry = duty_pwm_f, "PWM F duty", int, "%d", { pwm_opt_on_f }
+ entry = generic_pid_duty_a, "Generic Closed-Loop A duty", float, "%.1f", { generic_pid_flags_a_on }
+ entry = generic_pid_duty_b, "Generic Closed-Loop B duty", float, "%.1f", { generic_pid_flags_b_on }
+ entry = status1, "Status1", int, "%d"
+ entry = status2, "Status2", int, "%d"
+ entry = status3, "Status3", int, "%d"
+ entry = status4, "Status4", int, "%d"
+ entry = status5, "Status5", int, "%d"
+ entry = status5s, "Status5s", int, "%d"
+ entry = status6, "Status6", int, "%d"
+ entry = status7, "Status7", int, "%d"
+ entry = status8, "Status8", int, "%d"
+ entry = vvt_ang1, "VVT angle 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_ang2, "VVT angle 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_ang3, "VVT angle 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_ang4, "VVT angle 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target1, "VVT target 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_target2, "VVT target 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_target3, "VVT target 3", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_target4, "VVT target 4", int, "%.1f", { vvt_opt1_on > 2}
+ entry = vvt_duty1, "VVT duty 1", int, "%.1f", { vvt_opt1_on }
+ entry = vvt_duty2, "VVT duty 2", int, "%.1f", { vvt_opt1_on > 1}
+ entry = vvt_duty3, "VVT duty 3", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = vvt_duty4, "VVT duty 4", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) }
+ entry = tps_accel, "TPS accel", int, "%.1f", { AE_options & 0x1 }
+ entry = map_accel, "MAP accel", int, "%.1f", { AE_options & 0x1 }
+ entry = total_accel, "Total accel", int, "%.1f", { AE_options & 0x1 }
+ entry = launch_timer, "Launch retard timer", float, "%.3f", { launch_opt_on && launch_opt_retard }
+ entry = launch_retard, "Launch timed retard", float, "%.1f", { launch_opt_on && launch_opt_retard }
+
+ entry = knock_cyl01, "Knock cyl# 1", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 0)}
+ entry = knock_cyl02, "Knock cyl# 2", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 1)}
+ entry = knock_cyl03, "Knock cyl# 3", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 2)}
+ entry = knock_cyl04, "Knock cyl# 4", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 3)}
+ entry = knock_cyl05, "Knock cyl# 5", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 4)}
+ entry = knock_cyl06, "Knock cyl# 6", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 5)}
+ entry = knock_cyl07, "Knock cyl# 7", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 6)}
+ entry = knock_cyl08, "Knock cyl# 8", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 7)}
+ entry = knock_cyl09, "Knock cyl#09", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 8)}
+ entry = knock_cyl10, "Knock cyl#10", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 9)}
+ entry = knock_cyl11, "Knock cyl#11", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 10)}
+ entry = knock_cyl12, "Knock cyl#12", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 11)}
+
+ entry = porta, "porta", int, "%d"
+ entry = portb, "portb", int, "%d"
+ entry = porteh, "porteh", int, "%d"
+ entry = portk, "portk", int, "%d"
+ entry = portmj, "portmj", int, "%d"
+ entry = portp, "portp", int, "%d"
+ entry = portt, "portt", int, "%d"
+
+ entry = cel_status, "CEL status", int, "%d"
+ entry = cel_status2, "CEL status2", int, "%d"
+ entry = cel_errorcode, "CEL error code", int, "%d"
+
+ entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
+ entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
+ entry = fuel_temp1, "Fuel Temp1", float, "%.1f", { (flexFuel && (fueltemp1 == 1)) || (fueltemp1 > 15)}
+ entry = fuel_temp2, "Fuel Temp2", float, "%.1f", { dualfuel_temp_sens }
+
+ entry = fuel_press1, "Fuel Pressure1_kPa", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_psi, "Fuel Pressure1_psi", float, "%.1f", { fp_press_in }
+ entry = fuel_press1_bar, "Fuel Pressure1_bar", float, "%.1f", { fp_press_in }
+
+ entry = fuel_press2, "Fuel Pressure2_kPa", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_psi, "Fuel Pressure2_psi", float, "%.1f", { dualfuel_press_sens }
+ entry = fuel_press2_bar, "Fuel Pressure2_bar", float, "%.1f", { dualfuel_press_sens }
+
+ entry = fp_duty, "Fuel pump control duty", int, "%d", { fp_opt_mode }
+
+ entry = alt_targv, "Alternator target voltage", float, "%.1f", {alternator_opt_mode > 1}
+ entry = alt_freq, "Alternator control frequency", int, "%d", {alternator_opt_mode == 2}
+ entry = alt_duty, "Alternator control duty", int, "%d", {alternator_opt_mode > 2}
+ entry = load_duty, "Alternator load", int, "%d", {alternator_opt_mode && alternator_freq_monin}
+ entry = batt_curr, "Battery current", float, "%.1f", {alternator_opt_mode && alternator_freq_currin}
+ entry = fueltemp_cor, "Fuel temperature cor", float, "%.1f"
+ entry = fuelpress_cor, "Fuel pressure cor", float, "%.1f"
+ entry = ltt_cor, "Long term fuel trim cor", float, "%.1f", {ltt_opt_on}
+ entry = gps_latdeg, "GPS Lat. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latmin, "GPS Lat. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_latsec, "GPS Lat. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_londeg, "GPS Lon. deg", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonmin, "GPS Lon. min", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_lonsec, "GPS Lon. sec", float, "%.3f", { can_poll2_gps == 1 }
+ entry = gps_lonEW, "GPS Lon. E/W", int, "%d", { can_poll2_gps == 1 }
+ entry = gps_alt, "GPS Altitude", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed, "GPS Speed", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_speed_ms_1, "GPS Speed ms-1",float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_course, "GPS Course (deg)", float, "%.1f", { can_poll2_gps == 1 }
+ entry = gps_latitude, "GPS Latitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = gps_longitude, "GPS Longitude", float, "%.5f", { can_poll2_gps == 1 }
+ entry = tc_slipxtime, "TC slip * time", int, "%d"
+ entry = loop, "Loop", int, "%d"
+ entry = can_error, "CAN error bits", int, "%d"
+ entry = can_error_cnt, "CAN error count", int, "%d"
+
+#if INTERNAL_LOG_FIELDS
+ ;internalLogField = fieldName, class, type, offset, units, scale, translate, digits
+ internalLogField = "Tooth number", scalar, U08, 1024, "#", 1.0, 0.0, 0
+ internalLogField = "Synch", scalar, U08, 1025, "", 1, 0, 0
+ internalLogField = "Cumulative cycles", scalar, U16, 1026, "#", 1.0, 0.0, 0
+ internalLogField = "Cumulative teeth", scalar, U16, 1027, "#", 1.0, 0.0, 0
+ internalLogField = "coilsel", scalar, U16, 1028, "", 1, 0, 0
+ internalLogField = "dwellsel", scalar, U16, 1029, "", 1, 0, 0
+ internalLogField = "PTM", scalar, U08, 1030, "", 1, 0, 0
+ internalLogField = "PTJ", scalar, U08, 1031, "", 1, 0, 0
+ internalLogField = "PTT", scalar, U08, 1032, "", 1, 0, 0
+ internalLogField = "PORTA", scalar, U08, 1033, "", 1, 0, 0
+ internalLogField = "PORTB", scalar, U08, 1034, "", 1, 0, 0
+ internalLogField = "next_dwell.tooth", scalar, U08, 1035, "", 1, 0, 0
+ internalLogField = "next_spark.tooth", scalar, U08, 1036, "", 1, 0, 0
+ internalLogField = "next_inj0.tooth", scalar, U08, 1037, "", 1, 0, 0
+ internalLogField = "next_inj1.tooth", scalar, U08, 1038, "", 1, 0, 0
+ internalLogField = "next_inj2.tooth", scalar, U08, 1039, "", 1, 0, 0
+ internalLogField = "next_inj3.tooth", scalar, U08, 1040, "", 1, 0, 0
+ internalLogField = "next_inj4.tooth", scalar, U08, 1041, "", 1, 0, 0
+ internalLogField = "next_inj5.tooth", scalar, U08, 1042, "", 1, 0, 0
+ internalLogField = "next_inj6.tooth", scalar, U08, 1043, "", 1, 0, 0
+ internalLogField = "next_inj7.tooth", scalar, U08, 1044, "", 1, 0, 0
+; internalLogField = "fuel_ovflo", scalar, U08, 1046, "", 1, 0, 0
+ internalLogField = "wheeldec_ovflo", scalar, U08, 1047, "", 1, 0, 0
+ internalLogField = "next_dwell.time32", scalar, U32, 1048, "", 1, 0, 0
+ internalLogField = "next_spark.time32", scalar, U32, 1049, "", 1, 0, 0
+ internalLogField = "TIE", scalar, U08, 1050, "", 1, 0, 0
+ internalLogField = "TFLG1", scalar, U08, 1051, "", 1, 0, 0
+ internalLogField = "TIMTIE", scalar, U08, 1052, "", 1, 0, 0
+ internalLogField = "TIMTFLG1", scalar, U08, 1053, "", 1, 0, 0
+ internalLogField = "next_inj[0].time", scalar, U16, 1054, "", 1, 0, 0
+ internalLogField = "next_inj[1].time", scalar, U16, 1055, "", 1, 0, 0
+ internalLogField = "next_inj[2].time", scalar, U16, 1056, "", 1, 0, 0
+ internalLogField = "next_inj[3].time", scalar, U16, 1057, "", 1, 0, 0
+ internalLogField = "next_inj[4].time", scalar, U16, 1058, "", 1, 0, 0
+ internalLogField = "next_inj[5].time", scalar, U16, 1059, "", 1, 0, 0
+ internalLogField = "next_inj[6].time", scalar, U16, 1060, "", 1, 0, 0
+ internalLogField = "next_inj[7].time", scalar, U16, 1061, "", 1, 0, 0
+ internalLogField = "XGSEM", scalar, U08, 1062, "", 1, 0, 0
+ internalLogField = "pwcalc1", scalar, U16, 1063, "", 1, 0, 0
+ internalLogField = "pwcalc2", scalar, U16, 1064, "", 1, 0, 0
+ internalLogField = "next_map_start_event.tooth", scalar, U08, 1065, "", 1, 0, 0
+ internalLogField = "XGCHID", scalar, U08, 1066, "", 1, 0, 0
+ internalLogField = "XGSWT", scalar, U08, 1067, "", 1, 0, 0
+ internalLogField = "xgate_deadman", scalar, U08, 1068, "", 1, 0, 0
+ internalLogField = "XGMCTL", scalar, U08, 1069, "", 1, 0, 0
+ internalLogField = "xgpc", scalar, U16, 1070, "", 1, 0, 0
+ internalLogField = "xgswe_count", scalar, U08, 1071, "", 1, 0, 0
+ internalLogField = "next_fuel", scalar, U08, 1072, "", 1, 0, 0
+ internalLogField = "inj1_cnt", scalar, U16, 1073, "", 1, 0, 0
+ internalLogField = "inj2_cnt", scalar, U16, 1074, "", 1, 0, 0
+ internalLogField = "inj3_cnt", scalar, U16, 1075, "", 1, 0, 0
+ internalLogField = "inj4_cnt", scalar, U16, 1076, "", 1, 0, 0
+ internalLogField = "inj5_cnt", scalar, U16, 1077, "", 1, 0, 0
+ internalLogField = "inj6_cnt", scalar, U16, 1078, "", 1, 0, 0
+ internalLogField = "inj7_cnt", scalar, U16, 1079, "", 1, 0, 0
+ internalLogField = "inj8_cnt", scalar, U16, 1080, "", 1, 0, 0
+#endif
+;-------------------------------------------------------------------------------