;-------------------------------------------------------------------------------
; $Id: ms2extra.ini,v 1.182 2015/08/25 21:49: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 comms340v2" ; 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", "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 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
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"
;-------------------------------------------------------------------------------