hyper-tuner-cloud/public/tunes/202103.ini

5118 lines
392 KiB
INI
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;-------------------------------------------------------------------------------
#unset CAN_COMMANDS
#unset enablehardware_test
[MegaTune]
MTversion = 2.25
queryCommand = "Q"
signature = "speeduino 202103"
versionInfo = "S" ;This info is what is displayed to user
[TunerStudio]
iniSpecVersion = 3.64
;-------------------------------------------------------------------------------
[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 = boostUnits, "Boost table units"
;settingOption = DEFAULT, "kPa"
;settingOption = BOOSTPSI, "PSI"
settingGroup = enablehardware_test, "Enable Hardware Test Page"
settingGroup = resetcontrol_group, "Reset Control Features"
settingOption = resetcontrol_standard, "Basic Options Only"
settingOption = resetcontrol_adv, "Advanced Features (16u2 Firmware Update Required)"
[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], "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"
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
maphigh = scalar, U16, "kPa", 1, 0, 0, 30000, 0
mapwarn = scalar, U16, "kPa", 1, 0, 0, 30000, 0
mapdang = scalar, U16, "kPa", 1, 0, 0, 30000, 0
#if LAMBDA
wueAFR = array, S16, [10], "Lambda", { 0.1 / stoich }, 0.000, -0.300, 0.300, 3
#else
wueAFR = array, S16, [10], "AFR", 0.1, 0.0, -4.0, 4.0, 1
#endif
wueRecommended = array, U08, [10], "%", 1.0, 0.0, 100, 255.0, 0
idleUnits = bits, U08, [0:2], "None", "On/Off", "Duty Cycle", "Duty Cycle", "Steps", "Steps"
boardFuelOutputs = array, U08, [128], " ", 1.0, 0, 0, 255, 0, noMsqSave
boardIgnOutputs = array, U08, [128], " ", 1.0, 0, 0, 255, 0, noMsqSave
boardHasRTC = array, U08, [128], " ", 1.0, 0, 0, 255, 0, noMsqSave
#define loadSourceNames = "MAP", "TPS", "IMAP/EMAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define loadSourceUnits = "kPa", "% TPS", "%", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
algorithmNames = bits, U08, [0:2], $loadSourceNames
;algorithmUnits = bits, U08, [0:2], $loadSourceUnits
algorithmUnits = bits, U08, [0:2], "kPa", "% TPS", "%", "% TPS", "INVALID", "INVALID", "INVALID", "INVALID"
algorithmLimits= array, U16, [8], "", 1.0, 0, 0, 511, 0, noMsqSave
fuel2SwitchUnits = bits, U08, [0:2], "rpm", "kPa", "% TPS", "%", "% TPS", "INVALID", "INVALID", "INVALID"
#define all_IO_Pins = "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
#define IO_Pins_no_def = "INVALID", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
#define bitwise_def = "Disabled", "AND", "OR", "XOR"
#define comparator_def = "==", "!=", ">", ">=", "<", "<=", "INVALID", "INVALID"
#define comp_IO_Pins = "Disabled", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
#define fullStatus_def_1= "seconds", "status bits", "Engine status", "syncLossCounter", "MAP (Kpa)", "INVALID", "IAT / MAT", "coolant", "batCorrection", "battery voltage x10", "O2", "egoCorrection", "iatCorrection", "wueCorrection", "RPM", "INVALID", "AEamount/2", "GammaE", "INVALID", "VE1", "VE2", "AFR Target", "TPS DOT", "Advance", "TPS", "loopsPerSecond", "INVALID", "free RAM", "INVALID", "boostTarget/2", "Boost duty", "spark bits", "RPM DOT"
#define fullStatus_def_2= "INVALID", "ethanolPct", "flexCorrection", "flexIgnCorrection", "idle Load", "testOutputs", "O2_2", "baro", "Aux in 1", "INVALID", "Aux in 2", "INVALID", "Aux in 3", "INVALID", "Aux in 4", "INVALID", "Aux in 5", "INVALID", "Aux in 6", "INVALID", "Aux in 7", "INVALID", "Aux in 8", "INVALID", "Aux in 9", "INVALID", "Aux in 10", "INVALID", "Aux in 11", "INVALID", "Aux in 12", "INVALID", "Aux in 13", "INVALID", "Aux in 14"
#define fullStatus_def_3= "INVALID", "Aux in 15", "INVALID", "Aux in 16", "INVALID", "TPS ADC", "Error code", "Pulsewidth 1", "INVALID", "Pulsewidth 2", "INVALID", "Pulsewidth 3", "INVALID", "Pulsewidth 4", "INVALID", "status bits 3", "engineProtectStatus", "Fuel load", "INVALID", "Ignition load", "INVALID", "dwell", "INVALID", "idle C.L. target", "MAP DOT", "VVT1 Angle", "VVT1 Target", "VVT1 duty", "flexBoostCorrection", "INVALID", "baro Correction"
#define fullStatus_def_4= "Current VE", "ASE Value", "vss", "INVALID", "Gear", "Fuel Pressure", "Oil Pressure", "INVALID", "WMI duty", "WMI empty", "VVT2 angle", "VVT2 target", "VVT2 duty", "outputs status", "Fuel temp", "Fuel temp correction", "Advance 1", "Advance 2"
#define fullStatus_def = $fullStatus_def_1, $fullStatus_def_2, $fullStatus_def_3, $fullStatus_def_4
boostTableLabels = bits, U08, [0:1], "Duty Cycle %", "kPa"
prgm_out_selection = bits, U08, [0:2], "1", "2", "3", "4", "5", "6", "7", "8"
fuelLoadMax = scalar, U08, "", 1, 0, 0, 511, 0
ignLoadMax = scalar, U08, "", 1, 0, 0, 511, 0
fuel2LoadMax = scalar, U08, "", 1, 0, 0, 511, 0
ign2LoadMax = scalar, U08, "", 1, 0, 0, 511, 0
AUXin00Alias = string, ASCII, 20
AUXin01Alias = string, ASCII, 20
AUXin02Alias = string, ASCII, 20
AUXin03Alias = string, ASCII, 20
AUXin04Alias = string, ASCII, 20
AUXin05Alias = string, ASCII, 20
AUXin06Alias = string, ASCII, 20
AUXin07Alias = string, ASCII, 20
AUXin08Alias = string, ASCII, 20
AUXin09Alias = string, ASCII, 20
AUXin10Alias = string, ASCII, 20
AUXin11Alias = string, ASCII, 20
AUXin12Alias = string, ASCII, 20
AUXin13Alias = string, ASCII, 20
AUXin14Alias = string, ASCII, 20
AUXin15Alias = string, ASCII, 20
prgm_out00Alias = string, ASCII, 20
prgm_out01Alias = string, ASCII, 20
prgm_out02Alias = string, ASCII, 20
prgm_out03Alias = string, ASCII, 20
prgm_out04Alias = string, ASCII, 20
prgm_out05Alias = string, ASCII, 20
prgm_out06Alias = string, ASCII, 20
prgm_out07Alias = string, ASCII, 20
;Define aliases for all the triggers. Naming pattern matches that used in decoders.ino
#define trigger_missingTooth = 0
#define trigger_BasicDistributor = 1
#define trigger_DualWheel = 2
#define trigger_GM7X = 3
#define trigger_4G63 = 4
#define trigger_24X = 5
#define trigger_Jeep2000 = 6
#define trigger_Audi135 = 7
#define trigger_HondaD17 = 8
#define trigger_Miata9905 = 9
#define trigger_MazdaAU = 10
#define trigger_non360 = 11
#define trigger_Nissan360 = 12
#define trigger_Subaru67 = 13
#define trigger_Daihatsu = 14
#define trigger_Harley = 15
#define trigger_ThirtySixMinus222 = 16
#define trigger_ThirtySixMinus21 = 17
#define trigger_420a = 18
#define trigger_Webber = 19
#define trigger_FordST170 = 20
[Constants]
;----------------------------------------------------------------------------
; Constants Definition
; --------------------
;
; Scalar Values
; -------------
; The scaling and translation values are used as follows:
; msValue = userValue / scale - translate
; userValue = (msValue + translate) * scale
;
;
; Temperatures are fine, check out the Fielding IAC example (fastIdleT).
;
; 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).
;
; If you specify a label as "INVALID" (all upper case), then it will
; not be displayed in the combo box, so you can leave out values that
; make no sense.
;
;----------------------------------------------------------------------------
endianness = little
nPages = 14
pageSize = 128, 288, 288, 128, 288, 128, 240, 384, 192, 192, 288, 192, 128, 288
; New commands
pageIdentifier = "\$tsCanId\x01", "\$tsCanId\x02", "\$tsCanId\x03", "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x06", "\$tsCanId\x07", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0A", "\$tsCanId\x0B", "\$tsCanId\x0C", "\$tsCanId\x0D", "\$tsCanId\x0E"
burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i"
pageReadCommand = "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c", "p%2i%2o%2c"
pageValueWrite = "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v"
pageChunkWrite = "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v", "M%2i%2o%2c%v"
crc32CheckCommand = "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i", "d%2i"
blockingFactor = 256
tableBlockingFactor = 2048
delayAfterPortOpen=1000
;validateArrayBounds = true
blockReadTimeout = 2000
;tsWriteBlocks = on
interWriteDelay = 1 ;Ignored when tsWriteBlocks is on
pageActivationDelay = 10
restrictSquirtRelationship = false ;This requires TS 3.1 or above
;New for TS 3.0.08ish upwards, define lists of standard I/O options
#define PIN_OUT10inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define PIN_OUT16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define PIN_16inv = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define ANALOG_PIN = "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", $PIN_16inv, $PIN_16inv, $PIN_16inv
#define DIGITAL_PIN = "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define ANALOG_DIG_PIN_LIST = $DIGITAL_PIN, $ANALOG_PIN
#define tsCanId_list = "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"
#define CAN_ADDRESS_HEX_inv255 = $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT16inv, $PIN_OUT10inv, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
#define CAN_ADDRESS_HEX_00XX = "INVALID", "0x001", "0x002", "0x003", "0x004", "0x005", "0x006", "0x007", "0x008", "0x009", "0x00A", "0x00B", "0x00C", "0x00D", "0x00E", "0x00F", "0x010", "0x011", "0x012", "0x013", "0x014", "0x015", "0x016", "0x017", "0x018", "0x019", "0x01A", "0x01B", "0x01C", "0x01D", "0x01E", "0x01F", "0x020", "0x021", "0x022", "0x023", "0x024", "0x025", "0x026", "0x027", "0x028", "0x029", "0x02A", "0x02B", "0x02C", "0x02D", "0x02E", "0x02F", "0x030", "0x031", "0x032", "0x033", "0x034", "0x035", "0x036", "0x037", "0x038", "0x039", "0x03A", "0x03B", "0x03C", "0x03D", "0x03E", "0x03F", "0x040", "0x041", "0x042", "0x043", "0x044", "0x045", "0x046", "0x047", "0x048", "0x049", "0x04A", "0x04B", "0x04C", "0x04D", "0x04E", "0x04F", "0x050", "0x051", "0x052", "0x053", "0x054", "0x055", "0x056", "0x057", "0x058", "0x059", "0x05A", "0x05B", "0x05C", "0x05D", "0x05E", "0x05F" ,"0x060", "0x061", "0x062", "0x063", "0x064", "0x065", "0x066", "0x067", "0x068", "0x069", "0x06A", "0x06B", "0x06C", "0x06D", "0x06E", "0x06F", "0x070", "0x071", "0x072", "0x073", "0x074", "0x075", "0x076", "0x077", "0x078", "0x079", "0x07A", "0x07B", "0x07C", "0x07D", "0x07E", "0x07F", "0x080", "0x081", "0x082", "0x083", "0x084", "0x085", "0x086", "0x087", "0x088", "0x089", "0x08A", "0x08B", "0x08C", "0x08D", "0x08E", "0x08F" ,"0x090", "0x091", "0x092", "0x093", "0x094", "0x095", "0x096", "0x097", "0x098", "0x099", "0x09A", "0x09B", "0x09C", "0x09D", "0x09E", "0x09F", "0x0A0", "0x0A1", "0x0A2", "0x0A3", "0x0A4", "0x0A5", "0x0A6", "0x0A7", "0x0A8", "0x0A9", "0x0AA", "0x0AB", "0x0AC", "0x0AD", "0x0AE", "0x0AF", "0x0B0", "0x0B1", "0x0B2", "0x0B3", "0x0B4", "0x0B5", "0x0B6", "0x0B7", "0x0B8", "0x0B9", "0x0BA", "0x0BB", "0x0BC", "0x0BD", "0x0BE", "0x0BF" ,"0x0C0", "0x0C1", "0x0C2", "0x0C3", "0x0C4", "0x0C5", "0x0C6", "0x0C7", "0x0C8", "0x0C9", "0x0CA", "0x0CB", "0x0CC", "0x0CD", "0x0CE", "0x0CF", "0x0D0", "0x0D1", "0x0D2", "0x0D3", "0x0D4", "0x0D5", "0x0D6", "0x0D7", "0x0D8", "0x0D9", "0x0DA", "0x0DB", "0x0DC", "0x0DD", "0x0DE", "0x0DF", "0x0E0", "0x0E1", "0x0E2", "0x0E3", "0x0E4", "0x0E5", "0x0E6", "0x0E7", "0x0E8", "0x0E9", "0x0EA", "0x0EB", "0x0EC", "0x0ED", "0x0EE", "0x0EF" ,"0x0F0", "0x0F1", "0x0F2", "0x0F3", "0x0F4", "0x0F5", "0x0F6", "0x0F7", "0x0F8", "0x0F9", "0x0FA", "0x0FB", "0x0FC", "0x0FD", "0x0FE", "0x0FF"
#define CAN_ADDRESS_HEX_01XX = "0x100", "0x101", "0x102", "0x103", "0x104", "0x105", "0x106", "0x107", "0x108", "0x109", "0x10A", "0x10B", "0x10C", "0x10D", "0x10E", "0x10F", "0x110", "0x111", "0x112", "0x113", "0x114", "0x115", "0x116", "0x117", "0x118", "0x119", "0x11A", "0x11B", "0x11C", "0x11D", "0x11E", "0x11F", "0x120", "0x121", "0x122", "0x123", "0x124", "0x125", "0x126", "0x127", "0x128", "0x129", "0x12A", "0x12B", "0x12C", "0x12D", "0x12E", "0x12F", "0x130", "0x131", "0x132", "0x133", "0x134", "0x135", "0x136", "0x137", "0x138", "0x139", "0x13A", "0x13B", "0x13C", "0x13D", "0x13E", "0x13F", "0x140", "0x141", "0x142", "0x143", "0x144", "0x145", "0x146", "0x147", "0x148", "0x149", "0x14A", "0x14B", "0x14C", "0x14D", "0x14E", "0x14F", "0x150", "0x151", "0x152", "0x153", "0x154", "0x155", "0x156", "0x157", "0x158", "0x159", "0x15A", "0x15B", "0x15C", "0x15D", "0x15E", "0x15F" ,"0x160", "0x161", "0x162", "0x163", "0x164", "0x165", "0x166", "0x167", "0x168", "0x169", "0x16A", "0x16B", "0x16C", "0x16D", "0x16E", "0x16F", "0x170", "0x171", "0x172", "0x173", "0x174", "0x175", "0x176", "0x177", "0x178", "0x179", "0x17A", "0x17B", "0x17C", "0x17D", "0x17E", "0x17F", "0x180", "0x181", "0x182", "0x183", "0x184", "0x185", "0x186", "0x187", "0x188", "0x189", "0x18A", "0x18B", "0x18C", "0x18D", "0x18E", "0x18F" ,"0x190", "0x191", "0x192", "0x193", "0x194", "0x195", "0x196", "0x197", "0x198", "0x199", "0x19A", "0x19B", "0x19C", "0x19D", "0x19E", "0x19F", "0x1A0", "0x1A1", "0x1A2", "0x1A3", "0x1A4", "0x1A5", "0x1A6", "0x1A7", "0x1A8", "0x1A9", "0x1AA", "0x1AB", "0x1AC", "0x1AD", "0x1AE", "0x1AF", "0x1B0", "0x1B1", "0x1B2", "0x1B3", "0x1B4", "0x1B5", "0x1B6", "0x1B7", "0x1B8", "0x1B9", "0x1BA", "0x1BB", "0x1BC", "0x1BD", "0x1BE", "0x1BF" ,"0x1C0", "0x1C1", "0x1C2", "0x1C3", "0x1C4", "0x1C5", "0x1C6", "0x1C7", "0x1C8", "0x1C9", "0x1CA", "0x1CB", "0x1CC", "0x1CD", "0x1CE", "0x1CF", "0x1D0", "0x1D1", "0x1D2", "0x1D3", "0x1D4", "0x1D5", "0x1D6", "0x1D7", "0x1D8", "0x1D9", "0x1DA", "0x1DB", "0x1DC", "0x1DD", "0x1DE", "0x1DF", "0x1E0", "0x1E1", "0x1E2", "0x1E3", "0x1E4", "0x1E5", "0x1E6", "0x1E7", "0x1E8", "0x1E9", "0x1EA", "0x1EB", "0x1EC", "0x1ED", "0x1EE", "0x1EF" ,"0x1F0", "0x1F1", "0x1F2", "0x1F3", "0x1F4", "0x1F5", "0x1F6", "0x1F7", "0x1F8", "0x1F9", "0x1FA", "0x1FB", "0x1FC", "0x1FD", "0x1FE", "0x1FF"
#define CAN_ADDRESS_HEX_02XX = "0x200", "0x201", "0x202", "0x203", "0x204", "0x205", "0x206", "0x207", "0x208", "0x209", "0x20A", "0x20B", "0x20C", "0x20D", "0x20E", "0x20F", "0x210", "0x211", "0x212", "0x213", "0x214", "0x215", "0x216", "0x217", "0x218", "0x219", "0x21A", "0x21B", "0x21C", "0x21D", "0x21E", "0x21F", "0x220", "0x221", "0x222", "0x223", "0x224", "0x225", "0x226", "0x227", "0x228", "0x229", "0x22A", "0x22B", "0x22C", "0x22D", "0x22E", "0x22F", "0x230", "0x231", "0x232", "0x233", "0x234", "0x235", "0x236", "0x237", "0x238", "0x239", "0x23A", "0x23B", "0x23C", "0x23D", "0x23E", "0x23F", "0x240", "0x241", "0x242", "0x243", "0x244", "0x245", "0x246", "0x247", "0x248", "0x249", "0x24A", "0x24B", "0x24C", "0x24D", "0x24E", "0x24F", "0x250", "0x251", "0x252", "0x253", "0x254", "0x255", "0x256", "0x257", "0x258", "0x259", "0x25A", "0x25B", "0x25C", "0x25D", "0x25E", "0x25F" ,"0x260", "0x261", "0x262", "0x263", "0x264", "0x265", "0x266", "0x267", "0x268", "0x269", "0x26A", "0x26B", "0x26C", "0x26D", "0x26E", "0x26F", "0x270", "0x271", "0x272", "0x273", "0x274", "0x275", "0x276", "0x277", "0x278", "0x279", "0x27A", "0x27B", "0x27C", "0x27D", "0x27E", "0x27F", "0x280", "0x281", "0x282", "0x283", "0x284", "0x285", "0x286", "0x287", "0x288", "0x289", "0x28A", "0x28B", "0x28C", "0x28D", "0x28E", "0x28F" ,"0x290", "0x291", "0x292", "0x293", "0x294", "0x295", "0x296", "0x297", "0x298", "0x299", "0x29A", "0x29B", "0x29C", "0x29D", "0x29E", "0x29F", "0x2A0", "0x2A1", "0x2A2", "0x2A3", "0x2A4", "0x2A5", "0x2A6", "0x2A7", "0x2A8", "0x2A9", "0x2AA", "0x2AB", "0x2AC", "0x2AD", "0x2AE", "0x2AF", "0x2B0", "0x2B1", "0x2B2", "0x2B3", "0x2B4", "0x2B5", "0x2B6", "0x2B7", "0x2B8", "0x2B9", "0x2BA", "0x2BB", "0x2BC", "0x2BD", "0x2BE", "0x2BF" ,"0x2C0", "0x2C1", "0x2C2", "0x2C3", "0x2C4", "0x2C5", "0x2C6", "0x2C7", "0x2C8", "0x2C9", "0x2CA", "0x2CB", "0x2CC", "0x2CD", "0x2CE", "0x2CF", "0x2D0", "0x2D1", "0x2D2", "0x2D3", "0x2D4", "0x2D5", "0x2D6", "0x2D7", "0x2D8", "0x2D9", "0x2DA", "0x2DB", "0x2DC", "0x2DD", "0x2DE", "0x2DF", "0x2E0", "0x2E1", "0x2E2", "0x2E3", "0x2E4", "0x2E5", "0x2E6", "0x2E7", "0x2E8", "0x2E9", "0x2EA", "0x2EB", "0x2EC", "0x2ED", "0x2EE", "0x2EF" ,"0x2F0", "0x2F1", "0x2F2", "0x2F3", "0x2F4", "0x2F5", "0x2F6", "0x2F7", "0x2F8", "0x2F9", "0x2FA", "0x2FB", "0x2FC", "0x2FD", "0x2FE", "0x2FF"
#define CAN_ADDRESS_HEX_03XX = "0x300", "0x301", "0x302", "0x303", "0x304", "0x305", "0x306", "0x307", "0x308", "0x309", "0x30A", "0x30B", "0x30C", "0x30D", "0x30E", "0x30F", "0x310", "0x311", "0x312", "0x313", "0x314", "0x315", "0x316", "0x317", "0x318", "0x319", "0x31A", "0x31B", "0x31C", "0x31D", "0x31E", "0x31F", "0x320", "0x321", "0x322", "0x323", "0x324", "0x325", "0x326", "0x327", "0x328", "0x329", "0x32A", "0x32B", "0x32C", "0x32D", "0x32E", "0x32F", "0x330", "0x331", "0x332", "0x333", "0x334", "0x335", "0x336", "0x337", "0x338", "0x339", "0x33A", "0x33B", "0x33C", "0x33D", "0x33E", "0x33F", "0x340", "0x341", "0x342", "0x343", "0x344", "0x345", "0x346", "0x347", "0x348", "0x349", "0x34A", "0x34B", "0x34C", "0x34D", "0x34E", "0x34F", "0x350", "0x351", "0x352", "0x353", "0x354", "0x355", "0x356", "0x357", "0x358", "0x359", "0x35A", "0x35B", "0x35C", "0x35D", "0x35E", "0x35F" ,"0x360", "0x361", "0x362", "0x363", "0x364", "0x365", "0x366", "0x367", "0x368", "0x369", "0x36A", "0x36B", "0x36C", "0x36D", "0x36E", "0x36F", "0x370", "0x371", "0x372", "0x373", "0x374", "0x375", "0x376", "0x377", "0x378", "0x379", "0x37A", "0x37B", "0x37C", "0x37D", "0x37E", "0x37F", "0x380", "0x381", "0x382", "0x383", "0x384", "0x385", "0x386", "0x387", "0x388", "0x389", "0x38A", "0x38B", "0x38C", "0x38D", "0x38E", "0x38F" ,"0x390", "0x391", "0x392", "0x393", "0x394", "0x395", "0x396", "0x397", "0x398", "0x399", "0x39A", "0x39B", "0x39C", "0x39D", "0x39E", "0x39F", "0x3A0", "0x3A1", "0x3A2", "0x3A3", "0x3A4", "0x3A5", "0x3A6", "0x3A7", "0x3A8", "0x3A9", "0x3AA", "0x3AB", "0x3AC", "0x3AD", "0x3AE", "0x3AF", "0x3B0", "0x3B1", "0x3B2", "0x3B3", "0x3B4", "0x3B5", "0x3B6", "0x3B7", "0x3B8", "0x3B9", "0x3BA", "0x3BB", "0x3BC", "0x3BD", "0x3BE", "0x3BF" ,"0x3C0", "0x3C1", "0x3C2", "0x3C3", "0x3C4", "0x3C5", "0x3C6", "0x3C7", "0x3C8", "0x3C9", "0x3CA", "0x3CB", "0x3CC", "0x3CD", "0x3CE", "0x3CF", "0x3D0", "0x3D1", "0x3D2", "0x3D3", "0x3D4", "0x3D5", "0x3D6", "0x3D7", "0x3D8", "0x3D9", "0x3DA", "0x3DB", "0x3DC", "0x3DD", "0x3DE", "0x3DF", "0x3E0", "0x3E1", "0x3E2", "0x3E3", "0x3E4", "0x3E5", "0x3E6", "0x3E7", "0x3E8", "0x3E9", "0x3EA", "0x3EB", "0x3EC", "0x3ED", "0x3EE", "0x3EF" ,"0x3F0", "0x3F1", "0x3F2", "0x3F3", "0x3F4", "0x3F5", "0x3F6", "0x3F7", "0x3F8", "0x3F9", "0x3FA", "0x3FB", "0x3FC", "0x3FD", "0x3FE", "0x3FF"
#define CAN_ADDRESS_HEX_04XX = "0x400", "0x401", "0x402", "0x403", "0x404", "0x405", "0x406", "0x407", "0x408", "0x409", "0x40A", "0x40B", "0x40C", "0x40D", "0x40E", "0x40F", "0x410", "0x411", "0x412", "0x413", "0x414", "0x415", "0x416", "0x417", "0x418", "0x419", "0x41A", "0x41B", "0x41C", "0x41D", "0x41E", "0x41F", "0x420", "0x421", "0x422", "0x423", "0x424", "0x425", "0x426", "0x427", "0x428", "0x429", "0x42A", "0x42B", "0x42C", "0x42D", "0x42E", "0x42F", "0x430", "0x431", "0x432", "0x433", "0x434", "0x435", "0x436", "0x437", "0x438", "0x439", "0x43A", "0x43B", "0x43C", "0x43D", "0x43E", "0x43F", "0x440", "0x441", "0x442", "0x443", "0x444", "0x445", "0x446", "0x447", "0x448", "0x449", "0x44A", "0x44B", "0x44C", "0x44D", "0x44E", "0x44F", "0x450", "0x451", "0x452", "0x453", "0x454", "0x455", "0x456", "0x457", "0x458", "0x459", "0x45A", "0x45B", "0x45C", "0x45D", "0x45E", "0x45F" ,"0x460", "0x461", "0x462", "0x463", "0x464", "0x465", "0x466", "0x467", "0x468", "0x469", "0x46A", "0x46B", "0x46C", "0x46D", "0x46E", "0x46F", "0x470", "0x471", "0x472", "0x473", "0x474", "0x475", "0x476", "0x477", "0x478", "0x479", "0x47A", "0x47B", "0x47C", "0x47D", "0x47E", "0x47F", "0x480", "0x481", "0x482", "0x483", "0x484", "0x485", "0x486", "0x487", "0x488", "0x489", "0x48A", "0x48B", "0x48C", "0x48D", "0x48E", "0x48F" ,"0x490", "0x491", "0x492", "0x493", "0x494", "0x495", "0x496", "0x497", "0x498", "0x499", "0x49A", "0x49B", "0x49C", "0x49D", "0x49E", "0x49F", "0x4A0", "0x4A1", "0x4A2", "0x4A3", "0x4A4", "0x4A5", "0x4A6", "0x4A7", "0x4A8", "0x4A9", "0x4AA", "0x4AB", "0x4AC", "0x4AD", "0x4AE", "0x4AF", "0x4B0", "0x4B1", "0x4B2", "0x4B3", "0x4B4", "0x4B5", "0x4B6", "0x4B7", "0x4B8", "0x4B9", "0x4BA", "0x4BB", "0x4BC", "0x4BD", "0x4BE", "0x4BF" ,"0x4C0", "0x4C1", "0x4C2", "0x4C3", "0x4C4", "0x4C5", "0x4C6", "0x4C7", "0x4C8", "0x4C9", "0x4CA", "0x4CB", "0x4CC", "0x4CD", "0x4CE", "0x4CF", "0x4D0", "0x4D1", "0x4D2", "0x4D3", "0x4D4", "0x4D5", "0x4D6", "0x4D7", "0x4D8", "0x4D9", "0x4DA", "0x4DB", "0x4DC", "0x4DD", "0x4DE", "0x4DF", "0x4E0", "0x4E1", "0x4E2", "0x4E3", "0x4E4", "0x4E5", "0x4E6", "0x4E7", "0x4E8", "0x4E9", "0x4EA", "0x4EB", "0x4EC", "0x4ED", "0x4EE", "0x4EF" ,"0x4F0", "0x4F1", "0x4F2", "0x4F3", "0x4F4", "0x4F5", "0x4F6", "0x4F7", "0x4F8", "0x4F9", "0x4FA", "0x4FB", "0x4FC", "0x4FD", "0x4FE", "0x4FF"
#define CAN_ADDRESS_HEX_05XX = "0x500", "0x501", "0x502", "0x503", "0x504", "0x505", "0x506", "0x507", "0x508", "0x509", "0x50A", "0x50B", "0x50C", "0x50D", "0x50E", "0x50F", "0x510", "0x511", "0x512", "0x513", "0x514", "0x515", "0x516", "0x517", "0x518", "0x519", "0x51A", "0x51B", "0x51C", "0x51D", "0x51E", "0x51F", "0x520", "0x521", "0x522", "0x523", "0x524", "0x525", "0x526", "0x527", "0x528", "0x529", "0x52A", "0x52B", "0x52C", "0x52D", "0x52E", "0x52F", "0x530", "0x531", "0x532", "0x533", "0x534", "0x535", "0x536", "0x537", "0x538", "0x539", "0x53A", "0x53B", "0x53C", "0x53D", "0x53E", "0x53F", "0x540", "0x541", "0x542", "0x543", "0x544", "0x545", "0x546", "0x547", "0x548", "0x549", "0x54A", "0x54B", "0x54C", "0x54D", "0x54E", "0x54F", "0x550", "0x551", "0x552", "0x553", "0x554", "0x555", "0x556", "0x557", "0x558", "0x559", "0x55A", "0x55B", "0x55C", "0x55D", "0x55E", "0x55F" ,"0x560", "0x561", "0x562", "0x563", "0x564", "0x565", "0x566", "0x567", "0x568", "0x569", "0x56A", "0x56B", "0x56C", "0x56D", "0x56E", "0x56F", "0x570", "0x571", "0x572", "0x573", "0x574", "0x575", "0x576", "0x577", "0x578", "0x579", "0x57A", "0x57B", "0x57C", "0x57D", "0x57E", "0x57F", "0x580", "0x581", "0x582", "0x583", "0x584", "0x585", "0x586", "0x587", "0x588", "0x589", "0x58A", "0x58B", "0x58C", "0x58D", "0x58E", "0x58F" ,"0x590", "0x591", "0x592", "0x593", "0x594", "0x595", "0x596", "0x597", "0x598", "0x599", "0x59A", "0x59B", "0x59C", "0x59D", "0x59E", "0x59F", "0x5A0", "0x5A1", "0x5A2", "0x5A3", "0x5A4", "0x5A5", "0x5A6", "0x5A7", "0x5A8", "0x5A9", "0x5AA", "0x5AB", "0x5AC", "0x5AD", "0x5AE", "0x5AF", "0x5B0", "0x5B1", "0x5B2", "0x5B3", "0x5B4", "0x5B5", "0x5B6", "0x5B7", "0x5B8", "0x5B9", "0x5BA", "0x5BB", "0x5BC", "0x5BD", "0x5BE", "0x5BF" ,"0x5C0", "0x5C1", "0x5C2", "0x5C3", "0x5C4", "0x5C5", "0x5C6", "0x5C7", "0x5C8", "0x5C9", "0x5CA", "0x5CB", "0x5CC", "0x5CD", "0x5CE", "0x5CF", "0x5D0", "0x5D1", "0x5D2", "0x5D3", "0x5D4", "0x5D5", "0x5D6", "0x5D7", "0x5D8", "0x5D9", "0x5DA", "0x5DB", "0x5DC", "0x5DD", "0x5DE", "0x5DF", "0x5E0", "0x5E1", "0x5E2", "0x5E3", "0x5E4", "0x5E5", "0x5E6", "0x5E7", "0x5E8", "0x5E9", "0x5EA", "0x5EB", "0x5EC", "0x5ED", "0x5EE", "0x5EF" ,"0x5F0", "0x5F1", "0x5F2", "0x5F3", "0x5F4", "0x5F5", "0x5F6", "0x5F7", "0x5F8", "0x5F9", "0x5FA", "0x5FB", "0x5FC", "0x5FD", "0x5FE", "0x5FF"
#define CAN_ADDRESS_HEX_06XX = "0x600", "0x601", "0x602", "0x603", "0x604", "0x605", "0x606", "0x607", "0x608", "0x609", "0x60A", "0x60B", "0x60C", "0x60D", "0x60E", "0x60F", "0x610", "0x611", "0x612", "0x613", "0x614", "0x615", "0x616", "0x617", "0x618", "0x619", "0x61A", "0x61B", "0x61C", "0x61D", "0x61E", "0x61F", "0x620", "0x621", "0x622", "0x623", "0x624", "0x625", "0x626", "0x627", "0x628", "0x629", "0x62A", "0x62B", "0x62C", "0x62D", "0x62E", "0x62F", "0x630", "0x631", "0x632", "0x633", "0x634", "0x635", "0x636", "0x637", "0x638", "0x639", "0x63A", "0x63B", "0x63C", "0x63D", "0x63E", "0x63F", "0x640", "0x641", "0x642", "0x643", "0x644", "0x645", "0x646", "0x647", "0x648", "0x649", "0x64A", "0x64B", "0x64C", "0x64D", "0x64E", "0x64F", "0x650", "0x651", "0x652", "0x653", "0x654", "0x655", "0x656", "0x657", "0x658", "0x659", "0x65A", "0x65B", "0x65C", "0x65D", "0x65E", "0x65F" ,"0x660", "0x661", "0x662", "0x663", "0x664", "0x665", "0x666", "0x667", "0x668", "0x669", "0x66A", "0x66B", "0x66C", "0x66D", "0x66E", "0x66F", "0x670", "0x671", "0x672", "0x673", "0x674", "0x675", "0x676", "0x677", "0x678", "0x679", "0x67A", "0x67B", "0x67C", "0x67D", "0x67E", "0x67F", "0x680", "0x681", "0x682", "0x683", "0x684", "0x685", "0x686", "0x687", "0x688", "0x689", "0x68A", "0x68B", "0x68C", "0x68D", "0x68E", "0x68F" ,"0x690", "0x691", "0x692", "0x693", "0x694", "0x695", "0x696", "0x697", "0x698", "0x699", "0x69A", "0x69B", "0x69C", "0x69D", "0x69E", "0x69F", "0x6A0", "0x6A1", "0x6A2", "0x6A3", "0x6A4", "0x6A5", "0x6A6", "0x6A7", "0x6A8", "0x6A9", "0x6AA", "0x6AB", "0x6AC", "0x6AD", "0x6AE", "0x6AF", "0x6B0", "0x6B1", "0x6B2", "0x6B3", "0x6B4", "0x6B5", "0x6B6", "0x6B7", "0x6B8", "0x6B9", "0x6BA", "0x6BB", "0x6BC", "0x6BD", "0x6BE", "0x6BF" ,"0x6C0", "0x6C1", "0x6C2", "0x6C3", "0x6C4", "0x6C5", "0x6C6", "0x6C7", "0x6C8", "0x6C9", "0x6CA", "0x6CB", "0x6CC", "0x6CD", "0x6CE", "0x6CF", "0x6D0", "0x6D1", "0x6D2", "0x6D3", "0x6D4", "0x6D5", "0x6D6", "0x6D7", "0x6D8", "0x6D9", "0x6DA", "0x6DB", "0x6DC", "0x6DD", "0x6DE", "0x6DF", "0x6E0", "0x6E1", "0x6E2", "0x6E3", "0x6E4", "0x6E5", "0x6E6", "0x6E7", "0x6E8", "0x6E9", "0x6EA", "0x6EB", "0x6EC", "0x6ED", "0x6EE", "0x6EF" ,"0x6F0", "0x6F1", "0x6F2", "0x6F3", "0x6F4", "0x6F5", "0x6F6", "0x6F7", "0x6F8", "0x6F9", "0x6FA", "0x6FB", "0x6FC", "0x6FD", "0x6FE", "0x6FF"
#define CAN_ADDRESS_HEX_07XX = "0x700", "0x701", "0x702", "0x703", "0x704", "0x705", "0x706", "0x707", "0x708", "0x709", "0x70A", "0x70B", "0x70C", "0x70D", "0x70E", "0x70F", "0x710", "0x711", "0x712", "0x713", "0x714", "0x715", "0x716", "0x717", "0x718", "0x719", "0x71A", "0x71B", "0x71C", "0x71D", "0x71E", "0x71F", "0x720", "0x721", "0x722", "0x723", "0x724", "0x725", "0x726", "0x727", "0x728", "0x729", "0x72A", "0x72B", "0x72C", "0x72D", "0x72E", "0x72F", "0x730", "0x731", "0x732", "0x733", "0x734", "0x735", "0x736", "0x737", "0x738", "0x739", "0x73A", "0x73B", "0x73C", "0x73D", "0x73E", "0x73F", "0x740", "0x741", "0x742", "0x743", "0x744", "0x745", "0x746", "0x747", "0x748", "0x749", "0x74A", "0x74B", "0x74C", "0x74D", "0x74E", "0x74F", "0x750", "0x751", "0x752", "0x753", "0x754", "0x755", "0x756", "0x757", "0x758", "0x759", "0x75A", "0x75B", "0x75C", "0x75D", "0x75E", "0x75F" ,"0x760", "0x761", "0x762", "0x763", "0x764", "0x765", "0x766", "0x767", "0x768", "0x769", "0x76A", "0x76B", "0x76C", "0x76D", "0x76E", "0x76F", "0x770", "0x771", "0x772", "0x773", "0x774", "0x775", "0x776", "0x777", "0x778", "0x779", "0x77A", "0x77B", "0x77C", "0x77D", "0x77E", "0x77F", "0x780", "0x781", "0x782", "0x783", "0x784", "0x785", "0x786", "0x787", "0x788", "0x789", "0x78A", "0x78B", "0x78C", "0x78D", "0x78E", "0x78F" ,"0x790", "0x791", "0x792", "0x793", "0x794", "0x795", "0x796", "0x797", "0x798", "0x799", "0x79A", "0x79B", "0x79C", "0x79D", "0x79E", "0x79F", "0x7A0", "0x7A1", "0x7A2", "0x7A3", "0x7A4", "0x7A5", "0x7A6", "0x7A7", "0x7A8", "0x7A9", "0x7AA", "0x7AB", "0x7AC", "0x7AD", "0x7AE", "0x7AF", "0x7B0", "0x7B1", "0x7B2", "0x7B3", "0x7B4", "0x7B5", "0x7B6", "0x7B7", "0x7B8", "0x7B9", "0x7BA", "0x7BB", "0x7BC", "0x7BD", "0x7BE", "0x7BF" ,"0x7C0", "0x7C1", "0x7C2", "0x7C3", "0x7C4", "0x7C5", "0x7C6", "0x7C7", "0x7C8", "0x7C9", "0x7CA", "0x7CB", "0x7CC", "0x7CD", "0x7CE", "0x7CF", "0x7D0", "0x7D1", "0x7D2", "0x7D3", "0x7D4", "0x7D5", "0x7D6", "0x7D7", "0x7D8", "0x7D9", "0x7DA", "0x7DB", "0x7DC", "0x7DD", "0x7DE", "0x7DF", "0x7E0", "0x7E1", "0x7E2", "0x7E3", "0x7E4", "0x7E5", "0x7E6", "0x7E7", "0x7E8", "0x7E9", "0x7EA", "0x7EB", "0x7EC", "0x7ED", "0x7EE", "0x7EF" ,"0x7F0", "0x7F1", "0x7F2", "0x7F3", "0x7F4", "0x7F5", "0x7F6", "0x7F7", "0x7F8", "0x7F9", "0x7FA", "0x7FB", "0x7FC", "0x7FD", "0x7FE", "0x7FF"
#define CAN_ADDRESS_HEX = $CAN_ADDRESS_HEX_01XX, $CAN_ADDRESS_HEX_02XX, $CAN_ADDRESS_HEX_03XX, $CAN_ADDRESS_HEX_04XX, $CAN_ADDRESS_HEX_05XX, $CAN_ADDRESS_HEX_06XX, $CAN_ADDRESS_HEX_07XX, $CAN_ADDRESS_HEX_inv255
;--------------------------------------------------
;Start Page 1
;Page 1 is all general settings. Note that some of these (algorithm and ignAlgorithm) MUST come before their use in the bitStringValue() calls in the fuel and ignition tables
;--------------------------------------------------
page = 1
aseTaperTime = scalar, U08, 0, "S", 0.1, 0.0, 0.0, 25.5, 1
aeColdPct = scalar, U08, 1, "%", 1.0, 0, 100, 255, 0 ;AE cold adjustment %
#if CELSIUS
aeColdTaperMin = scalar, U08, 2, "C", 1.0, -40, -40, 215, 0 ;AE cold adjustment, taper start clt (full adjustment)
#else
aeColdTaperMin = scalar, U08, 2, "F", 1.8, -22.23, -40, 215, 0 ;AE cold adjustment, taper start clt (full adjustment)
#endif
aeMode = bits, U08, 3, [0:1], "TPS", "MAP", "INVALID", "INVALID"
battVCorMode = bits, U08, 3, [2:2], "Whole PW", "Open Time only"
SoftLimitMode = bits, U08, 3, [3:3], "Fixed", "Relative "
useTachoSweep = bits, U08, 3, [4:4], "Off", "On"
aeApplyMode = bits, U08, 3, [5:5], "PW Multiplier", "PW Adder"
multiplyMAP = bits, U08, 3, [6:7], "Off", "Baro", "Fixed", "INVALID"
wueRates = array, U08, 4, [10], "%", 1.0, 0.0, 0.0, 255, 0
crankingPct = scalar, U08, 14, "%", 1.0, 0.0, 0.0, 255, 0
pinLayout = bits, U08, 15, [0:7], "INVALID", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "01-05 MX5 PNP", "INVALID", "96-97 MX5 PNP", "NA6 MX5 PNP", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Daz V6 Shield 0.1", "BMW PnP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "DIY-EFI CORE4 v1.0", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "JUICEBOX", "INVALID", "Drop Bear", "INVALID", "INVALID", "INVALID", "INVALID", "Black STM32F407VET6 V0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
tachoPin = bits, U08, 16, [0:5], "Board Default", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
tachoDiv = bits, U08, 16, [6:7], "Normal", "Half", "INVALID", "INVALID"
tachoDuration = scalar, U08, 17, "ms", 1.0, 0.0, 1.0, 6.0, 0
maeThresh = scalar, U08, 18, "kPa/s", 1.0, 0.0, 0.0, 255, 0 ;MAP threshold for triggering AE
taeThresh = scalar, U08, 19, "%/s", 1.0, 0.0, 0.0, 255, 0 ;TPS threshold for triggering AE
aeTime = scalar, U08, 20, "ms", 10, 0.0, 0.0, 2550, 0
; Display (Options for what the display is showing)
display = bits, U08, 21, [0:2], "Unused", "Adafruit 128x32", "Generic 128x32", "Adafruit 128x64", "Generic 128x64", "INVALID", "INVALID", "INVALID"
display1 = bits, U08, 21, [3:5], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
display2 = bits, U08, 21, [6:7], "O2", "Voltage", "CPU", "Mem"
display3 = bits, U08, 22, [0:2], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
display4 = bits, U08, 22, [3:4], "O2", "Voltage", "CPU", "Mem"
display5 = bits, U08, 22, [5:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
displayB1 = bits, U08, 23, [0:3], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
displayB2 = bits, U08, 23, [4:7], "RPM", "PW", "Advance", "VE", "GammaE", "TPS", "IAT", "CLT"
reqFuel = scalar, U08, 24, "ms", 0.1, 0.0, 0.0, 25.5, 1
divider = scalar, U08, 25, "", 1.0, 0.0
alternate = bits, U08, 26, [0:0], "Simultaneous", "Alternating"
multiplyMAP1 = bits, U08, 26, [1:1], "No", "Yes"
includeAFR = bits, U08, 26, [2:2], "No", "Yes"
hardCutType = bits, U08, 26, [3:3], "Full", "Rolling"
ignAlgorithm = bits, U08, 26, [4:6], $loadSourceNames
indInjAng = bits, U08, 26, [7:7], "Disabled", "Enabled"
injOpen = scalar, U08, 27, "ms", 0.1, 0.0, 0.1, 25.5, 1
injAng = array, U16, 28, [4], "deg", 1.0, 0.0, 0.0, 720, 0
; Config1
mapSample = bits, U08, 36, [0:1], "Instantaneous", "Cycle Average", "Cycle Minimum", "Event Average"
twoStroke = bits, U08, 36, [2:2], "Four-stroke", "Two-stroke"
injType = bits, U08, 36, [3:3], "Port", "Throttle Body"
nCylinders = bits, U08, 36, [4:7], "INVALID","1","2","3","4","5","6","INVALID","8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
; Config2
algorithm = bits, U08, 37, [0:2], $loadSourceNames ;Has to be called algorithm for the req fuel calculator to work :(
fixAngEnable = bits, U08, 37, [3:3], "Off", "On"
nInjectors = bits, U08, 37, [4:7], "INVALID","1","2","3","4","5","6","INVALID","8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID"
; Config3
engineType = bits, U08, 38, [0:0], "Even fire", "Odd fire"
flexEnabled = bits, U08, 38, [1:1], "Off", "On"
legacyMAP = bits, U08, 38, [2:2], "No", "Yes" ;Whether to use the older legacy MAP reading that had the pullup enabled
baroCorr = bits, U08, 38, [3:3], "Off", "On"
injLayout = bits, U08, 38, [4:5], "Paired", "Semi-Sequential", "INVALID", "Sequential"
perToothIgn = bits, U08, 38, [6:6], "No", "Yes"
dfcoEnabled = bits, U08, 38, [7:7], "Off", "On"
#if CELSIUS
aeColdTaperMax = scalar, U08, 39, "C", 1.0, -40, -40, 215, 0 ;AE cold adjustment, taper start clt (full adjustment)
#else
aeColdTaperMax = scalar, U08, 39, "F", 1.8, -22.23, -40, 215, 0 ;AE cold adjustment, taper end clt (no adjustment)
#endif
dutyLim = scalar, U08, 40, "%", 1.0, 0.0, 0.0, 95.0, 0
flexFreqLow = scalar, U08, 41, "Hz", 1.0, 0.0, 0.0, 250.0, 0
flexFreqHigh = scalar, U08, 42, "Hz", 1.0, 0.0, 0.0, 250.0, 0
boostMaxDuty = scalar, U08, 43, "%", 1.0, 0.0, 0.0, 100.0, 0
tpsMin = scalar, U08, 44, "ADC", 1.0, 0.0, 0.0, 255.0, 0
tpsMax = scalar, U08, 45, "ADC", 1.0, 0.0, 0.0, 255.0, 0
mapMin = scalar, S08, 46, "kpa", 1.0, 0.0, -100, 127.0, 0
mapMax = scalar, U16, 47, "kpa", 1.0, 0.0, 0.0, 25500, 0
fpPrime = scalar, U08, 49, "s", 1.0, 0.0, 0.0, 255.0, 0
stoich = scalar, U08, 50, ":1", 0.1, 0.0, 0.0, 25.5, 1
oddfire2 = scalar, U16, 51, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
oddfire3 = scalar, U16, 53, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
oddfire4 = scalar, U16, 55, "deg", 1.0, 0.0, 0.0, 720, 0 ; * ( 2 byte)
idleUpPin = bits, U08, 57, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
idleUpPolarity= bits, U08, 57, [6:6], "Normal", "Inverted"
idleUpEnabled = bits, U08, 57, [7:7], "Off", "On"
idleUpAdder = scalar, U08, 58, "% / Steps", 1.0, 0.0, 0.0, 250.0, 0
aeTaperMin = scalar, U08, 59, "RPM", 100, 0.0, 1000, 10000, 0
aeTaperMax = scalar, U08, 60, "RPM", 100, 0.0, 2000, 10000, 0
iacCLminDuty = scalar, U08, 61, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles when using closed loop idle
iacCLmaxDuty = scalar, U08, 62, "%", 1.0, 0.0, 0.0, 100.0, 0
boostMinDuty = scalar, U08, 63, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles for boost control
baroMin = scalar, S08, 64, "kpa", 1.0, 0.0, -100, 127.0, 0
baroMax = scalar, U16, 65, "kpa", 1.0, 0.0, 0.0, 25500, 0
EMAPMin = scalar, S08, 67, "kpa", 1.0, 0.0, -100, 127.0, 0
EMAPMax = scalar, U16, 68, "kpa", 1.0, 0.0, 0.0, 25500, 0
fanWhenOff = bits, U08, 70, [0:0], "No", "Yes"
fanWhenCranking = bits, U08, 70, [1:1], "No", "Yes"
useDwellMap = bits, U08, 70, [2:2], "No", "Yes"
unused_fan_bits = bits, U08, 70, [3:4]
rtc_mode = bits, U08, 70, [5:6], "Off", "On-board", "INVALID", "INVALID"
incorporateAFR = bits, U08, 70, [7:7], "No", "Yes"
asePct = array, U08, 71, [4], "%", 1.0, 0.0, 0, 155, 0
aseCount = array, U08, 75, [4], "s", 1.0, 0.0, 0.0, 255, 0 ; Values for the afterstart enrichment curve
#if CELSIUS
aseBins = array, U08, 79, [4], "C", 1.0, -40, -40, 215, 0
#else
aseBins = array, U08, 79, [4], "F", 1.8, -22.23, -40, 215, 0
#endif
primePulse = array, U08, 83, [4], "ms", 0.5, 0.0, 0.0, 127.5, 1
#if CELSIUS
primeBins = array, U08, 87, [4], "C", 1.0, -40, -40, 215, 0
#else
primeBins = array, U08, 87, [4], "F", 1.8, -22.23, -40, 215, 0
#endif
CTPSPin = bits, U08, 91, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
CTPSPolarity = bits, U08, 91, [6:6], "Normal", "Inverted"
CTPSEnabled = bits, U08, 91, [7:7], "Off", "On"
idleAdvEnabled = bits, U08, 92, [0:1], "Off", "Added", "Switched", "INVALID"
idleAdvAlgorithm = bits, U08, 92, [2:2], "TPS", "CTPS"
idleAdvDelay = bits, U08, 92, [3:7], "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "INVALID", "INVALID"
idleAdvRPM = scalar, U08, 93, "rpm", 100, 0.0, 100, 25500, 0
idleAdvTPS = scalar, U08, 94, "%", 1, 0, 0, 120, 0
injAngRPM = array, U08, 95, [4], "RPM", 100, 0.0, 100, 10000, 0
idleTaperTime = scalar, U08, 99, "S", 0.1, 0.0, 0.0, 25.5, 1
dfcoDelay = scalar, U08, 100, "S", 0.1, 0.0, 0.0, 25.5, 1 ;Remainder of DFCO settings are in page 4
#if CELSIUS
dfcoMinCLT = scalar, U08, 101, "C", 1.0, -40, -40, 215, 0
#else
dfcoMinCLT = scalar, U08, 101, "F", 1.8, -22.23, -40, 215, 0
#endif
;VSS settings
vssMode = bits, U08, 102, [0:1], "Off", "INVALID", "Pulses per KM", "Pulses per mile" ;INVALID value will be CAN
;vssPullup = bits, U08, 102, [1:1], "Off", "On"
vssPin = bits, U08, 102, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
vssPulsesPerKm= scalar, U16, 103, "pulses", 1.0, 0.0, 0.0, 25500, 0
vssSmoothing = scalar, U08, 105, "%", 1.0, 0, 0, 255, 0
vssRatio1 = scalar, U16, 106, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
vssRatio2 = scalar, U16, 108, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
vssRatio3 = scalar, U16, 110, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
vssRatio4 = scalar, U16, 112, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
vssRatio5 = scalar, U16, 114, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
vssRatio6 = scalar, U16, 116, "km/h per 1000rpm", 0.1, 0, 0, 99.9, 1
;Idle up output (AC Fan) seettings
idleUpOutputEnabled = bits, U08, 118, [0:0], "Off", "On"
idleUpOutputInv = bits, U08, 118, [1:1], "No", "Yes"
idleUpOutputPin = bits, U08, 118, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
tachoSweepMaxRPM = scalar, U08, 119, "RPM", 100, 0.0, 100, 10000, 0
primingDelay = scalar, U08, 120, "S", 0.1, 0.0, 0.0, 25.5, 1
iacTPSlimit = scalar, U08, 121, "%", 1, 0, 0, 100, 0
iacRPMlimitHysteresis = scalar, U08, 122, "RPM", 10, 0, 10, 2500, 0
rtc_trim = scalar, S08, 123, "ppm", 1, 0, -127, 127, 0
idleAdvVss = scalar, U08, 124, "km/h", 1, 0.0, 0.0, 255, 0
unused2_95 = array, U08, 125, [3], "%", 1.0, 0.0, 0.0, 255, 0
;Page 2 is the fuel map and axis bins only
page = 2
; name = bits, type, offset, bits
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
; name = scalar, type, offset, units, scale, translate, lo, hi, digits
veTable = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
rpmBins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
;fuelLoadBins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, { arrayValue(rpmBins , algorithm) }, 0
;--------------------------------------------------
;Start Ignition table (Page 3)
;--------------------------------------------------
page = 3
advTable1 = array, U08, 0,[16x16], "deg", 1.0, -40, -40, 215.0, 0
rpmBins2 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
mapBins1 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 2.0, 0.0, 0.0, {ignLoadMax}, 0 ; This name has to be used in order for the table to show up in MLVs table. I can't find the regexs that make this work :(
;--------------------------------------------------
;Start Page 4
;These are primarily ignition related settings (Previously part of page 2)
;--------------------------------------------------
page = 4
TrigAng = scalar, S16, 0, "Deg", 1, 0, -360, 360, 0
FixAng = scalar, S08, 2, "Deg", 1, 0, -64, 64, 0 ; Allow negative values here
CrankAng = scalar, U08, 3, "Deg", 1, 0, -10, 80, 0
TrigAngMul = scalar, U08, 4, "", 1, 0, 0, 88, 0 ; Multiplier for tooth counts that don't evenly divide into 360
TrigEdge = bits, U08, 5,[0:0], "RISING", "FALLING"
TrigSpeed = bits, U08, 5,[1:1], "Crank Speed", "Cam Speed"
IgInv = bits, U08, 5,[2:2], "Going Low", "Going High"
TrigPattern= bits, U08, 5,[3:7], "Missing Tooth", "Basic Distributor", "Dual Wheel", "GM 7X", "4G63 / Miata / 3000GT", "GM 24X", "Jeep 2000", "Audi 135", "Honda D17", "Miata 99-05", "Mazda AU", "Non-360 Dual", "Nissan 360", "Subaru 6/7", "Daihatsu +1", "Harley EVO", "36-2-2-2", "36-2-1", "DSM 420a", "Weber-Marelli", "Ford ST170", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
TrigEdgeSec= bits, U08, 6,[0:0], "RISING", "FALLING"
fuelPumpPin= bits , U08, 6,[1:6], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
useResync = bits, U08, 6,[7:7], "No", "Yes"
sparkDur = scalar, U08, 7, "ms", 0.1, 0, 0, 25.5, 1 ; Spark duration
trigPatternSec = bits,U08, 8,[0:6], "Single tooth cam", "4-1 cam", "Poll level", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
PollLevelPol = bits, U08, 8,[7:7], "Low", "High",
;Reset Control
bootloaderCaps = scalar, U08, 9, "level", 1, 0, 0, 255, 0
#if resetcontrol_adv
resetControl = bits, U08, 10,[0:1], "Disabled", "Prevent When Running", "Prevent Always", "Serial Command"
#else
resetControl = bits, U08, 10,[0:1], "Disabled", "INVALID", "INVALID", "Serial Command"
#endif
resetControlPin = bits, U08, 10,[2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
SkipCycles = scalar, U08, 11, "cycles", 1, 0, 0, 255, 0
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
; name = scalar, type, offset, units, scale, translate, lo, hi, digits
;Dwell control
boostType = bits, U08, 12, [0:0], "Open Loop", "Closed Loop"
useDwellLim = bits, U08, 12, [1:1], "Off", "On"
sparkMode = bits, U08, 12, [2:4], "Wasted Spark", "Single Channel", "Wasted COP", "Sequential", "Rotary", "INVALID", "INVALID", "INVALID"
TrigFilter = bits, U08, 12, [5:6], "Off", "Weak", "Medium", "Aggressive"
ignCranklock = bits, U08, 12, [7:7], "Off", "On"
dwellcrank = scalar, U08, 13, "ms", 0.1, 0, 0, 25, 1
dwellrun = scalar, U08, 14, "ms", 0.1, 0, 0, 8, 1 ;running dwell variable railed to 8 - who needs more than 8ms?
numTeeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
missingTeeth = scalar, U08, 16, "teeth", 1.0, 0.0, 0.0, 255, 0
crankRPM = scalar, U08, 17, "rpm", 10, 0.0, 100, 1000, 0
tpsflood = scalar, U08, 18, "%", 1.0, 0.0, 0.0, 255.0, 0
;Rev Limits
SoftRevLim = scalar, U08, 19, "rpm", 100, 0.0, 100, 25500, 0
SoftLimRetard = scalar, U08, 20, "deg", 1.0, 0.0, 0.0, 80, 0
SoftLimMax = scalar, U08, 21, "s", 0.1, 0.0, 0.0, 25.5, 1
HardRevLim = scalar, U08, 22, "rpm", 100, 0.0, 100, 25500, 0
;TPS based acceleration enrichment
taeBins = array, U08, 23, [ 4], "%/s", 10.0, 0.0, 0.00, 2550.0, 0
taeRates = array, U08, 27, [ 4], "%", 1.0, 0.0, 0.00, 255.0, 0 ; 4 bytes
;WUE Bins (Needed somewhere to put these
#if CELSIUS
wueBins = array, U08, 31, [10], "C", 1.0, -40, -40, 102.0, 0
#else
wueBins = array, U08, 31, [10], "F", 1.8, -22.23, -40, 215.0, 0
#endif
;Dwell config options
dwellLim = scalar, U08, 41, "ms", 1, 0, 0, 32, 0
dwellRates = array, U08, 42, [6], "%", 1.0, 0.0, 0.00, 255.0, 0
;IAT (Inlet air temp) timing retard
#if CELSIUS
iatRetBins = array, U08, 48, [ 6], "C", 1.0, 0.0, 0.00, 255.0, 0
#else
iatRetBins = array, U08, 48, [ 6], "F", 1.8, 17.77, 0.00, 255.0, 0 ; No -40 degree offset here
#endif
iatRetRates = array, U08, 54, [ 6], "deg", 1.0, 0.0, 0.00, 255.0, 0
;Decelleration Fuel Cut Off (DFCO)
dfcoRPM = scalar, U08, 60, "RPM", 10.0, 0.0, 100, 2550, 0
dfcoHyster = scalar, U08, 61, "RPM", 1.0, 0.0, 100, 255.0, 0
dfcoTPSThresh= scalar, U08, 62, "%", 1.0, 0.0, 0, 100.0, 0
;Cranking ignition bypass
ignBypassEnable = bits, U08, 63, [0:0], "Off", "On"
ignBypassPin = bits, U08, 63, [1:6], "INVALID", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
ignBypassHiLo = bits, U08, 63, [7:7], "LOW", "HIGH"
;Analog input filter levels (Note max values are 254 so that default values of 255 can be overwirtten on bootup)
ADCFILTER_TPS = scalar, U08, 64, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_CLT = scalar, U08, 65, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_IAT = scalar, U08, 66, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_O2 = scalar, U08, 67, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_BAT = scalar, U08, 68, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_MAP = scalar, U08, 69, "%", 1.0, 0.0, 0, 240, 0
ADCFILTER_BARO = scalar, U08, 70, "%", 1.0, 0.0, 0, 240, 0
;CLT (Coolant temp) timing Advance/Retard
#if CELSIUS
cltAdvBins = array, U08, 71, [ 6], "C", 1.0, -40, -40, 102.0, 0
#else
cltAdvBins = array, U08, 71, [ 6], "F", 1.8, -22.23, -40, 215.0, 0 ; No -40 degree offset here
#endif
cltAdvValues = array, S08, 77, [ 6], "deg", 1.0, -15, -15, 15, 0
;MAP based acceleration enrichment
maeBins = array, U08, 83, [ 4], "kpa/s", 10.0, 0.0, 0.00, 2550.0, 0
maeRates = array, U08, 87, [ 4], "%", 1.0, 0.0, 0.00, 255.0, 0 ; 4 bytes
batVoltCorrect = scalar, S08, 91, "v", 0.1, 0.0, -2, 2, 1 ;Battery reading calibration value. Note: Signed value
;Baro fuel correction
baroFuelBins = array, U08, 92, [8], "kPa", 1.0, 0, 70, 120, 0 ; Bins for the Baro correction curve
baroFuelValues = array, U08, 100, [8], "%", 1.0, 0, 0, 255, 0 ; % Values for same
;Idle timing advance
idleAdvBins = array, U08, 108, [6], "RPM", 10.0, -50, -500, 500, 0
idleAdvValues = array, U08, 114, [6], "deg", 1.0, -15, -15, 50, 0
engineProtectMaxRPM = scalar, U08, 120, "rpm", 100, 0.0, 100, 25500, 0
unused4_120 = array, U08, 121, [7], "%", 1.0, 0.0, 0.0, 255, 0
;--------------------------------------------------
;Start AFR page
;--------------------------------------------------
page = 5
#if LAMBDA
; TODO: enable this later!
; afrTable = array, U08, 0,[16x16], "Lambda", { 0.1 / stoich }, 0.0000, 0.00, 2.00, 3
#else
afrTable = array, U08, 0,[16x16], "AFR", 0.1, 0.0, 7, 25.5, 1
#endif
rpmBinsAFR = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
loadBinsAFR = array, U08, 272,[ 16], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
;--------------------------------------------------
;Start page 6
; Page 6 is all settings associated with O2/AFR
;--------------------------------------------------
page = 6
egoAlgorithm = bits , U08, 0, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
egoType = bits , U08, 0, [2:3], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption
boostEnabled = bits, U08, 0, [4:4], "Off", "On"
vvtEnabled = bits, U08, 0, [5:5], "Off", "On"
engineProtectType = bits, U08, 0, [6:7], "Off", "Spark Only", "Fuel Only","Both"
egoKP = scalar, U08, 1, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
egoKI = scalar, U08, 2, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
egoKD = scalar, U08, 3, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
#if CELSIUS
egoTemp = scalar, U08, 4, "C", 1.0, -40, -40, 102.0, 0
#else
egoTemp = scalar, U08, 4, "F", 1.8, -22.23, -40, 215.0, 0
#endif
egoCount = scalar, U08, 5, "", 4.0, 0.0, 4.0, 255.0, 0 ; * ( 1 byte)
vvtMode = bits, U08, 6, [0:1], "On/Off", "Open Loop", "Closed loop", "INVALID"
vvtLoadSource = bits, U08, 6, [2:3], "MAP", "TPS", "INVALID", "INVALID"
vvtPWMdir = bits, U08, 6, [4:4], "Advance", "Retard"
vvtCLUseHold = bits, U08, 6, [5:5], "No", "Yes"
vvtCLAlterFuelTiming = bits, U08, 6, [6:6], "No", "Yes"
boostCutEnabled = bits, U08, 6, [7:7], "Off", "On"
egoLimit = scalar, U08, 7, "", 1, 0, 0, 16, 0
ego_min = scalar, U08, 8, "AFR", 0.1, 0.0, 7, 25, 1
ego_max = scalar, U08, 9, "AFR", 0.1, 0.0, 7, 25, 1
ego_sdelay = scalar, U08, 10, "sec", 1, 0, 0, 120, 0
egoRPM = scalar, U08, 11, "rpm", 100, 0.0, 100, 25500, 0
egoTPSMax = scalar, U08, 12, "%", 1, 0, 0, 120, 0
vvt1Pin = bits , U08, 13, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
useExtBaro = bits, U08, 13, [6:6], "No", "Yes"
boostMode = bits, U08, 13, [7:7], "Simple", "Full"
boostPin = bits, U08, 14, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
VVTasOnOff = bits, U08, 14, [6:6], "No", "Yes"
useEMAP = bits, U08, 14, [7:7], "No", "Yes"
brvBins = array, U08, 15, [6], "V", 0.1, 0, 6, 24, 1 ; Bins for the battery reference voltage
injBatRates = array, U08, 21, [6], "%", 1, 0, 0, 255, 0 ;Values for injector pulsewidth vs voltage
#if CELSIUS
airDenBins = array, U08, 27, [9], "C", 1.0, -40, -40, 215, 0 ; Bins for the air density correction curve
#else
airDenBins = array, U08, 27, [9], "F", 1.8, -22.23, -40, 215, 0 ; Bins for the air density correction curve
#endif
airDenRates = array, U08, 36, [9], "%", 1.0, 0.0, 0, 255, 0 ; Values for the air density correction curve
; PWM Frequencies
boostFreq = scalar, U08, 45, "Hz", 2.0, 0.0, 10, 511, 0
vvtFreq = scalar, U08, 46, "Hz", 2.0, 0.0, 10, 511, 0
idleFreq = scalar, U08, 47, "Hz", 2.0, 0.0, 10, 511, 0
; Launch Control
launchPin = bits , U08, 48, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
launchEnable= bits, U08, 48, [6:6], "No", "Yes"
launchHiLo = bits, U08, 48, [7:7], "LOW", "HIGH"
lnchSoftLim = scalar, U08, 49, "rpm", 100, 0.0, 100, 25500, 0
lnchRetard = scalar, S08, 50, "deg", 1.0, 0.0, -30, 40, 0
lnchHardLim = scalar, U08, 51, "rpm", 100, 0.0, 100, 25500, 0
lnchFuelAdd = scalar, U08, 52, "%", 1.0, 0.0, 0.0, 80, 0
idleKP = scalar, U08, 53, "%", 0.03125, 0.0, 0.0, 7.96, 2 ; * ( 1 byte)
idleKI = scalar, U08, 54, "%", 0.03125, 0.0, 0.0, 7.96, 2 ; * ( 1 byte)
idleKD = scalar, U08, 55, "%", 0.00781, 0.0, 0.0, 1.99, 3 ; * ( 1 byte)
boostLimit = scalar, U08, 56, "kPa", 2.0, 0.0, 0.0, 511.0, 0
boostKP = scalar, U08, 57, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
boostKI = scalar, U08, 58, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
boostKD = scalar, U08, 59, "%", 1.0, 0.0, 0.0, 200.0, 0 ; * ( 1 byte)
lnchPullRes = bits, U08, 60, [0:0], "Float" , "Pullup"
iacPWMrun = bits, U08, 60, [1:1], "No", "Yes"
fuelTrimEnabled= bits, U08, 60, [2:2], "No", "Yes"
flatSEnable = bits, U08, 60, [3:3], "No", "Yes"
; Baro Sensor pin
baroPin = bits, U08, 60, [4:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"
; Flat shift
flatSSoftWin = scalar, U08, 61, "rpm", 100, 0.0, 100, 25500, 0
flatSRetard = scalar, U08, 62, "deg", 1.0, 0.0, 0.0, 80, 0
flatSArm = scalar, U08, 63, "rpm", 100, 0.0, 100, 25500, 0
iacCLValues = array, U08, 64, [10], "RPM", 10.0, 0.0, 0, 2550, 0
iacOLStepVal = array, U08, 74, [10], "Steps", 3, 0, 0, 765, 0
iacOLPWMVal = array, U08, 84, [10], "Duty %", 1.0, 0, 0, 100, 0
#if CELSIUS
iacBins = array, U08, 94, [10], "C", 1.0, -40, -40, 215, 0
#else
iacBins = array, U08, 94, [10], "F", 1.8, -22.23, -40, 215, 0
#endif
iacCrankSteps= array, U08, 104, [4], "Steps", 3, 0, 0, 765, 0
iacCrankDuty = array, U08, 108, [4], "Duty %", 1.0, 0, 0, 100, 0
#if CELSIUS
iacCrankBins = array, U08, 112, [4], "C", 1.0, -40, -40, 215, 0
#else
iacCrankBins = array, U08, 112, [4], "F", 1.8, -22.23, -40, 215, 0
#endif
iacAlgorithm = bits , U08, 116, [0:2], "None", "On/Off", "PWM Open loop", "PWM Closed loop", "Stepper Open Loop", "Stepper Closed Loop", "PWM Closed+Open loop", "INVALID"
iacStepTime = bits , U08, 116, [3:5], "INVALID","1", "2", "3", "4", "5", "6","INVALID"
iacChannels = bits, U08, 116, [6:6], "1", "2"
iacPWMdir = bits , U08, 116, [7:7], "Normal", "Reverse"
#if CELSIUS
iacFastTemp = scalar, U08, 117, "C", 1.0, -40, -40, 215, 0
#else
iacFastTemp = scalar, U08, 117, "F", 1.8, -22.23, -40, 215, 0
#endif
iacStepHome = scalar, U08, 118, "Steps", 3, 0, 0, 765, 0
iacStepHyster= scalar, U08, 119, "Steps", 1, 0, 1.0, 10, 0
; Begin fan control vairables
fanInv = bits, U08, 120, [0:0], "No", "Yes"
fanEnable = bits, U08, 120, [1:1], "Off", "On/Off"
fanPin = bits, U08, 120, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
#if CELSIUS
fanSP = scalar, U08, 121, "C", 1.0, -40, -40, 215.0, 0
fanHyster = scalar, U08, 122, "C", 1.0, 0.0, 0.0, 40, 0
#else
fanSP = scalar, U08, 121, "F", 1.8, -22.23, -40, 215.0, 0
fanHyster = scalar, U08, 122, "F", 1.0, 0.0, 0.0, 40, 0
#endif
fanFreq = scalar, U08 , 123, "Hz", 2.0, 0.0, 10, 511, 0
#if CELSIUS
fanPWMBins = array, U08, 124, [4], "C", 1.0, -40, -40, 215, 0
#else
fanPWMBins = array, U08, 124, [4], "F", 1.8, -22.23, -40, 215, 0
#endif
;--------------------------------------------------
;Boost and vvt maps (Page 7)
;--------------------------------------------------
page = 7
boostTable = array, U08, 0,[8x8], { bitStringValue( boostTableLabels, boostType ) }, 2.0, 0.0, 0, {boostTableLimit}, 0
rpmBinsBoost = array, U08, 64,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
tpsBinsBoost = array, U08, 72,[ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
vvtTable = array, U08, 80,[8x8], "%", 1.0, 0.0, 0, 100, 0
rpmBinsVVT = array, U08, 144,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
loadBinsVVT = array, U08, 152,[ 8], { bitStringValue(algorithmUnits , vvtLoadSource) }, 1.0, 0.0, 0.0, 255.0, 0
;Fuel staging Table
stagingTable = array, U08, 160, [8x8], "%", 1.0, 0.0, 0.0, 100.0, 0
rpmBinsStaging= array, U08, 224, [ 8], "RPM", 100.0, 0.0, 100.0, 25500.0, 0
loadBinsStaging= array, U08, 232, [ 8], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
;--------------------------------------------------
;Sequential fuel trim tables (Page 8)
;--------------------------------------------------
page = 8
fuelTrim1Table = array, U08, 0,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim1rpmBins = array, U08, 36,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim1loadBins = array, U08, 42,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim2Table = array, U08, 48,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim2rpmBins = array, U08, 84,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim2loadBins = array, U08, 90,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim3Table = array, U08, 96,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim3rpmBins = array, U08, 132,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim3loadBins = array, U08, 138,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim4Table = array, U08, 144,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim4rpmBins = array, U08, 180,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim4loadBins = array, U08, 186,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim5Table = array, U08, 192,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim5rpmBins = array, U08, 228,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim5loadBins = array, U08, 234,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim6Table = array, U08, 240,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim6rpmBins = array, U08, 276,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim6loadBins = array, U08, 282,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim7Table = array, U08, 288,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim7rpmBins = array, U08, 324,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim7loadBins = array, U08, 330,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
fuelTrim8Table = array, U08, 336,[6x6], "%", 1.0, -128, -50, 50, 0
fuelTrim8rpmBins = array, U08, 372,[ 6], "RPM", 100.0, 0.0, 0, 25500, 0
fuelTrim8loadBins = array, U08, 378,[ 6], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
;--------------------------------------------------
;CANBUS control and Auxillary io(Page 9)
;--------------------------------------------------
page = 9
enable_secondarySerial = bits, U08, 0, [0:0], "Disable", "Enable"
intcan_available = bits, U08, 0, [1:1], "Disable", "Enable"
enable_intcan = bits, U08, 0, [2:2], "Disable", "Enable"
caninput_sel0a = bits, U08, 1, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel0b = bits, U08, 1, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel0extsourcea = bits, U08, 1, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel0extsourceb = bits, U08, 1, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel0extsourcec = bits, U08, 1, [7:7], "INVALID", "Via Internal CAN"
caninput_sel1a = bits, U08, 2, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel1b = bits, U08, 2, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel1extsourcea = bits, U08, 2, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel1extsourceb = bits, U08, 2, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel1extsourcec = bits, U08, 2, [7:7], "INVALID", "Via Internal CAN"
caninput_sel2a = bits, U08, 3, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel2b = bits, U08, 3, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel2extsourcea = bits, U08, 3, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel2extsourceb = bits, U08, 3, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel2extsourcec = bits, U08, 3, [7:7], "INVALID", "Via Internal CAN"
caninput_sel3a = bits, U08, 4, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel3b = bits, U08, 4, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel3extsourcea = bits, U08, 4, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel3extsourceb = bits, U08, 4, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel3extsourcec = bits, U08, 4, [7:7], "INVALID", "Via Internal CAN"
caninput_sel4a = bits, U08, 5, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel4b = bits, U08, 5, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel4extsourcea = bits, U08, 5, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel4extsourceb = bits, U08, 5, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel4extsourcec = bits, U08, 5, [7:7], "INVALID", "Via Internal CAN"
caninput_sel5a = bits, U08, 6, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel5b = bits, U08, 6, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel5extsourcea = bits, U08, 6, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel5extsourceb = bits, U08, 6, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel5extsourcec = bits, U08, 6, [7:7], "INVALID", "Via Internal CAN"
caninput_sel6a = bits, U08, 7, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel6b = bits, U08, 7, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel6extsourcea = bits, U08, 7, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel6extsourceb = bits, U08, 7, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel6extsourcec = bits, U08, 7, [7:7], "INVALID", "Via Internal CAN"
caninput_sel7a = bits, U08, 8, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel7b = bits, U08, 8, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel7extsourcea = bits, U08, 8, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel7extsourceb = bits, U08, 8, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel7extsourcec = bits, U08, 8, [7:7], "INVALID", "Via Internal CAN"
caninput_sel8a = bits, U08, 9, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel8b = bits, U08, 9, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel8extsourcea = bits, U08, 9, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel8extsourceb = bits, U08, 9, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel8extsourcec = bits, U08, 9, [7:7], "INVALID", "Via Internal CAN"
caninput_sel9a = bits, U08, 10, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel9b = bits, U08, 10, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel9extsourcea = bits, U08, 10, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel9extsourceb = bits, U08, 10, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel9extsourcec = bits, U08, 10, [7:7], "INVALID", "Via Internal CAN"
caninput_sel10a = bits, U08, 11, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel10b = bits, U08, 11, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel10extsourcea = bits, U08, 11, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel10extsourceb = bits, U08, 11, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel10extsourcec = bits, U08, 11, [7:7], "INVALID", "Via Internal CAN"
caninput_sel11a = bits, U08, 12, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel11b = bits, U08, 12, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel11extsourcea = bits, U08, 12, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel11extsourceb = bits, U08, 12, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel11extsourcec = bits, U08, 12, [7:7], "INVALID", "Via Internal CAN"
caninput_sel12a = bits, U08, 13, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel12b = bits, U08, 13, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel12extsourcea = bits, U08, 13, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel12extsourceb = bits, U08, 13, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel12extsourcec = bits, U08, 13, [7:7], "INVALID", "Via Internal CAN"
caninput_sel13a = bits, U08, 14, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel13b = bits, U08, 14, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel13extsourcea = bits, U08, 14, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel13extsourceb = bits, U08, 14, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel13extsourcec = bits, U08, 14, [7:7], "INVALID", "Via Internal CAN"
caninput_sel14a = bits, U08, 15, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel14b = bits, U08, 15, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel14extsourcea = bits, U08, 15, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel14extsourceb = bits, U08, 15, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel14extsourcec = bits, U08, 15, [7:7], "INVALID", "Via Internal CAN"
caninput_sel15a = bits, U08, 16, [0:1], "Off", "INVALID", "Analog_local", "Digital_local"
caninput_sel15b = bits, U08, 16, [2:3], "Off", "External Source", "Analog_local", "Digital_local"
caninput_sel15extsourcea = bits, U08, 16, [5:5], "Via Secondary Serial", "INVALID"
caninput_sel15extsourceb = bits, U08, 16, [6:6], "Via Secondary Serial", "Via Internal CAN"
caninput_sel15extsourcec = bits, U08, 16, [7:7], "INVALID", "Via Internal CAN"
caninput_source_can_address0 = bits, U16, 17, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address1 = bits, U16, 19, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address2 = bits, U16, 21, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address3 = bits, U16, 23, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address4 = bits, U16, 25, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address5 = bits, U16, 27, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address6 = bits, U16, 29, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address7 = bits, U16, 31, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address8 = bits, U16, 33, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address9 = bits, U16, 35, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address10 = bits, U16, 37, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address11 = bits, U16, 39, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address12 = bits, U16, 41, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address13 = bits, U16, 43, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address14 = bits, U16, 45, [0:10], $CAN_ADDRESS_HEX
caninput_source_can_address15 = bits, U16, 47, [0:10], $CAN_ADDRESS_HEX
caninput_source_start_byte0 = bits, U08, 49, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte1 = bits, U08, 50, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte2 = bits, U08, 51, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte3 = bits, U08, 52, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte4 = bits, U08, 53, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte5 = bits, U08, 54, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte6 = bits, U08, 55, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte7 = bits, U08, 56, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte8 = bits, U08, 57, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte9 = bits, U08, 58, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte10 = bits, U08, 59, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte11 = bits, U08, 60, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte12 = bits, U08, 61, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte13 = bits, U08, 62, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte14 = bits, U08, 63, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_start_byte15 = bits, U08, 64, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
caninput_source_num_bytes0 = bits, U16, 65, [0:0], "1", "2"
caninput_source_num_bytes1 = bits, U16, 65, [1:1], "1", "2"
caninput_source_num_bytes2 = bits, U16, 65, [2:2], "1", "2"
caninput_source_num_bytes3 = bits, U16, 65, [3:3], "1", "2"
caninput_source_num_bytes4 = bits, U16, 65, [4:4], "1", "2"
caninput_source_num_bytes5 = bits, U16, 65, [5:5], "1", "2"
caninput_source_num_bytes6 = bits, U16, 65, [6:6], "1", "2"
caninput_source_num_bytes7 = bits, U16, 65, [7:7], "1", "2"
caninput_source_num_bytes8 = bits, U16, 65, [8:8], "1", "2"
caninput_source_num_bytes9 = bits, U16, 65, [9:9], "1", "2"
caninput_source_num_bytes10 = bits, U16, 65, [10:10], "1", "2"
caninput_source_num_bytes11 = bits, U16, 65, [11:11], "1", "2"
caninput_source_num_bytes12 = bits, U16, 65, [12:12], "1", "2"
caninput_source_num_bytes13 = bits, U16, 65, [13:13], "1", "2"
caninput_source_num_bytes14 = bits, U16, 65, [14:14], "1", "2"
caninput_source_num_bytes15 = bits, U16, 65, [15:15], "1", "2"
unused10_67 = scalar, U08, 67, "", 1, 0, 0, 255, 0
unused10_68 = scalar, U08, 68, "", 1, 0, 0, 255, 0
enable_intcandata_out = bits, U08, 69, [0:0], "Off", "On"
canoutput_sel0 = bits, U08, 70, [0:0], "Off", "On"
canoutput_sel1 = bits, U08, 71, [0:0], "Off", "On"
canoutput_sel2 = bits, U08, 72, [0:0], "Off", "On"
canoutput_sel3 = bits, U08, 73, [0:0], "Off", "On"
canoutput_sel4 = bits, U08, 74, [0:0], "Off", "On"
canoutput_sel5 = bits, U08, 75, [0:0], "Off", "On"
canoutput_sel6 = bits, U08, 76, [0:0], "Off", "On"
canoutput_sel7 = bits, U08, 77, [0:0], "Off", "On"
canoutput_param_group = array , U16, 78, [ 8], "", 1, 0, 0, 65535, 0
canoutput_param_start_byte0 = bits, U08, 94, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte1 = bits, U08, 95, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte2 = bits, U08, 96, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte3 = bits, U08, 97, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte4 = bits, U08, 98, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte5 = bits, U08, 99, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte6 = bits, U08, 100, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_start_byte7 = bits, U08, 101, [0:2], "0", "1", "2", "3", "4", "5", "6", "7"
canoutput_param_num_bytes0 = bits, U08, 102, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes1 = bits, U08, 103, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes2 = bits, U08, 104, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes3 = bits, U08, 105, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes4 = bits, U08, 106, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes5 = bits, U08, 107, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes6 = bits, U08, 108, [0:1], "INVALID", "1", "2", "INVALID"
canoutput_param_num_bytes7 = bits, U08, 109, [0:1], "INVALID", "1", "2", "INVALID"
unused10_110 = scalar, U08, 110, "", 1, 0, 0, 255, 0
unused10_111 = scalar, U08, 111, "", 1, 0, 0, 255, 0
unused10_112 = scalar, U08, 112, "", 1, 0, 0, 255, 0
unused10_113 = scalar, U08, 113, "", 1, 0, 0, 255, 0
speeduino_tsCanId = bits, U08, 114, [0:3], $tsCanId_list
true_address = bits, U16, 115, [0:10], $CAN_ADDRESS_HEX
realtime_base_address = bits, U16, 117, [0:10], $CAN_ADDRESS_HEX
obd_address = bits, U16, 119, [0:10], $CAN_ADDRESS_HEX
Auxin0pina = bits, U08, 121, [0:5], $ANALOG_PIN
Auxin1pina = bits, U08, 122, [0:5], $ANALOG_PIN
Auxin2pina = bits, U08, 123, [0:5], $ANALOG_PIN
Auxin3pina = bits, U08, 124, [0:5], $ANALOG_PIN
Auxin4pina = bits, U08, 125, [0:5], $ANALOG_PIN
Auxin5pina = bits, U08, 126, [0:5], $ANALOG_PIN
Auxin6pina = bits, U08, 127, [0:5], $ANALOG_PIN
Auxin7pina = bits, U08, 128, [0:5], $ANALOG_PIN
Auxin8pina = bits, U08, 129, [0:5], $ANALOG_PIN
Auxin9pina = bits, U08, 130, [0:5], $ANALOG_PIN
Auxin10pina = bits, U08, 131, [0:5], $ANALOG_PIN
Auxin11pina = bits, U08, 132, [0:5], $ANALOG_PIN
Auxin12pina = bits, U08, 133, [0:5], $ANALOG_PIN
Auxin13pina = bits, U08, 134, [0:5], $ANALOG_PIN
Auxin14pina = bits, U08, 135, [0:5], $ANALOG_PIN
Auxin15pina = bits, U08, 136, [0:5], $ANALOG_PIN
Auxin0pinb = bits, U08, 137, [0:5], $DIGITAL_PIN
Auxin1pinb = bits, U08, 138, [0:5], $DIGITAL_PIN
Auxin2pinb = bits, U08, 139, [0:5], $DIGITAL_PIN
Auxin3pinb = bits, U08, 140, [0:5], $DIGITAL_PIN
Auxin4pinb = bits, U08, 141, [0:5], $DIGITAL_PIN
Auxin5pinb = bits, U08, 142, [0:5], $DIGITAL_PIN
Auxin6pinb = bits, U08, 143, [0:5], $DIGITAL_PIN
Auxin7pinb = bits, U08, 144, [0:5], $DIGITAL_PIN
Auxin8pinb = bits, U08, 145, [0:5], $DIGITAL_PIN
Auxin9pinb = bits, U08, 146, [0:5], $DIGITAL_PIN
Auxin10pinb = bits, U08, 147, [0:5], $DIGITAL_PIN
Auxin11pinb = bits, U08, 148, [0:5], $DIGITAL_PIN
Auxin12pinb = bits, U08, 149, [0:5], $DIGITAL_PIN
Auxin13pinb = bits, U08, 150, [0:5], $DIGITAL_PIN
Auxin14pinb = bits, U08, 151, [0:5], $DIGITAL_PIN
Auxin15pinb = bits, U08, 152, [0:5], $DIGITAL_PIN
iacStepperInv = bits, U08, 153, [0:0], "No", "Yes"
iacCoolTime = bits, U08, 153, [1:3], "0", "1", "2", "3", "4", "5", "6","INVALID"
blankfield = bits, U08, 153, [4:4], "",""
unused10_153 = bits, U08, 153, [5:7], ""
iacMaxSteps = scalar, U08, 154, "Steps", 3, 0, 0, {iacStepHome-3}, 0
unused10_154 = array, U08, 155, [37], "", 1, 0, 0, 255, 0
page = 10
#if CELSIUS
crankingEnrichBins = array, U08, 0, [4], "C", 1.0, -40, -40, 215, 0
#else
crankingEnrichBins = array, U08, 0, [4], "F", 1.8, -22.23, -40, 215, 0
#endif
crankingEnrichValues= array, U08, 4, [4], "%", 5.0, 0.0, 0, 1275, 0 ; Values for the cranking enrichment curve
rotaryType = bits , U08, 8, [0:1], "FC", "FD", "RX8", "INVALID"
stagingEnabled = bits , U08, 8, [2:2], "Off","On"
stagingMode = bits , U08, 8, [3:3], "Table","Automatic"
EMAPPin = bits, U08, 8, [4:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"
rotarySplitValues = array, U08, 9, [8], "degrees", 1.0, 0.0, 0.0, 40, 0
rotarySplitBins = array, U08, 17, [8], { bitStringValue(algorithmUnits , algorithm) }, 2.0, 0.0, 0.0, {fuelLoadMax}, 0
boostSens = scalar, U16, 25, "", 1, 0, 0, 5000, 0
boostIntv = scalar, U08, 27, "ms", 1, 0, 0, 250, 0
stagedInjSizePri = scalar, U16, 28, "cc/min", 1, 0, 0, 1500, 0
stagedInjSizeSec = scalar, U16, 30, "cc/min", 1, 0, 0, 1500, 0
lnchCtrlTPS = scalar, U08, 32, "%TPS", 1, 0, 0, 100, 0
flexBoostBins = array, U08, 33, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
; The boost range is obviously arbitrary since int16_t has ~32k in both directions
flexBoostAdj = array, S16, 39, [6], "kPa", 1.0, 0.0, -500.0, 500.0, 0
flexFuelBins = array, U08, 51, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
flexFuelAdj = array, U08, 57, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
flexAdvBins = array, U08, 63, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
flexAdvAdj = array, U08, 69, [6], "Deg", 1.0, -40, -40, 215.0, 0
n2o_enable = bits , U08, 75, [0:1], "Off","1 Stage","2 stage", "INVALID"
n2o_arming_pin = bits , U08, 75, [2:7], $IO_Pins_no_def
#if CELSIUS
n2o_minCLT = scalar, U08, 76, "C", 1.0, -40, -40, 215, 0
#else
n2o_minCLT = scalar, U08, 76, "F", 1.8, -22.23, -40, 215, 0
#endif
n2o_maxMAP = scalar, U08, 77, "kPa", 2.0, 0.0, 0.0, 511.0, 0
n2o_minTPS = scalar, U08, 78, "%TPS", 1.0, 0.0, 0.0, 100, 0
n2o_maxAFR = scalar, U08, 79, "AFR", 0.1, 0.0, 0.0, 25.5, 1
n2o_stage1_pin = bits , U08, 80, [0:5], $IO_Pins_no_def
n2o_pin_polarity = bits , U08, 80, [6:6], "HIGH", "LOW"
n2o_unused = bits , U08, 80, [7:7], "No", "Yes"
n2o_stage1_minRPM = scalar, U08, 81, "RPM", 100, 0.0, 1000, 10000, 0
n2o_stage1_maxRPM = scalar, U08, 82, "RPM", 100, 0.0, 1000, 10000, 0
n2o_stage1_adderMin = scalar, U08, 83, "ms", 0.1, 0, 0, 25.5, 1
n2o_stage1_adderMax = scalar, U08, 84, "ms", 0.1, 0, 0, 25.5, 1
n2o_stage1_retard = scalar, U08, 85, "Deg", 1.0, 0.0, 0.0, 250.0, 0
n2o_stage2_pin = bits , U08, 86, [0:5], $IO_Pins_no_def
n2o_stage2_unused = bits , U08, 86, [6:7], "No", "Yes", "INVALID", "INVALID"
n2o_stage2_minRPM = scalar, U08, 87, "RPM", 100, 0.0, 1000, 10000, 0
n2o_stage2_maxRPM = scalar, U08, 88, "RPM", 100, 0.0, 1000, 10000, 0
n2o_stage2_adderMin = scalar, U08, 89, "ms", 0.1, 0, 0, 32, 1
n2o_stage2_adderMax = scalar, U08, 90, "ms", 0.1, 0, 0, 32, 1
n2o_stage2_retard = scalar, U08, 91, "Deg", 1.0, 0.0, 0.0, 250.0, 0
; Knock settings
knock_mode = bits , U08, 92, [0:1], "Off","Digital","Analog", "INVALID"
knock_pin = bits , U08, 92, [2:7], "INVALID", "INVALID", "2", "3", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "18", "19", "20", "21", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
knock_trigger = bits , U08, 93, [0:0], "HIGH", "LOW"
knock_pullup = bits , U08, 93, [1:1], "Off", "Internal pullup"
knock_limiterDisable= bits , U08, 93, [2:2], "No", "Yes"
knock_unused = bits , U08, 93, [3:4], "INVALID", "1", "2", "3"
;Knock detection / filters
knock_count = bits , U08, 93, [5:7], "INVALID", "1", "2", "3", "4", "5", "6", "7"
knock_threshold = scalar, U08, 94, "Volts", 0.1, 0.0, 0.0, 5.0, 1
knock_maxMAP = scalar, U08, 95, "kPa", 2.0, 0.0, 0.0, 511.0, 0
knock_maxRPM = scalar, U08, 96, "RPM", 100.0, 0.0, 0, 10000, 0
knock_window_rpms = array, U08, 97, [6], "RPM", 100.0, 0.0, 0, 10000, 0
knock_window_angle = array, U08, 103, [6], "deg", 1.0, -50, -50, 100, 0
knock_window_dur = array, U08, 109, [6], "deg", 1.0, 0.0, 0, 100, 0 ;Knock window duration
;Retard and recovery
knock_maxRetard = scalar, U08, 115, "Deg", 1.0, 0.0, 0.0, 50, 0
knock_firstStep = scalar, U08, 116, "Deg", 1.0, 0.0, 0.0, 50, 0
knock_stepSize = scalar, U08, 117, "Deg", 1.0, 0.0, 0.0, 50, 0
knock_stepTime = scalar, U08, 118, "Sec", 0.1, 0.0, 0.0, 2.5, 1
knock_duration = scalar, U08, 119, "Sec", 0.1, 0.0, 0.0, 2.5, 1 ;//Time after knock retard starts that it should start recovering
knock_recoveryStepTime = scalar, U08, 120, "Sec", 0.1, 0.0, 0.0, 2.5, 1
knock_recoveryStep = scalar, U08, 121, "Deg", 1.0, 0.0, 0.0, 50, 0
;Things for the 2nd fuel table
fuel2Algorithm = bits, U08, 122, [0:2], $loadSourceNames
fuel2Mode = bits, U08, 122, [3:5], "Off", "Multiplied %", "Added", "Switched - Conditional", "Switched - Input based","INVALID","INVALID","INVALID"
fuel2SwitchVariable = bits, U08, 122, [6:7], "RPM", "MAP", "TPS", "ETH%"
fuel2SwitchValue = scalar, U16, 123, { bitStringValue(fuel2SwitchUnits, fuel2SwitchVariable) }, 1.0, 0.0, 0.0, 9000, 0
fuel2InputPin = bits , U08, 125, [0:5], $IO_Pins_no_def
fuel2InputPolarity = bits , U08, 125, [6:6], "LOW", "HIGH"
fuel2InputPullup = bits , U08, 125, [7:7], "No", "Yes"
;All related to the closed loop VVT control
vvtCLholdDuty = scalar, U08, 126, "%", 1.0, 0.0, 0.0, 100.0, 0
vvtCLKP = scalar, U08, 127, "%", 0.03125, 0.0, 0.0, 7.96, 2 ; * ( 1 byte)
vvtCLKI = scalar, U08, 128, "%", 0.03125, 0.0, 0.0, 7.96, 2 ; * ( 1 byte)
vvtCLKD = scalar, U08, 129, "%", 0.00781, 0.0, 0.0, 1.99, 3 ; * ( 1 byte)
vvtCLMinAng = scalar, S16, 130, "deg", 1.0, 0.0, -360.0, 360.0, 0 ; * ( 2 bytes)
vvtCLMaxAng = scalar, S16, 132, "deg", 1.0, 0.0, -360.0, 360.0, 0 ; * ( 2 bytes)
crankingEnrichTaper = scalar, U08, 134, "s", 0.1, 0.0, 0.0, 25.5, 1
;Pressure transducers
fuelPressureEnable = bits, U08, 135, [0:0], "Off", "On"
oilPressureEnable = bits, U08, 135, [1:1], "Off", "On"
oilPressureProtEnbl = bits, U08, 135, [2:2], "Off", "On"
fuelPressurePin = bits, U08, 136, [0:3], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"
oilPressurePin = bits, U08, 136, [4:7], "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"
fuelPressureMin = scalar, S08, 137, "psi", 1.0, 0.0, -100, 127, 0 ;Note signed int
fuelPressureMax = scalar, U08, 138, "psi", 1.0, 0.0, 0.0, 255, 0
oilPressureMin = scalar, S08, 139, "psi", 1.0, 0.0, -100, 127, 0 ;Note signed int
oilPressureMax = scalar, U08, 140, "psi", 1.0, 0.0, 0.0, 255, 0
oilPressureProtRPM = array, U08, 141, [ 4], "RPM", 100.0, 0.0, 100.0, 25500, 0
oilPressureProtMins = array, U08, 145, [ 4], "psi", 1.0, 0.0, 0.0, 255, 0
wmiEnabled = bits, U08, 149, [0:0], "Off", "On"
wmiMode = bits, U08, 149, [1:2], "Simple", "Proportional", "Openloop", "Closedloop"
wmiAdvEnabled = bits, U08, 149, [7:7], "Off", "On"
wmiTPS = scalar, U08, 150, "%TPS", 1.0, 0.0, 0.0, 100, 0
wmiRPM = scalar, U08, 151, "RPM", 100.0, 0.0, 0, 10000, 0
wmiMAP = scalar, U08, 152, "kPa", 2.0, 0.0, 0.0, 511.0, 0
wmiMAP2 = scalar, U08, 153, "kPa", 2.0, 0.0, 0.0, 511.0, 0
#if CELSIUS
wmiIAT = scalar, U08, 154, "C", 1.0, -40, -40, 215, 0
#else
wmiIAT = scalar, U08, 154, "F", 1.8, -22.23, -40, 215, 0
#endif
wmiOffset = scalar, S08, 155, "ms", 1.0, 0.0, -12.7, 12.7, 0 ;Note signed int
wmiIndicatorEnabled = bits, U08, 156, [0:0], "Off", "On"
wmiIndicatorPin = bits, U08, 156, [1:6], "Board Default", $DIGITAL_PIN
wmiIndicatorPolarity = bits , U08, 156, [7:7], "Normal", "Inverted"
wmiEmptyEnabled = bits, U08, 157, [0:0], "Off", "On"
wmiEmptyPin = bits, U08, 157, [1:6], "Board Default", $DIGITAL_PIN
wmiEmptyPolarity = bits , U08, 157, [7:7], "Normal", "Inverted"
wmiEnabledPin = bits, U08, 158, [0:5], "Board Default", $DIGITAL_PIN
wmiAdvBins = array, U08, 159, [6], "kPa", 2.0, 0.0, 0.0, 511.0, 0
wmiAdvAdj = array, U08, 165, [6], "Deg", 1.0, -40, -40, 215.0, 0
vvtCLminDuty = scalar, U08, 171, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles when using closed loop
vvtCLmaxDuty = scalar, U08, 172, "%", 1.0, 0.0, 0.0, 100.0, 0
vvt2Pin = bits , U08, 173, [0:5], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
;Fuel temperature correction
#if CELSIUS
fuelTempBins = array, U08, 174, [6], "C", 1.0, -40, -40, 215, 0
#else
fuelTempBins = array, U08, 174, [6], "F", 1.8, -22.23, -40, 215, 0
#endif
fuelTempValues = array, U08, 180, [6], "%", 1.0, 0.0, 0, 255, 0
;Things for the 2nd spark table
spark2Algorithm = bits, U08, 186, [0:2], $loadSourceNames
spark2Mode = bits, U08, 186, [3:5], "Off", "Multiplied %", "Added", "Switched - Conditional", "Switched - Input based","INVALID","INVALID","INVALID"
spark2SwitchVariable = bits, U08, 186, [6:7], "RPM", "MAP", "TPS", "ETH%"
spark2SwitchValue = scalar, U16, 187, { bitStringValue(fuel2SwitchUnits, spark2SwitchVariable) }, 1.0, 0.0, 0.0, 9000, 0
spark2InputPin = bits , U08, 189, [0:5], $IO_Pins_no_def
spark2InputPolarity = bits , U08, 189, [6:6], "LOW", "HIGH"
spark2InputPullup = bits , U08, 189, [7:7], "No", "Yes"
unused11_190_191 = array, U08, 190, [2], "RPM", 100.0, 0.0, 100, 25500, 0
;Page 11 is the fuel map and axis bins only
page = 11
; name = bits, type, offset, bits
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
; name = scalar, type, offset, units, scale, translate, lo, hi, digits
veTable2 = array, U08, 0, [16x16],"%", 1.0, 0.0, 0.0, 255.0, 0
fuelRPM2Bins = array, U08, 256, [ 16], "RPM", 100.0, 0.0, 0.0, 25500.0, 0
fuelLoad2Bins = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , fuel2Algorithm) }, 2.0, 0.0, 0.0, { fuel2LoadMax }, 0
;--------------------------------------------------
;Water methanol inejction maps (Page 12)
;--------------------------------------------------
page = 12
wmiTable = array, U08, 0,[8x8], "%", 1.0, 0.0, 0.0, 255.0, 0
rpmBinsWMI = array, U08, 64,[ 8], "RPM", 100.0, 0.0, 100, 25500, 0
mapBinsWMI = array, U08, 72,[ 8], "kPa", 2.0, 0.0, 0.0, 511.0, 0
;VVT2 map should be here in the middle
dwellTable = array, U08, 160,[4x4], "ms", 0.1, 0.0, 0.1, 8.0, 1
rpmBinsDwell = array, U08, 176,[ 4], "RPM", 100.0, 0.0, 100, 25500, 0
mapBinsDwell = array, U08, 180,[ 4], "kPa", 2.0, 0.0, 0.0, 511.0, 0
;Page 13 is the programmable outputs
page = 13
outputInverted0 = bits, U08, 0, [0:0], "Active high", "Active low"
outputInverted1 = bits, U08, 0, [1:1], "Active high", "Active low"
outputInverted2 = bits, U08, 0, [2:2], "Active high", "Active low"
outputInverted3 = bits, U08, 0, [3:3], "Active high", "Active low"
outputInverted4 = bits, U08, 0, [4:4], "Active high", "Active low"
outputInverted5 = bits, U08, 0, [5:5], "Active high", "Active low"
outputInverted6 = bits, U08, 0, [6:6], "Active high", "Active low"
outputInverted7 = bits, U08, 0, [7:7], "Active high", "Active low"
unused12_1 = scalar, U08, 1, "bits", 1.000, 0.000
outputPin = array, U08, 2, [ 8], "", 1.0, 0.0, 0.0, 255.0, 0
outputPin0 = bits, U08, 2, [0:7], $comp_IO_Pins
outputPin1 = bits, U08, 3, [0:7], $comp_IO_Pins
outputPin2 = bits, U08, 4, [0:7], $comp_IO_Pins
outputPin3 = bits, U08, 5, [0:7], $comp_IO_Pins
outputPin4 = bits, U08, 6, [0:7], $comp_IO_Pins
outputPin5 = bits, U08, 7, [0:7], $comp_IO_Pins
outputPin6 = bits, U08, 8, [0:7], $comp_IO_Pins
outputPin7 = bits, U08, 9, [0:7], $comp_IO_Pins
outputDelay = array, U08, 10, [ 8], "S", 0.1, 0.0, 0.0, 25.5, 1
firstDataIn = array, U08, 18, [ 8], "", 1.0, 0.0, 0.0, 65535.0, 0
firstDataIn0= bits, U08, 18, [0:7], $fullStatus_def
firstDataIn1= bits, U08, 19, [0:7], $fullStatus_def
firstDataIn2= bits, U08, 20, [0:7], $fullStatus_def
firstDataIn3= bits, U08, 21, [0:7], $fullStatus_def
firstDataIn4= bits, U08, 22, [0:7], $fullStatus_def
firstDataIn5= bits, U08, 23, [0:7], $fullStatus_def
firstDataIn6= bits, U08, 24, [0:7], $fullStatus_def
firstDataIn7= bits, U08, 25, [0:7], $fullStatus_def
secondDataIn = array, U08, 26, [ 8], "", 1.0, 0.0, 0.0, 65535.0, 0
secondDataIn0= bits, U08, 26, [0:7], $fullStatus_def
secondDataIn1= bits, U08, 27, [0:7], $fullStatus_def
secondDataIn2= bits, U08, 28, [0:7], $fullStatus_def
secondDataIn3= bits, U08, 29, [0:7], $fullStatus_def
secondDataIn4= bits, U08, 30, [0:7], $fullStatus_def
secondDataIn5= bits, U08, 31, [0:7], $fullStatus_def
secondDataIn6= bits, U08, 32, [0:7], $fullStatus_def
secondDataIn7= bits, U08, 33, [0:7], $fullStatus_def
unused13_35_49 = array, U08, 34, [ 16], "%", 1.0, 0.0, 0.0, 100.0, 0
firstTarget = array, S16, 50, [ 8], "", 1.0, 0.0, -32768.0, 32768.0, 0
secondTarget = array, S16, 66, [ 8], "", 1.0, 0.0, -32768.0, 32768.0, 0
firstCompType0 = bits, U08, 82, [0:2], $comparator_def
secondCompType0 = bits, U08, 82, [3:5], $comparator_def
bitwise0 = bits, U08, 82, [6:7], $bitwise_def
firstCompType1 = bits, U08, 83, [0:2], $comparator_def
secondCompType1 = bits, U08, 83, [3:5], $comparator_def
bitwise1 = bits, U08, 83, [6:7], $bitwise_def
firstCompType2 = bits, U08, 84, [0:2], $comparator_def
secondCompType2 = bits, U08, 84, [3:5], $comparator_def
bitwise2 = bits, U08, 84, [6:7], $bitwise_def
firstCompType3 = bits, U08, 85, [0:2], $comparator_def
secondCompType3 = bits, U08, 85, [3:5], $comparator_def
bitwise3 = bits, U08, 85, [6:7], $bitwise_def
firstCompType4 = bits, U08, 86, [0:2], $comparator_def
secondCompType4 = bits, U08, 86, [3:5], $comparator_def
bitwise4 = bits, U08, 86, [6:7], $bitwise_def
firstCompType5 = bits, U08, 87, [0:2], $comparator_def
secondCompType5 = bits, U08, 87, [3:5], $comparator_def
bitwise5 = bits, U08, 87, [6:7], $bitwise_def
firstCompType6 = bits, U08, 88, [0:2], $comparator_def
secondCompType6 = bits, U08, 88, [3:5], $comparator_def
bitwise6 = bits, U08, 88, [6:7], $bitwise_def
firstCompType7 = bits, U08, 89, [0:2], $comparator_def
secondCompType7 = bits, U08, 89, [3:5], $comparator_def
bitwise7 = bits, U08, 89, [6:7], $bitwise_def
candID = array, U16, 90, [ 8], "", 1.0, 0.0, 0.0, 255.0, 0
unused12_106_127= array, U08, 106, [ 22], "%", 1.0, 0.0, 0.0, 255, 0
;--------------------------------------------------
;Second ignition map (Page 14)
;--------------------------------------------------
page = 14
advTable2 = array, U08, 0,[16x16], "deg", 1.0, -40, -40, 215.0, 0
rpmBins3 = array, U08, 256,[ 16], "RPM", 100.0, 0.0, 100, 25500, 0
mapBins2 = array, U08, 272, [ 16], { bitStringValue(algorithmUnits , ignAlgorithm) }, 2.0, 0.0, 0.0, { ign2LoadMax }, 0 ; This name has to be used in order for the table to show up in MLVs table. I can't find the regexs that make this work :(
;-------------------------------------------------------------------------------
[EventTriggers]
triggeredPageRefresh = 1, { vssRefresh > 0 }
[ConstantsExtensions]
requiresPowerCycle = nCylinders
requiresPowerCycle = pinLayout
requiresPowerCycle = fanPin
requiresPowerCycle = reqFuel
requiresPowerCycle = numTeeth
requiresPowerCycle = missingTeeth
requiresPowerCycle = trigPatternSec
requiresPowerCycle = injOpen
requiresPowerCycle = IgInv
requiresPowerCycle = fanInv
requiresPowerCycle = boostEnabled
requiresPowerCycle = vvtEnabled
; requiresPowerCycle = vvtChannels
requiresPowerCycle = boostFreq
requiresPowerCycle = vvtFreq
requiresPowerCycle = idleFreq
requiresPowerCycle = sparkMode
requiresPowerCycle = launchPin
requiresPowerCycle = launchEnable
requiresPowerCycle = launchHiLo
requiresPowerCycle = flexEnabled
requiresPowerCycle = vssMode
requiresPowerCycle = oddfire2
requiresPowerCycle = oddfire3
requiresPowerCycle = oddfire4
requiresPowerCycle = iacCLminDuty
requiresPowerCycle = iacCLmaxDuty
requiresPowerCycle = useExtBaro
requiresPowerCycle = useEMAP
requiresPowerCycle = baroPin
requiresPowerCycle = rotaryType
requiresPowerCycle = stagedInjSizePri
requiresPowerCycle = stagedInjSizeSec
requiresPowerCycle = stagingEnabled
requiresPowerCycle = resetControl
requiresPowerCycle = resetControlPin
requiresPowerCycle = n2o_enable
requiresPowerCycle = n2o_arming_pin
requiresPowerCycle = n2o_pin_polarity
requiresPowerCycle = knock_mode
requiresPowerCycle = knock_pin
requiresPowerCycle = knock_trigger
requiresPowerCycle = knock_pullup
requiresPowerCycle = idleUpEnabled
requiresPowerCycle = idleUpOutputEnabled
requiresPowerCycle = CTPSEnabled
requiresPowerCycle = CTPSPin
requiresPowerCycle = CTPSPolarity
requiresPowerCycle = legacyMAP
requiresPowerCycle = fuel2InputPin
requiresPowerCycle = fuel2InputPolarity
requiresPowerCycle = wmiEnabled
requiresPowerCycle = wmiEmptyEnabled
requiresPowerCycle = wmiEmptyPin
requiresPowerCycle = wmiEmptyPolarity
requiresPowerCycle = wmiIndicatorEnabled
requiresPowerCycle = wmiIndicatorPin
requiresPowerCycle = wmiIndicatorPolarity
requiresPowerCycle = vvtCLminDuty
requiresPowerCycle = vvtCLmaxDuty
requiresPowerCycle = caninput_sel0a
requiresPowerCycle = caninput_sel0b
requiresPowerCycle = caninput_sel1a
requiresPowerCycle = caninput_sel1b
requiresPowerCycle = caninput_sel2a
requiresPowerCycle = caninput_sel2b
requiresPowerCycle = caninput_sel3a
requiresPowerCycle = caninput_sel3b
requiresPowerCycle = caninput_sel4a
requiresPowerCycle = caninput_sel4b
requiresPowerCycle = caninput_sel5a
requiresPowerCycle = caninput_sel5b
requiresPowerCycle = caninput_sel6a
requiresPowerCycle = caninput_sel6b
requiresPowerCycle = caninput_sel7a
requiresPowerCycle = caninput_sel7b
requiresPowerCycle = caninput_sel8a
requiresPowerCycle = caninput_sel8b
requiresPowerCycle = caninput_sel9a
requiresPowerCycle = caninput_sel9b
requiresPowerCycle = caninput_sel10a
requiresPowerCycle = caninput_sel10b
requiresPowerCycle = caninput_sel11a
requiresPowerCycle = caninput_sel11b
requiresPowerCycle = caninput_sel12a
requiresPowerCycle = caninput_sel12b
requiresPowerCycle = caninput_sel13a
requiresPowerCycle = caninput_sel13b
requiresPowerCycle = caninput_sel14a
requiresPowerCycle = caninput_sel14b
requiresPowerCycle = caninput_sel15a
requiresPowerCycle = caninput_sel15b
requiresPowerCycle = outputPin
defaultValue = pinLayout, 1
defaultValue = TrigPattern, 0
defaultValue = useResync, 1
defaultValue = trigPatternSec, 0
defaultValue = sparkMode, 0
defaultValue = injAng, 355 355 355 355
defaultValue = injAngRPM, 500 2000 4500 6500
defaultValue = nInjectors, 4
defaultValue = dutyLim, 80
defaultValue = mapMin, 10
defaultValue = mapMax, 260
defaultValue = baroMin, 10
defaultValue = baroMax, 260
defaultValue = useEMAP, 0
defaultValue = EMAPMin, 10
defaultValue = EMAPMax, 260
defaultValue = fpPrime, 3
defaultValue = TrigFilter, 0
defaultValue = ignCranklock,0
defaultValue = multiplyMAP, 0
defaultValue = includeAFR, 0
defaultValue = incorporateAFR, 0
defaultValue = stoich, 14.7
defaultValue = flexEnabled, 0
defaultValue = oddfire2, 0
defaultValue = oddfire3, 0
defaultValue = oddfire4, 0
defaultValue = flexFreqLow, 50
defaultValue = flexFreqHigh,150
defaultValue = fuelPumpPin, 0
defaultValue = fanPin, 0
defaultValue = iacCLminDuty,0
defaultValue = iacCLmaxDuty,100
defaultValue = iacTPSlimit, 5
defaultValue = iacRPMlimitHysteresis, 200
defaultValue = boostMinDuty,0
defaultValue = boostMaxDuty,100
defaultValue = boostSens, 2000
defaultValue = boostIntv, 30
defaultValue = sparkDur, 1.0
defaultValue = fixAngEnable,0
defaultValue = n2o_enable, 0
defaultValue = speeduino_tsCanId, 0
defaultValue = true_address, 256
defaultValue = realtime_base_address, 336
defaultValue = VVTasOnOff, 0
defaultValue = stagingEnabled, 0
defaultValue = lnchCtrlTPS, 0
defaultValue = resetControl, 0
defaultValue = bootloaderCaps, 0
defaultValue = aeTaperMin, 1000
defaultValue = aeTaperMax, 5000
defaultValue = aeColdPct, 100
defaultValue = aeColdTaperMin, 0
defaultValue = aeColdTaperMax, 60
defaultValue = aeMode, 0 ;Set aeMode to TPS
defaultValue = batVoltCorrect, 0
defaultValue = aeApplyMode, 0
defaultValue = legacyMAP, 0
defaultValue = battVCorMode, 1
defaultValue = idleAdvEnabled, 0 ;Idle advance control turned off
defaultValue = aseTaperTime, 0.0
defaultValue = dfcoDelay, 0.1
defaultValue = idleTaperTime, 1.0
defaultValue = dfcoDelay, 0.1
defaultValue = dfcoMinCLT, 25
defaultValue = crankingEnrichTaper, 0.1
defaultValue = boostCutEnabled, 1
defaultValue = primingDelay, 0.5
defaultValue = vvtCLminDuty, 0
defaultValue = vvtCLmaxDuty, 80 ;80% is a completely arbitrary amount for the max duty cycle, but seems inline with most VVT documentation
;Default pins
defaultValue = fanPin, 0
defaultValue = vvt1Pin, 0
defaultValue = launchPin, 0
defaultValue = boostPin, 0
defaultValue = fuelPumpPin, 0
defaultValue = tachoPin, 0
defaultValue = tachoDuration, 2
defaultValue = useTachoSweep, 0
defaultValue = tachoSweepMaxRPM, 6000
defaultValue = perToothIgn, 0
defaultValue = resetControlPin, 0
;Default ADC filter values
defaultValue = ADCFILTER_TPS, 50
defaultValue = ADCFILTER_CLT, 180
defaultValue = ADCFILTER_IAT, 180
defaultValue = ADCFILTER_O2, 100
defaultValue = ADCFILTER_BAT, 128
defaultValue = ADCFILTER_MAP, 20 ;This is only used on Instantaneous MAP readings and is intentionally very weak to allow for faster response
defaultValue = ADCFILTER_BARO, 64
;Force the controller priority for the filters (Controller knows best here when in doubt)
controllerPriority = ADCFILTER_TPS
controllerPriority = ADCFILTER_CLT
controllerPriority = ADCFILTER_IAT
controllerPriority = ADCFILTER_O2
controllerPriority = ADCFILTER_BAT
controllerPriority = ADCFILTER_MAP
controllerPriority = ADCFILTER_BARO
;Again, force the setting from the controller for the trigger edges. This is particularly useful for the Oct 2018 update where the names of the dges changed
controllerPriority = TrigEdge
controllerPriority = TrigEdgeSec
;VSS Ratios and calibration need controller priority so they can be set with the command buttons
controllerPriority = vssPulsesPerKm
controllerPriority = vssRatio1
controllerPriority = vssRatio2
controllerPriority = vssRatio3
controllerPriority = vssRatio4
controllerPriority = vssRatio5
controllerPriority = vssRatio6
;These are the limits for each of the load algorithms (Refer to the PC Variables section)
;Order is: MAP TPS IMAP/EMAP ITB UNUSED UNUSED UNUSED UNUSED
defaultValue = algorithmLimits, 511 100 511 511 100 100 100 100
defaultValue = fuelLoadMax, 511
defaultValue = ignLoadMax, 511
defaultValue = fuel2LoadMax, 511
defaultValue = ign2LoadMax, 511
;VSS related settings
defaultValue = vssRatio1, 10.0
defaultValue = vssRatio2, 16.0
defaultValue = vssRatio3, 22.0
defaultValue = vssRatio4, 28.0
defaultValue = vssRatio5, 34.0
defaultValue = vssRatio6, 40.0
controllerPriority = vssRatio1
controllerPriority = vssRatio2
controllerPriority = vssRatio3
controllerPriority = vssRatio4
controllerPriority = vssRatio5
controllerPriority = vssRatio6
defaultValue = vssPulsesPerKm, 3000
defaultValue = vssSmoothing, 50
;pinLayout = bits, U08, 15, [0:7], "Speeduino v0.1", "Speeduino v0.2", "Speeduino v0.3", "Speeduino v0.4", "INVALID", "INVALID", "01-05 MX5 PNP", "INVALID", "96-97 MX5 PNP", "NA6 MX5 PNP", "Turtana PCB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Plazomat I/O 0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Daz V6 Shield 0.1", "BMW PnP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NO2C", "UA4C", "INVALID", "INVALID", "INVALID", "DIY-EFI CORE4 v1.0", "INVALID", "INVALID", "INVALID", "INVALID", "dvjcodec Teensy RevA", "dvjcodec Teensy RevB", "INVALID", "INVALID", "INVALID", "DropBear", "INVALID", "INVALID", "INVALID", "INVALID", "Black STM32F407VET6 V0.1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
defaultValue = boardFuelOutputs, 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 4 4 4 4 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
defaultValue = boardIgnOutputs, 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 4 4 4 4 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
defaultValue = boardHasRTC, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
controllerPriority = bootloaderCaps
defaultValue = AUXin00Alias, Aux0
defaultValue = AUXin01Alias, Aux1
defaultValue = AUXin02Alias, Aux2
defaultValue = AUXin03Alias, Aux3
defaultValue = AUXin04Alias, Aux4
defaultValue = AUXin05Alias, Aux5
defaultValue = AUXin06Alias, Aux6
defaultValue = AUXin07Alias, Aux7
defaultValue = AUXin08Alias, Aux8
defaultValue = AUXin09Alias, Aux9
defaultValue = AUXin10Alias, Aux10
defaultValue = AUXin11Alias, Aux11
defaultValue = AUXin12Alias, Aux12
defaultValue = AUXin13Alias, Aux13
defaultValue = AUXin14Alias, Aux14
defaultValue = AUXin15Alias, Aux15
defaultValue = prgm_out00Alias, PrgmOut0
defaultValue = prgm_out01Alias, PrgmOut1
defaultValue = prgm_out02Alias, PrgmOut2
defaultValue = prgm_out03Alias, PrgmOut3
defaultValue = prgm_out04Alias, PrgmOut4
defaultValue = prgm_out05Alias, PrgmOut5
defaultValue = prgm_out06Alias, PrgmOut6
defaultValue = prgm_out07Alias, PrgmOut7
defaultValue = rpmwarn, 3000
defaultValue = rpmdang, 5000
defaultValue = rpmhigh, 8000
defaultValue = mapwarn, 200
defaultValue = mapdang, 245
defaultValue = maphigh, 255
#if LAMBDA
defaultValue = wueAFR, -0.136 -0.102 -0.082 -0.068 -0.054 -0.041 -0.027 -0.014 -0.007 0.000
#else
defaultValue = wueAFR, -2.0 -1.5 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 -0.1 0.0
#endif
[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_separator
;
; 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 = "Settings"
subMenu = engine_constants, "Engine Constants"
subMenu = injChars, "Injector Characteristics"
subMenu = triggerSettings, "Trigger Setup"
;subMenu = OLED, "OLED Setup"
subMenu = airdensity_curve, "IAT Density"
subMenu = baroFuel_curve, "Barometric Correction"
subMenu = reset_control, "Reset Control"
subMenu = std_separator
subMenu = gaugeLimits, "Gauge Limits"
subMenu = std_separator
subMenu = io_summary, "I/O Summary"
subMenu = std_separator
subMenu = prgm_out_config, "Programmable outputs"
menu = "&Tuning"
subMenu = std_realtime, "Realtime Display"
subMenu = accelEnrichments, "Acceleration Enrichment"
subMenu = egoControl, "AFR/O2", 3
subMenu = RevLimiterS, "Engine Protection", 2
subMenu = flexFueling, "Flex Fuel", 2
subMenu = veTableDialog, "VE Table", 0
subMenu = sparkTbl, "Spark Table", 2
subMenu = afrTable1Tbl, "AFR Table", 5
subMenu = std_separator
subMenu = fuelTable2Dialog, "Second fuel Table", 11
subMenu = sparkTable2Dialog, "Second spark Table", 14
subMenu = std_separator
subMenu = inj_trimad, "Sequential fuel trim (1-4)", 9
subMenu = inj_trimad_B, "Sequential fuel trim (5-8)", 9, { nFuelChannels >= 5 }
subMenu = std_separator
subMenu = stagingTableDialog, "Staged Injection", 10, { nCylinders <= 4 || injType == 1 } ; Can't do staging on more than 4 cylinder engines unless TBI is used
subMenu = std_separator
subMenu = fuelTemp_curve, "Fuel Temp Correction", { flexEnabled }
menu = "&Spark"
subMenu = sparkSettings, "Spark Settings"
subMenu = sparkTbl, "Spark Table", 2
subMenu = dwellSettings, "Dwell settings"
subMenu = dwell_correction_curve, "Dwell Compensation"
subMenu = dwell_map, "Dwell Map", { useDwellMap }
subMenu = iat_retard_curve, "IAT Retard"
subMenu = clt_advance_curve, "Cold Advance"
;subMenu = knockSettings, "Knock Settings"
subMenu = rotary_ignition, "Rotary Ignition", { sparkMode == 4 }
menu = "&Startup/Idle"
subMenu = crankPW, "Cranking Settings"
subMenu = primePW, "Priming Pulsewidth"
subMenu = warmup, "Warmup Enrichment"
subMenu = ASE, "Afterstart Enrichment (ASE)"
subMenu = std_separator
subMenu = idleSettings, "Idle Control"
subMenu = iacClosedLoop_curve, "Idle - RPM targets", 7, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || idleAdvEnabled >= 1 }
subMenu = iacPwm_curve, "Idle - PWM Duty Cycle", 7, { iacAlgorithm == 2 || iacAlgorithm == 6}
subMenu = iacPwmCrank_curve, "Idle - PWM Cranking Duty Cycle", 7, { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6}
subMenu = iacStep_curve, "Idle - Stepper Motor", 7, { iacAlgorithm == 4 }
subMenu = iacStepCrank_curve, "Idle - Stepper Motor Cranking", 7, { iacAlgorithm == 4 || iacAlgorithm == 5 }
subMenu = std_separator
subMenu = idleUpSettings, "Idle Up Settings", { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 4 || iacAlgorithm == 5 || iacAlgorithm == 6 }
subMenu = std_separator
subMenu = idleAdvanceSettings, "Idle Advance Settings"
menu = "&Accessories"
subMenu = fanSettings, "Thermo Fan"
subMenu = LaunchControl, "Launch Control / Flat Shift"
subMenu = fuelpump, "Fuel Pump"
subMenu = NitrousControl, "Nitrous"
subMenu = vssSettings, "VSS and Gear detection"
subMenu = std_separator
subMenu = boostSettings, "Boost Control"
subMenu = boostLoad, "Boost Targets/Load", 8, { boostEnabled }
subMenu = std_separator
subMenu = vvtSettings, "VVT Control"
subMenu = vvtTbl, "VVT duty cycle", 8, { vvtEnabled }
subMenu = std_separator
subMenu = wmiSettings, "WMI Control", { !vvtEnabled }
subMenu = wmiTbl, "WMI duty cycle", 8, { !vvtEnabled && wmiEnabled && wmiMode > 1 }
subMenu = std_separator
subMenu = tacho, "Tacho Output"
subMenu = std_separator
#if CAN_COMMANDS
subMenu = can_serial3IO, "Canbus/Secondary Serial IO Interface"
subMenu = std_separator
subMenu = Canin_config, "External Auxillary Input Channel Configuration", {enable_secondarySerial || (enable_intcan && intcan_available)}
subMenu = Auxin_config, "Local Auxillary Input Channel Configuration"
;subMenu = std_separator
;subMenu = Canout_config, "Canbus Output Configuration"
#else
subMenu = serial3IO, "Canbus/Secondary Serial IO Interface"
subMenu = std_separator
subMenu = Canin_config, "External Auxillary Input Channel Configuration", {enable_secondarySerial || (enable_intcan && intcan_available)}
subMenu = Auxin_config, "Local Auxillary Input Channel Configuration"
#endif
subMenu = pressureSensors, "Fuel/Oil pressure"
menuDialog = main
menu = "Tools"
subMenu = mapCal, "Calibrate Pressure Sensors"
subMenu = batCal, "Calibrate Voltage Reading"
subMenu = std_ms2gentherm, "Calibrate Temperature Sensors", 0
subMenu = std_ms2geno2, "Calibrate AFR Sensor", { egoType > 0 }
subMenu = sensorFilters, "Set analog sensor filters"
menu = "Data Logging"
;subMenu = sdcard_datalog, "SD Card Datalogging"
;subMenu = std_ms3SdConsole, "Browse / Import SD Card", { boardHasRTC > 0 }
menuDialog = main
menu = "3D &Tuning Maps"
subMenu = veTable1Map, "Fuel Table"
subMenu = sparkMap, "Spark Table", 3
subMenu = afrTable1Map, "AFR Target Table"
#if enablehardware_test
menuDialog = main
menu = "Hardware Testing"
subMenu = outputtest1, "Test Output Hardware"
subMenu = stm32cmd, "STM32 Commands"
;subMenu = rtc_settings, "Setup realtime clock"
#endif
menu = "Help"
subMenu = helpGeneral, "Speeduino Help"
;-------------------------------------------------------------------------------
[SettingContextHelp]
; constantName = "Help Text"
; These provide the context help in the dialog when these variables are used
nCylinders = "Cylinder count"
alternate = "Whether or not the injectors should be fired at the same time. This setting is ignored when Sequential is selected below, however it will still affect the req_fuel value."
engineType = "Engines with an equal number of degrees between all firings (This is most engines) should select Even fire. Some 2 and 6 cylinder engines are Odd fire however."
twoStroke = "Four-Stroke (most engines), Two-stroke."
nInjectors = "Number of primary injectors."
mapSample = "The method used for calculating the MAP reading\nFor 1-2 Cylinder engines, Cycle Minimum is recommended.\nFor more than 2 cylinders Cycle Average is recommended"
stoich = "The stoichiometric ration of the fuel being used. For flex fuel, choose the primary fuel"
injLayout = "The injector layout and timing to be used. Options are: \n 1. Paired - 2 injectors per output. Outputs active is equal to half the number of cylinders. Outputs are timed over 1 crank revolution. \n 2. Semi-sequential: Same as paired except that injector channels are mirrored (1&4, 2&3) meaning the number of outputs used are equal to the number of cylinders. Only valid for 4 cylinders or less. \n 3. Banked: 2 outputs only used. \n 4. Sequential: 1 injector per output and outputs used equals the number of cylinders. Injection is timed over full cycle. "
TrigPattern = "The type of input trigger decoder to be used."
useResync = "If enabled, sync will be rechecked once every full cycle from the cam input. This is good for accuracy, however if your cam input is noisy then this can cause issues."
trigPatternSec = "Cam mode/type also known as Secondary Trigger Pattern."
numTeeth = "Number of teeth on Primary Wheel."
TrigSpeed = "Primary trigger speed."
missingTeeth = "Number of Missing teeth on Primary Wheel."
TrigAng = "The Angle ATDC when tooth No:1 on the primary wheel passes the primary sensor. The range of this field is -360 to +360 degrees."
TrigAngMul = "A multiplier used by non-360 degree tooth wheels (i.e. Wheels where the tooth count doesn't divide evenly into 360. Usage: (360 * <multiplier>) / tooth_count = Whole number"
SkipCycles = "The number of revolutions that will be skipped during cranking before the injectors and coils are fired."
TrigEdge = "The Trigger edge of the primary sensor.\nLeading.\nTrailing."
TrigEdgeSec = "The Trigger edge of the secondary (Cam) sensor.\nLeading.\nTrailing."
TrigFilter = "Tuning of the trigger filter algorithm. The more aggressive the setting, the more noise will be removed, however this increases the chance of some true readings being filtered out (False positive). Medium is safe for most setups. Only select 'Aggressive' if no other options are working"
sparkMode = "Wasted Spark: Ignition outputs are on the channels <= half the number of cylinders. Eg 4 cylinder outputs on IGN1 and IGN2.\nSingle Channel: All ignition pulses are output on IGN1.\nWasted COP: Ignition pulses are output on all ignition channels up to the number of cylinders. Eg 4 cylinder outputs on all ignition channels. Note that your board needs to have same number of igntion outputs as cylinders to be able to run this"
IgInv = "Whether the spark fires when the ignition signal goes high or goes low. Nearly all ignition systems use 'Going Low' but please verify this as damage to coils can result from the incorrect selection. (NOTE: THIS IS NOT MEGASQUIRT. THIS SETTING IS USUALLY THE OPPOSITE OF WHAT THEY USE!)"
sparkDur = "The duration of the spark at full dwell. Typically around 1ms"
fixAngEnable = "If enabled, timing will be locked/fixed and the ignition map will be ignored. Note that this value will be overriden by the fixed cranking value when cranking"
FixAng = "Timing will be locked at this value if the above is enabled"
crankRPM = "The cranking RPM threshold. When RPM is lower than this value (and above 0) the system will be considered to be cranking"
tpsflood = "Keep throttle over this value to disable the priming pulse and cranking fuel. Used to prevent flood or clear already flooded engine"
fanInv = ""
fanHyster = "The number of degrees of hysteresis to be used in controlling the fan. Recommended values are between 2 and 5"
fanWhenCranking = "Whether the fan should be disabled or continue running when the engine is cranking"
fanWhenOff = "Whether the fan will continue to run when the engine is turned off"
fanPin = "The Arduino pin that the fan control signal will output on. This is NOT necesarrily the same as the connector pin on any particlar board"
fanSP = "The trigger temperature for the fan. Fan will be enabled above this temp"
vssPulsesPerKm = "The number of pulses on the VSS signal per KM/Mile"
vssSmoothing = "A smoothing factor to help reduce noise in the VSS signal. Typical values are between 0 and 50"
aeTime = "The duration of the acceleration enrichment"
aseTaperTime = "Transition time to disable ASE"
iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves."
iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times"
iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all"
iacStepHome = "Homing steps to perform on startup. Must be greater than the fully open steps value"
iacMaxSteps = "Maximum number of steps the IAC can be moved away from the home position. Should always be less than Homing steps."
iacStepHyster = "The minimum number of steps to move in any one go."
iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)."
iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
iacPWMrun = "Determies if the idle valve runs before engine is cranked over. This can help starting the engine by letting more air in before the RPM sync is acheived."
iacCLminDuty = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxDuty = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacTPSlimit = "When using OL+CL idle control, if the TPS is higher than this value closed loop idle resets the integeral of the PID (To prevent RPM dips comming back to idle)"
iacRPMlimitHysteresis = "When using closed loop idle control, if the closed loop Target RPM + this value is higher than the actual RPM, closed loop idle resets the integeral of the PID (To prevent RPM dips comming back to idle)"
iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up."
CTPSPolarity = "Normal polarity is a ground switch where an earthed signal activates the closed throttle position. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the closed throttle position."
idleUpAdder = "The amount (In either Duty Cycle % or Steps (Depending on the idle control method in use), that the idle control will increase by when Idle Up is active"
idleAdvEnabled = "Added setting adds curve values to current spark table values when user defined idle is active. \n Switched setting overrides spark table values and uses curve values for idle ignition timing."
idleAdvAlgorithm = "Use Throttle position sensor (TPS) or closed throttle position sensor (CTPS) to detect idle state."
idleAdvDelay = "The number of seconds after sync is achieved before the idle advance control begins"
idleTaperTime = "Soft time transition from crank to running PWM targets"
oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1"
oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)"
oddfire4 = "The ATDC angle of channel 4 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 3)"
aeColdPct = "Acceleration enrichment adjustment for cold engine. Cold adjustment % is tapered between start and end temperatures.\n100% = no adjustment."
aeColdTaperMin = "AE cold adjustment taper start temperature. When coolant is below this value, full cold adjustment is applied."
aeColdTaperMax = "AE cold adjustment taper end temperature. When coolant is above this value, no cold adjustment is applied."
dfcoRPM = "The RPM above which DFCO will be active. Typically set a few hundred RPM above maximum idle speed"
dfcoHyster = "Hysteresis for DFCO RPM. 200-300 RPM is typical for this, however a higher value may be needed if the RPM is fluctuating around the cutout speed"
dfcoTPSThresh = "The TPS value below which DFCO will be active. Typical value is 5%-10%, but higher may be needed if TPS signal is noisy"
dfcoDelay = "Delay for activate DFCO."
dfcoMinCLT = "Minimum temperature to enable DFCO."
launchPin = "The ARDUINO pin that the clutch switch is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
launchHiLo = "Whether the signal is High or Low when the clutch pedal is engaged. For a ground switching input (Most clutch switches), this should be LOW"
lnchPullRes = "Whether the internal pullup resistor is enabled or left floating. For a ground switching input (Most clutch switches), select Pullup. For a 0v-5v input, select Floating"
ignBypassPin = "The ARDUINO pin that the ignition bypass is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
ignBypassEnable = "If turned on, a ground signal will be output during cranking on the specified pin. This is used to bypass the Speeduino ignition control during cranking."
ignCranklock = "On certain low resolution ignition patterns, the cranking timing can be locked to occur when a pulse is recieved."
multiplyMAP = "If enabled, the MAP reading is included directly into the pulsewidth calculation by multiplying the VE lookup value by the MAP:Baro ratio. This results in a flatter VE table that can be easier to tune in some instances. VE table must be retuned when this value is changed."
legacyMAP = "Use the legacy method of reading the MAP sensor that was used prior to the 201905 firmware. This should ONLY be enabled if you are upgrading from a firmware earlier than this"
includeAFR = "When enabled, the current AFR reading is incorporated directly in the pulsewidth calculation as a percentage of the current target ratio. VE table must be retuned when this value is changed. "
incorporateAFR = "When enabled, the AFR stoich/AFR target -ratio is incorporated directly in the pulsewidth calculation. When enabled, AFR target table affects pulsewidth even with EGO disabled. VE table must be retuned when this value is changed."
useExtBaro = "By Default, Speeduino will measure barometric pressure upon startup. Optionally however, a 2nd pressure sensor can be used to perform live barometric readings whilst the system is on."
flexEnabled = "Turns on readings from the Flex sensor and enables the below adjustments"
flexFreqLow = "The frequency of the sensor at 0% ethanol (50Hz for standard GM/Continental sensor)"
flexFreqHigh = "The frequency of the sensor at 100% ethanol (150Hz for standard GM/Continental sensor)"
flexFuelAdj = "Fuel % to be used for the current ethanol % (Typically 100% @ 0%, 163% @ 100%)"
flexAdvAdj = "Additional advance (in degrees) for the current ethanol % (Typically 0 @ 0%, 10-20 @ 100%)"
flexBoostAdj = "Adjustment, in kPa, to the boost target for the current ethanol %. Negative values are allowed to lower boost at lower ethanol % if necessary."
n2o_arming_pin = "Pin that the nitrous arming/enagement switch is on."
n2o_pin_polarity = "Whether Nitrous is active (Armed) when the pin is LOW or HIGH. If LOW is selected, the internal pullup will be used."
flatSArm = "The RPM switch point that determines whether an eganged clutch is for launch control or flat shift. Below this figure, an engaged clutch is considered to be for launch, above this figure an active clutch input will be considered a flat shift. This should be set at least several hundred RPM above idle"
flatSSoftWin = "The number of RPM below the flat shift point where the softlimit will be applied (aka Soft limit window). Recommended values are 200-1000"
flatSRetard = "The absolute timing (BTDC) that will be used when within the soft limit window"
engineProtectType = "Whether the engine protect an rev limiter will cut the fuel, the ignition or both"
hardCutType = "How the cuts should be performed for rev/launch limits. Full cut will stop all fuel/ignition events, Rolling cut will step through all ignition outputs, only cutting a limited number per revolution"
SoftLimitMode = "Fixed: the soft limiter will retard the ignition advance to the specified value.\nRelative: current timing advance will be retarted by the specified amount"
HardRevLim = "The hard rev limit is the point that the fuel or ignition (or both) will be cut completely to reduce increasing RPMs"
engineProtectMaxRPM = "The RPM point that engine protections will engage from. Below this RPM value, engine protections will NOT be active"
fuel2InputPin = "The Arduino pin that is being used to trigger the second fuel table to be active"
fuel2InputPolarity = "Whether the 2nd fuel table should be active when input is high or low. This should be LOW for a typical ground switching input"
fuel2InputPullup = "Whether to use the built in PULLUP for the switching input. This should be Yes for a typical ground switching input"
enable_secondarySerial = "This Enables the secondary serial port . Secondary serial is serial3 on mega2560 processor, and Serial2 on STM32 and Teensy processor "
cltAdvValues = "This curve can be used to advance ignition timing when engine is warming up. This can also be used to warm up the catalytic converters in cold start by retarding timing. Or even as safety feature to retard timing when engine is too hot to prevent knock."
wueRates = "Final enrichment value must be 100%."
;speeduino_tsCanId = "This is the TsCanId that the Speeduino ECU will respond to. This should match the main controller CAN ID in project properties if it is connected directy to TunerStudio, Otherwise the device ID if connected via CAN passthrough"
true_address = "This is the 11bit Can address of the Speeduino ECU "
realtime_base_address = "This is the 11bit CAN address of the realtime data broadcast from the Speeduino ECU. This MUST be at least 0x16 greater than the true address"
;obd_address = "The 11bit Can address that the Speeduino ECU responds to for OBD2 diagnostic requests"
AUXin00Alias = "The Ascii alias asigned to Aux input channel 0"
AUXin01Alias = "The Ascii alias asigned to Aux input channel 1"
AUXin02Alias = "The Ascii alias asigned to Aux input channel 2"
AUXin03Alias = "The Ascii alias asigned to Aux input channel 3"
AUXin04Alias = "The Ascii alias asigned to Aux input channel 4"
AUXin05Alias = "The Ascii alias asigned to Aux input channel 5"
AUXin06Alias = "The Ascii alias asigned to Aux input channel 6"
AUXin07Alias = "The Ascii alias asigned to Aux input channel 7"
AUXin08Alias = "The Ascii alias asigned to Aux input channel 8"
AUXin09Alias = "The Ascii alias asigned to Aux input channel 9"
AUXin10Alias = "The Ascii alias asigned to Aux input channel 10"
AUXin11Alias = "The Ascii alias asigned to Aux input channel 11"
AUXin12Alias = "The Ascii alias asigned to Aux input channel 12"
AUXin13Alias = "The Ascii alias asigned to Aux input channel 13"
AUXin14Alias = "The Ascii alias asigned to Aux input channel 14"
AUXin15Alias = "The Ascii alias asigned to Aux input channel 15"
caninput_sel0a = "This Enables local analog/digital on input channel 0 "
caninput_sel1a = "This Enables local analog/digital on input channel 1 "
caninput_sel2a = "This Enables local analog/digital on input channel 2 "
caninput_sel3a = "This Enables local analog/digital on input channel 3 "
caninput_sel4a = "This Enables local analog/digital on input channel 4 "
caninput_sel5a = "This Enables local analog/digital on input channel 5 "
caninput_sel6a = "This Enables local analog/digital on input channel 6 "
caninput_sel7a = "This Enables local analog/digital on input channel 7 "
caninput_sel8a = "This Enables local analog/digital on input channel 8 "
caninput_sel9a = "This Enables local analog/digital on input channel 9 "
caninput_sel10a = "This Enables local analog/digital on input channel 10 "
caninput_sel11a = "This Enables local analog/digital on input channel 11 "
caninput_sel12a = "This Enables local analog/digital on input channel 12 "
caninput_sel13a = "This Enables local analog/digital on input channel 13 "
caninput_sel14a = "This Enables local analog/digital on input channel 14 "
caninput_sel15a = "This Enables local analog/digital on input channel 15 "
crankRPM = "The cranking RPM threshold. When RPM is lower than this value (and above 0) the system will be considered to be cranking"
tpsflood = "Keep throttle over this value to disable the priming pulse and cranking fuel. Used to prevent flood or clear already flooded engine"
fpPrime = "Duration to power fuel pump on to ensure fuel line pressure."
primingDelay = "Delay to priming after fuel pump is on, used to wait fuel line get pressurized correctly."
fanInv = ""
fanHyster = "The number of degrees of hysteresis to be used in controlling the fan. Recommended values are between 2 and 5"
aeTime = "The duration of the acceleration enrichment"
aseTaperTime = "Transition time to disable ASE"
iacChannels = "The number of output channels used for PWM valves. Select 1 for 2-wire valves or 2 for 3-wire valves."
iacStepTime = "Duration of each stepping pulse. Values that are too low can cause the motor to behave erratically or not at all. See the manual for suggested step times"
iacCoolTime = "Cool time between each step. Set to zero if you don't want any cooling at all"
iacStepHome = "Homing steps to perform on startup. Must be greater than the fully open steps value"
iacMaxSteps = "Maximum number of steps the IAC can be moved away from the home position. Should always be less than Homing steps."
iacStepHyster = "The minimum number of steps to move in any one go."
iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)."
iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
iacCLminDuty = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxDuty = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up."
idleUpOutputEnabled = "Enable an output that is toggled by the idle up input pin. An example use is driving an AC fan relay."
idleUpOutputInv = "No = When the idle up pin is high the output is active (grounding), when the idle up pin is low the output is inactive. Yes = When the idle up pin is high the output is inactive, when the idle up pin is low the output is active (grounding)."
CTPSPolarity = "Normal polarity is a ground switch where an earthed signal activates the closed throttle position. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the closed throttle position."
idleUpAdder = "The amount (In either Duty Cycle % or Steps (Depending on the idle control method in use), that the idle control will increase by when Idle Up is active"
idleAdvEnabled = "Added setting adds curve values to current spark table values when user defined idle is active. \n Switched setting overrides spark table values and uses curve values for idle ignition timing."
idleAdvAlgorithm= "Use Throttle position sensor (TPS) or closed throttle position sensor (CTPS) to detect idle state."
idleAdvDelay = "The number of seconds after sync is achieved before the idle advance control begins"
idleTaperTime = "Soft time transition from crank to running PWM targets"
oddfire2 = "The ATDC angle of channel 2 for oddfire engines. This is relative to the TDC angle of channel 1"
oddfire3 = "The ATDC angle of channel 3 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 2)"
oddfire4 = "The ATDC angle of channel 4 for oddfire engines. This is relative to the TDC angle of channel 1 (NOT channel 3)"
aeColdPct = "Acceleration enrichment adjustment for cold engine. Cold adjustment % is tapered between start and end temperatures.\n100% = no adjustment."
aeColdTaperMin = "AE cold adjustment taper start temperature. When coolant is below this value, full cold adjustment is applied."
aeColdTaperMax = "AE cold adjustment taper end temperature. When coolant is above this value, no cold adjustment is applied."
dfcoRPM = "The RPM above which DFCO will be active. Typically set a few hundred RPM above maximum idle speed"
dfcoHyster = "Hysteresis for DFCO RPM. 200-300 RPM is typical for this, however a higher value may be needed if the RPM is fluctuating around the cutout speed"
dfcoTPSThresh = "The TPS value below which DFCO will be active. Typical value is 5%-10%, but higher may be needed if TPS signal is noisy"
dfcoDelay = "Delay for activate DFCO."
dfcoMinCLT = "Minimum temperature to enable DFCO."
crankingEnrichTaper = "Taper time from cranking enrichment to ASE or run (after engine has started)."
launchPin = "The ARDUINO pin that the clutch switch is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
launchHiLo = "Whether the signal is High or Low when the clutch pedal is engaged. For a ground switching input (Most clutch switches), this should be LOW"
lnchPullRes = "Whether the internal pullup resistor is enabled or left floating. For a ground switching input (Most clutch switches), select Pullup. For a 0v-5v input, select Floating"
lnchCtrlTPS = "The minimum RPM that launch control will engage at"
lnchSoftLim = "The RPM point that the launch control ignition timing adjustment will engage (When under launch conditions). Should be below the hard rev limit RPM"
lnchRetard = "When under launch conditions (Eg Clutch engaged) the ignition timing will be set to this when above the Soft rev limit. This will override any other ignition modifiers"
lnchHardLim = "The RPM point above which the fuel and/or ignition will be cut when launch is active (Eg Clutch engaged). See the Engine Protection dialog to set whether it is fuel, ignition or both that are cut."
lnchFuelAdd = "The additional fuel % that will be added during Soft and Hard launch conditions. Set to 0 for no fuel modifier."
ignBypassPin = "The ARDUINO pin that the ignition bypass is connected to. This is NOT the pin on the connector, but the pin it relates to on the arduino"
ignBypassEnable = "If turned on, a ground signal will be output during cranking on the specified pin. This is used to bypass the Speeduino ignition control during cranking."
ignCranklock = "On certain low resolution ignition patterns, the cranking timing can be locked to occur when a pulse is recieved."
multiplyMAP = "If enabled, the MAP reading is included directly into the pulsewidth calculation by multiplying the VE lookup value by either the MAP:Baro ratio or MAP/100.\n This results in a flatter VE table that can be easier to tune in some instances. The MAP/100 option is generally used for compatibiilty with fuel tables from other ECUs. MAP:Baro ratio is recommended for new tunes. \n VE table must be retuned when this value is changed."
legacyMAP = "Use the legacy method of reading the MAP sensor that was used prior to the 201905 firmware. This should ONLY be enabled if you are upgrading from a firmware earlier than this"
includeAFR = "When enabled, the current AFR reading is incorporated directly in the pulsewidth calculation as a percentage of the current target ratio. VE table must be retuned when this value is changed. "
useExtBaro = "By Default, Speeduino will measure barometric pressure upon startup. Optionally however, a 2nd pressure sensor can be used to perform live barometric readings whilst the system is on."
flexEnabled = "Turns on readings from the Flex sensor and enables the below adjustments"
flexFreqLow = "The frequency of the sensor at 0% ethanol (50Hz for standard GM/Continental sensor)"
flexFreqHigh = "The frequency of the sensor at 100% ethanol (150Hz for standard GM/Continental sensor)"
flexFuelAdj = "Fuel % to be used for the current ethanol % (Typically 100% @ 0%, 163% @ 100%)"
flexAdvAdj = "Additional advance (in degrees) for the current ethanol % (Typically 0 @ 0%, 10-20 @ 100%)"
flexBoostAdj = "Adjustment, in kPa, to the boost target for the current ethanol %. Negative values are allowed to lower boost at lower ethanol % if necessary."
n2o_arming_pin = "Pin that the nitrous arming/enagement switch is on."
n2o_pin_polarity= "Whether Nitrous is active (Armed) when the pin is LOW or HIGH. If LOW is selected, the internal pullup will be used."
flatSArm = "The RPM switch point that determines whether an eganged clutch is for launch control or flat shift. Below this figure, an engaged clutch is considered to be for launch, above this figure an active clutch input will be considered a flat shift. This should be set at least several hundred RPM above idle"
flatSSoftWin = "The number of RPM below the flat shift point where the softlimit will be applied (aka Soft limit window). Recommended values are 200-1000"
flatSRetard = "The absolute timing (BTDC) that will be used when within the soft limit window"
hardCutType = "How hard cuts should be performed for rev/launch limits. Full cut will stop all ignition events, Rolling cut will step through all ignition outputs, only cutting 1 per revolution"
fuel2InputPin = "The Arduino pin that is being used to trigger the second fuel table to be active"
fuel2InputPolarity = "Whether the 2nd fuel table should be active when input is high or low. This should be LOW for a typical ground switching input"
fuel2InputPullup= "Whether to use the built in PULLUP for the switching input. This should be Yes for a typical ground switching input"
enable_secondarySerial = "This Enables the secondary serial port . Secondary serial is serial3 on mega2560 processor, and Serial2 on STM32 and Teensy processor "
cltAdvValues = "This curve can be used to advance ignition timing when engine is warming up. This can also be used to warm up the catalytic converters in cold start by retarding timing. Or even as safety feature to retard timing when engine is too hot to prevent knock."
;speeduino_tsCanId = "This is the TsCanId that the Speeduino ECU will respond to. This should match the main controller CAN ID in project properties if it is connected directy to TunerStudio, Otherwise the device ID if connected via CAN passthrough"
true_address = "This is the 11bit Can address of the Speeduino ECU "
realtime_base_address = "This is the 11bit CAN address of the realtime data broadcast from the Speeduino ECU. This MUST be at least 0x16 greater than the true address"
;obd_address = "The 11bit Can address that the Speeduino ECU responds to for OBD2 diagnostic requests"
AUXin00Alias = "The Ascii alias asigned to Aux input channel 0"
AUXin01Alias = "The Ascii alias asigned to Aux input channel 1"
AUXin02Alias = "The Ascii alias asigned to Aux input channel 2"
AUXin03Alias = "The Ascii alias asigned to Aux input channel 3"
AUXin04Alias = "The Ascii alias asigned to Aux input channel 4"
AUXin05Alias = "The Ascii alias asigned to Aux input channel 5"
AUXin06Alias = "The Ascii alias asigned to Aux input channel 6"
AUXin07Alias = "The Ascii alias asigned to Aux input channel 7"
AUXin08Alias = "The Ascii alias asigned to Aux input channel 8"
AUXin09Alias = "The Ascii alias asigned to Aux input channel 9"
AUXin10Alias = "The Ascii alias asigned to Aux input channel 10"
AUXin11Alias = "The Ascii alias asigned to Aux input channel 11"
AUXin12Alias = "The Ascii alias asigned to Aux input channel 12"
AUXin13Alias = "The Ascii alias asigned to Aux input channel 13"
AUXin14Alias = "The Ascii alias asigned to Aux input channel 14"
AUXin15Alias = "The Ascii alias asigned to Aux input channel 15"
caninput_sel0a = "This Enables local analog/digital on input channel 0 "
caninput_sel1a = "This Enables local analog/digital on input channel 1 "
caninput_sel2a = "This Enables local analog/digital on input channel 2 "
caninput_sel3a = "This Enables local analog/digital on input channel 3 "
caninput_sel4a = "This Enables local analog/digital on input channel 4 "
caninput_sel5a = "This Enables local analog/digital on input channel 5 "
caninput_sel6a = "This Enables local analog/digital on input channel 6 "
caninput_sel7a = "This Enables local analog/digital on input channel 7 "
caninput_sel8a = "This Enables local analog/digital on input channel 8 "
caninput_sel9a = "This Enables local analog/digital on input channel 9 "
caninput_sel10a = "This Enables local analog/digital on input channel 10 "
caninput_sel11a = "This Enables local analog/digital on input channel 11 "
caninput_sel12a = "This Enables local analog/digital on input channel 12 "
caninput_sel13a = "This Enables local analog/digital on input channel 13 "
caninput_sel14a = "This Enables local analog/digital on input channel 14 "
caninput_sel15a = "This Enables local analog/digital on input channel 15 "
caninput_sel0b = "This Enables External CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 0 "
caninput_sel1b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 1 "
caninput_sel2b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 2 "
caninput_sel3b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 3 "
caninput_sel4b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 4 "
caninput_sel5b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 5 "
caninput_sel6b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 6 "
caninput_sel7b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 7 "
caninput_sel8b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 8 "
caninput_sel9b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 9 "
caninput_sel10b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 10 "
caninput_sel11b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 11 "
caninput_sel12b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 12 "
caninput_sel13b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 13 "
caninput_sel14b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 14 "
caninput_sel15b = "This Enables External/CAN data via the Secondary Serial CANBUS expansion module or local analog/digital on input channel 15 "
caninput_source_can_address0 = "The source 11bit CAN address of the data for channel 0"
caninput_source_can_address1 = "The source 11bit CAN address of the data for channel 1"
caninput_source_can_address2 = "The source 11bit CAN address of the data for channel 2"
caninput_source_can_address3 = "The source 11bit CAN address of the data for channel 3"
caninput_source_can_address4 = "The source 11bit CAN address of the data for channel 4"
caninput_source_can_address5 = "The source 11bit CAN address of the data for channel 5"
caninput_source_can_address6 = "The source 11bit CAN address of the data for channel 6"
caninput_source_can_address7 = "The source 11bit CAN address of the data for channel 7"
caninput_source_can_address8 = "The source 11bit CAN address of the data for channel 8 "
caninput_source_can_address9 = "The source 11bit CAN address of the data for channel 9"
caninput_source_can_address10 = "The source 11bit CAN address of the data for channel 10"
caninput_source_can_address11 = "The source 11bit CAN address of the data for channel 11"
caninput_source_can_address12 = "The source 11bit CAN address of the data for channel 12"
caninput_source_can_address13 = "The source 11bit CAN address of the data for channel 13"
caninput_source_can_address14 = "The source 11bit CAN address of the data for channel 14"
caninput_source_can_address15 = "The source 11bit CAN address of the data for channel 15"
caninput_source_start_byte0 = "The Starting byte the data begins at for channel 0"
caninput_source_start_byte1 = "The Starting byte the data begins at for channel 1"
caninput_source_start_byte2 = "The Starting byte the data begins at for channel 2"
caninput_source_start_byte3 = "The Starting byte the data begins at for channel 3"
caninput_source_start_byte4 = "The Starting byte the data begins at for channel 4"
caninput_source_start_byte5 = "The Starting byte the data begins at for channel 5"
caninput_source_start_byte6 = "The Starting byte the data begins at for channel 6"
caninput_source_start_byte7 = "The Starting byte the data begins at for channel 7"
caninput_source_start_byte8 = "The Starting byte the data begins at for channel 8"
caninput_source_start_byte9 = "The Starting byte the data begins at for channel 9"
caninput_source_start_byte10 = "The Starting byte the data begins at for channel 10"
caninput_source_start_byte11 = "The Starting byte the data begins at for channel 11"
caninput_source_start_byte12 = "The Starting byte the data begins at for channel 12"
caninput_source_start_byte13 = "The Starting byte the data begins at for channel 13"
caninput_source_start_byte14 = "The Starting byte the data begins at for channel 14"
caninput_source_start_byte15 = "The Starting byte the data begins at for channel 15"
caninput_source_num_bytes0 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes1 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes2 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes3 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes4 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes5 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes6 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes7 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes8 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes9 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes10 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes11 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes12 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes13 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes14 = "The number of bytes the data is made from starting at selected start byte number"
caninput_source_num_bytes15 = "The number of bytes the data is made from starting at selected start byte number"
cmdEnableTestMode = "Click this to enable test mode. This will not be available if the engine is running"
cmdStopTestMode = "Click this to disable test mode"
cmdtestinj150dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj250dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj350dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj450dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj550dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj650dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj750dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestinj850dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestspk150dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestspk250dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestspk350dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
cmdtestspk450dc = "This will cycle the output at 50% Duty cycle at a 1s interval"
ADCFILTER_TPS = "Recommended value: 50"
ADCFILTER_CLT = "Recommended value: 180"
ADCFILTER_IAT = "Recommended value: 180"
ADCFILTER_O2 = "Recommended value: 128"
ADCFILTER_BAT = "Recommended value: 128"
ADCFILTER_MAP = "This setting is only available when using the Instantaneious MAP sampling method. Recommended value: 20"
ADCFILTER_BARO = "This setting is only available when using an external Baro sensor. Recommended value: 64"
boostIntv = "The closed loop control interval will run every this many ms. Generally values between 50% and 100% of the valve frequency work best"
VVTasOnOff = "Whether or not the VVT table should be treated as on and off control only. If you are using the VVT map to control a switch, this should be Yes. If you are using the VVT control to drive a PWM signal, this should be No"
stagedInjSizePri= "Size of the primary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
stagedInjSizeSec= "Size of the secondary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
#if resetcontrol_adv
resetControl = "How to control the Arduino's automatic reset feature. NOTE: Some of these settings require modifying your hardware and replacing the Arduino bootloader. See the Wiki for more details.\n\nDisabled: Allow the Arduino to reset when a new serial connection is made.\n\nPrevent When Running: Hold the control pin high while the engine is running.\n\nPrevent Always: Always hold the control pin high.\n\nSerial Command: Normally hold the control pin high, but pull it low when the 'U' serial command is issued and reset upon receiving more data."
#else
resetControl = "If set to Serial Command, normally hold the control pin high but pull it low when the 'U' serial command is issued and reset upon receiving more data. The control pin should be connected to the Arduino's reset pin."
#endif
resetControlPin = "The Arduino pin used to control resets."
battVCorMode = "The Battery Voltage Correction value from the table below can either be applied on the whole injection Pulse Width value, or only on the Open Time value."
dwellTable = "Sets the dwell time in milliseconds based on RPM/load. This can be used to reduce stress/wear on ignition system where long dwell is not needed. And other areas can use longer dwell value if needed for stronger spark. Battery voltage correction is applied for these dwell values."
useDwellMap = "In normal operation mode this is set to No and speeduino will use fixed running dwell value. But if different dwell values are required across engine RPM/load range, this can be set to Yes and separate Dwell table defines running dwell value."
[UserDefined]
; Enhanced TunerStudio dialogs can be defined here
; MegaTune will over look this section
; These dialogs will over-ride those in the UserDefined Section
; User defined ar loaded first, then if one by the same name is defiend here,
; it will replace the MegaTune definition
; dialog = name, Title, Layout
;
; valid options for layout are xAxis, yAxis, border
; for an xAxis, each field added will be added from right to left
; A yAxis layout will add fields from top to bottom
; A border layout will expect an additional constraint to determine placement
; valid border constraints are north, South, East, West, Center
; all 5 do not need to be filled.
; The field name can be either a constant reference, or a reference to another
; dialog which will be added.
; dialogs can be nested and can be mixed with fields
dialog = engine_constants_southwest, "Speeduino Board"
field = "Stoichiometric ratio", stoich
field = "Injector Layout", injLayout
field = "Board Layout", pinLayout
field = "MAP Sample method", mapSample
dialog = engine_constants_west, ""
panel = std_injection, North
panel = engine_constants_southwest
dialog = engine_constants_northeast, "Oddfire Angles"
field = "Channel 2 angle", oddfire2, { engineType == 1 }
field = "Channel 3 angle", oddfire3, { engineType == 1 && nCylinders >= 3 }
field = "Channel 4 angle", oddfire4, { engineType == 1 && nCylinders >= 4 }
dialog = engine_constants_east, ""
panel = engine_constants_northeast, North
field = ""
dialog = engine_constants_warning, ""
field = "!Warning: The board you have selected may not have enough channels for sequential fuel!", {}, {}, { injLayout == 3 && !sequentialFuelAvailable }
dialog = engine_constants, "", border
topicHelp = "https://wiki.speeduino.com/en/configuration/Engine_Constants"
panel = engine_constants_warning, North
panel = engine_constants_west, West
panel = engine_constants_east, East
; Flex fuel stuff
dialog = flexFuelSettings, "", yAxis
field = "Flex Fuel Sensor ", flexEnabled
field = "Low (E0) ", flexFreqLow, { flexEnabled }
field = "High (E100) ", flexFreqHigh, { flexEnabled }
dialog = flexFuelWest, ""
panel = flex_fuel_curve, { flexEnabled }
panel = flex_adv_curve, { flexEnabled }
dialog = flexFuelEast, ""
panel = flex_boost_curve, { flexEnabled && boostEnabled }
;dialog = flexCurves, "", indexCard
dialog = flexCurves, "", xAxis
panel = flexFuelWest, West
panel = flexFuelEast, East
dialog = flexFueling, "Fuel Sensor Settings", border
topicHelp = "https://wiki.speeduino.com/en/configuration/Flex_Fuel"
;panel = flexFuelWest, West
panel = flexFuelSettings, North
panel = flexCurves, South
; Knock control settings
dialog = knock_windows, "Knock Windows", xAxis
panel = knock_window_angle_curve, West, { knock_mode }
panel = knock_window_duration_curve, East, { knock_mode }
dialog = knock_settings_west, "Settings", yAxis
field = "Knock Mode", knock_mode
field = "Knock Pin", knock_pin, { knock_mode }
field = "Knock active when pin is", knock_trigger, { knock_mode == 1 }
field = "Use pullup", knock_pullup, { knock_mode == 1 }
dialog = knock_settings_east, "Detection and Response"
field = "#Detection"
field = "Knock count required", knock_count, { knock_mode == 1}
field = "Knock threshold required", knock_threshold, { knock_mode == 2}
field = "Maximum MAP", knock_maxMAP, { knock_mode }
field = "Maximum RPM", knock_maxRPM, { knock_mode }
;Retard and recovery
field = "#Retard"
field = "Total retard", knock_maxRetard, { knock_mode }
field = "First step size", knock_firstStep, { knock_mode }
field = "Other step size", knock_stepSize, { knock_mode }
field = "Step time", knock_stepTime, { knock_mode }
field = "#Recovery"
field = "Retard duration", knock_duration, { knock_mode } ;Time before retard starts ending
field = "Recovery step time", knock_recoveryStepTime, { knock_mode } ;Time between each recovery step
field = "Recovery step size", knock_recoveryStep, { knock_mode }
dialog = knock_settings_top, "", xAxis
panel = knock_settings_west, West
panel = knock_settings_east, East
dialog = knockSettings, "", border
topicHelp = "http://speeduino.com/wiki/index.php/Knock"
panel = knock_settings_top, North
panel = knock_windows, South
dialog = vss_gear_1, "", xAxis
field = "Speed ratio 1", vssRatio1
commandButton = "Set Gear 1", cmdVSSratio1, { vssMode > 1 }
dialog = vss_gear_2, "", xAxis
field = "Speed ratio 2", vssRatio2
commandButton = "Set Gear 2", cmdVSSratio2, { vssMode > 1 }
dialog = vss_gear_3, "", xAxis
field = "Speed ratio 3", vssRatio3
commandButton = "Set Gear 3", cmdVSSratio3, { vssMode > 1 }
dialog = vss_gear_4, "", xAxis
field = "Speed ratio 4", vssRatio4
commandButton = "Set Gear 4", cmdVSSratio4, { vssMode > 1 }
dialog = vss_gear_5, "", xAxis
field = "Speed ratio 5", vssRatio5
commandButton = "Set Gear 5", cmdVSSratio5, { vssMode > 1 }
dialog = vss_gear_6, "", xAxis
field = "Speed ratio 6", vssRatio6
commandButton = "Set Gear 6", cmdVSSratio6, { vssMode > 1 }
dialog = vss_gear_detection, "Gear Detection", yAxis
field = "After setting 'Pulses per km/mile' above"
field = "Drive in each gear (any speed) and press appropriate button"
panel = vss_gear_1
panel = vss_gear_2
panel = vss_gear_3
panel = vss_gear_4
panel = vss_gear_5
panel = vss_gear_6
dialog = vss_calibration, "VSS Calibration"
field = "Pulses Per KM", vssPulsesPerKm, { vssMode > 1 }
commandButton = "60km/h auto-calibrate", cmdVSS60kmh, { vssMode > 1 }
field = "Smoothing Factor", vssSmoothing, { vssMode > 1 }
dialog = vssSettings, "", yAxis
topicHelp = "https://wiki.speeduino.com/en/configuration/VSS"
field = "VSS Input Mode", vssMode
field = "VSS Pin", vssPin, { vssMode > 1 }
;field = "Use Pullup", vssPullup, { vssMode > 1 }
panel = vss_calibration
panel = vss_gear_detection
dialog = tacho, "Tacho"
field = "Output pin", tachoPin
field = "Output speed", tachoDiv
field = "Pulse duration", tachoDuration
field = "Tacho sweep on boot", useTachoSweep
field = "Tacho sweep Max RPM", tachoSweepMaxRPM, { useTachoSweep }
dialog = accelEnrichments_aeSettings, ""
field = "Enrichment mode", aeMode
field = "Enrichment method", aeApplyMode
field = "TPSdot Threshold", taeThresh, { aeMode == 0 }
field = "MAPdot Threshold", maeThresh, { aeMode == 1 }
field = "Accel Time", aeTime
field = "Taper Start RPM", aeTaperMin
field = "Taper End RPM", aeTaperMax
dialog = accelEnrichments_coldAdj, "Acceleration Enrichment cold adjustment"
field = "Cold adjustment", aeColdPct
field = "Cold adjustment taper start temperature", aeColdTaperMin
field = "Cold adjustment taper end temperature", aeColdTaperMax
dialog = accelEnrichments_south, "Decelleration Fuel Cutoff (DFCO)"
field = "Enabled", dfcoEnabled
field = "TPS Threshold", dfcoTPSThresh, { dfcoEnabled }
field = "Minimum engine temperature", dfcoMinCLT, { dfcoEnabled }
field = "Cutoff delay", dfcoDelay, { dfcoEnabled }
field = "Cutoff RPM", dfcoRPM, { dfcoEnabled }
field = "RPM Hysteresis", dfcoHyster, { dfcoEnabled }
dialog = accelEnrichments_north_south, ""
liveGraph = pump_ae_Graph, "AE Graph"
graphLine = afr
graphLine = TPSdot, "%", -2000, 2000, auto, auto
graphLine = MAPdot, "%", -2000, 2000, auto, auto
dialog = accelEnrichments_north, "", xAxis
panel = time_accel_tpsdot_curve, { aeMode == 0 }
panel = time_accel_mapdot_curve, { aeMode == 1 }
dialog = accelEnrichments_center, "Acceleration Enrichment", xAxis
panel = accelEnrichments_aeSettings
panel = accelEnrichments_coldAdj
dialog = accelEnrichments, "Acceleration Enrichment"
topicHelp = "http://speeduino.com/wiki/index.php/Acceleration_Wizard"
panel = accelEnrichments_north, North
panel = accelEnrichments_north_south, Center
panel = accelEnrichments_center, Center
panel = accelEnrichments_south, South
dialog = veTableDialog_north, ""
panel = veTable1Tbl
dialog = veTableDialog_south, ""
field = "Multiply VE value by MAP ratio", multiplyMAP
field = "Multiply by ratio of AFR to Target AFR", includeAFR, { egoType == 2 && !incorporateAFR || (incorporateAFR==includeAFR) }
field = "Multiply by ratio of stoich AFR/target AFR (incorporate AFR)", incorporateAFR, { !includeAFR || (incorporateAFR==includeAFR) }
dialog = veTableDialog, "VE Table"
panel = veTableDialog_north, North
panel = veTableDialog_south, South
dialog = fuelTable2Dialog_switch, "Switch Conditions", xAxis
field = "Use secondary table when:", fuel2SwitchVariable
field = "is greater than:", fuel2SwitchValue
dialog = fuelTable2Dialog_input, "Input Options", yAxis
field = "Use secondary table when pin", fuel2InputPin
field = "Is", fuel2InputPolarity
field = "Use internal pullup on pin", fuel2InputPullup, { fuel2InputPolarity == 0 }
dialog = fuelTable2Dialog_north, ""
field = "Secondary fuel table mode", fuel2Mode
field = "Load source", fuel2Algorithm, { fuel2Mode }
panel = fuelTable2Dialog_switch, { fuel2Mode == 3 }
panel = fuelTable2Dialog_input, { fuel2Mode == 4 }
dialog = fuelTable2Dialog_south, ""
panel = fuelTable2Tbl
dialog = fuelTable2Dialog, "Fuel Table 2"
panel = fuelTable2Dialog_north, North
panel = fuelTable2Dialog_south, South, { fuel2Mode }
dialog = sparkTable2Dialog_switch, "Switch Conditions", xAxis
field = "Use secondary table when:", spark2SwitchVariable
field = "is greater than:", spark2SwitchValue
dialog = sparkTable2Dialog_input, "Input Options", yAxis
field = "Use secondary table when pin", spark2InputPin
field = "Is", spark2InputPolarity
field = "Use internal pullup on pin", spark2InputPullup, { spark2InputPolarity == 0 }
dialog = sparkTable2Dialog_north, ""
field = "Secondary advance table mode", spark2Mode
field = "Load source", spark2Algorithm, { spark2Mode }
panel = sparkTable2Dialog_switch, { spark2Mode == 3 }
panel = sparkTable2Dialog_input, { spark2Mode == 4 }
dialog = sparkTable2Dialog_south, ""
panel = spark2Tbl
dialog = sparkTable2Dialog, "Spark Table 2"
panel = sparkTable2Dialog_north, North
panel = sparkTable2Dialog_south, South, { spark2Mode }
dialog = injAngleDialog, "Injector close angles"
panel = injector_timing_curve
dialog = injOpenTimeDialog, "Injector opening time"
field = "Injector Open Time", injOpen
field = "Battery Voltage Correction Mode", battVCorMode
panel = injector_voltage_curve
dialog = injChars, "Injector Characteristics"
topicHelp = "https://wiki.speeduino.com/en/configuration/Injector_Characteristics"
field = "Injector Duty Limit", dutyLim
panel = injOpenTimeDialog
panel = injAngleDialog
dialog = egoControl, ""
topicHelp = "https://wiki.speeduino.com/en/configuration/O2"
field = "Sensor Type", egoType
field = "#Please ensure you calibrate your O2 sensor in the Tools menu", { egoType }
field = "Algorithm", egoAlgorithm, { egoType }
field = "Ignition Events per Step", egoCount, { egoType && (egoAlgorithm < 3) }
field = "Controller Auth +/-", egoLimit, { egoType && (egoAlgorithm < 3) }
field = "Only correct above:", ego_min, { egoType && (egoAlgorithm < 3) }
field = "and correct below:", ego_max, { egoType && (egoAlgorithm < 3) }
field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) }
field = "Active Above RPM", egoRPM, { egoType && (egoAlgorithm < 3) }
field = "Active Below TPS", egoTPSMax, { egoType && (egoAlgorithm < 3) }
field = "EGO delay after start", ego_sdelay, { (egoAlgorithm < 3) }
field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) }
field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) }
field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) }
dialog = fanSettings,"Fan Settings",7
topicHelp = "https://wiki.speeduino.com/en/configuration/Thermo_fan"
field = "Fan Mode", fanEnable
field = "Allow fan when off", fanWhenOff, { fanEnable }
field = "Allow fan when cranking", fanWhenCranking, { fanEnable }
field = "Fan output pin", fanPin, { fanEnable }
field = "Fan Output Inverted", fanInv, { fanEnable }
field = "Fan switching temperature", fanSP, { fanEnable }
field = "Fan hysteresis", fanHyster, { fanEnable }
dialog = stepper_idle, "Stepper Idle"
field = "Step time (ms)", iacStepTime, { iacAlgorithm == 4 || iacAlgorithm == 5 }
field = "Cool time (ms)", iacCoolTime, { iacAlgorithm == 4 || iacAlgorithm == 5 }
field = "Home steps", iacStepHome, { iacAlgorithm == 4 || iacAlgorithm == 5 }
field = "Minimum Steps", iacStepHyster, { iacAlgorithm == 4 || iacAlgorithm == 5 }
field = "Don't exceed", iacMaxSteps, { iacAlgorithm == 4 || iacAlgorithm == 5 }
field = "Stepper Inverted", iacStepperInv, { iacAlgorithm == 4 || iacAlgorithm == 5 }
dialog = pwm_idle, "PWM Idle"
field = "Number of outputs", iacChannels, { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6 }
field = "Idle valve frequency", idleFreq, { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6 }
field = "Idle valve direction", iacPWMdir, { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6 }
field = "Run before start", iacPWMrun, { iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6 }
dialog = closedloop_idle, "Closed loop Idle"
field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6}
field = "I", idleKI, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6}
field = "D", idleKD, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6}
field = "Minimum valve duty", iacCLminDuty, { iacAlgorithm == 3 || iacAlgorithm == 6}
field = "Maximum valve duty", iacCLmaxDuty, { iacAlgorithm == 3 || iacAlgorithm == 6}
field = "Integeral reset above TPS", iacTPSlimit, { iacAlgorithm == 6 }
field = "Integeral reset RPM Hysteresis", iacRPMlimitHysteresis, { iacAlgorithm == 6 }
dialog = idleSettings, "Idle Settings"
topicHelp = "https://wiki.speeduino.com/en/configuration/Idle"
field = "Idle control type", iacAlgorithm
field = "Crank to run taper", idleTaperTime, { iacAlgorithm == 2 || iacAlgorithm == 4 }
field = "#Fast Idle"
field = "Fast idle temp", iacFastTemp, { iacAlgorithm == 1 }
panel = pwm_idle
panel = stepper_idle
panel = closedloop_idle
dialog = idleUpInputSettingsPanel, "Idle Up Input Settings", yAxis
field = "Idle Up Enabled", idleUpEnabled
field = "Idle Up Pin", idleUpPin, { idleUpEnabled }
field = "Idle Up Pin Polarity", idleUpPolarity, { idleUpEnabled }
field = "Idle Up Amount", idleUpAdder, { idleUpEnabled }
dialog = idleUpOutputSettingsPanel, "Idle Up Output Settings", yAxis
field = "Idle Up Output Enabled", idleUpOutputEnabled, { idleUpEnabled }
field = "Idle Up Output Inverted", idleUpOutputInv, { idleUpEnabled && idleUpOutputEnabled
field = "Idle Up Output Pin", idleUpOutputPin, { idleUpEnabled && idleUpOutputEnabled }
dialog = idleUpSettings, "Idle Up Settings"
panel = idleUpInputSettingsPanel
panel = idleUpOutputSettingsPanel
dialog = fuelpump, "Fuel pump"
field = "Fuel pump pin", fuelPumpPin
field = "Fuel pump prime duration", fpPrime
dialog = crankingEnrichDialog, "Cranking Enrichment", yAxis
panel = cranking_enrich_curve
field = "#Note"
field = "Values are specified as modifiers to the normal fueling. Eg 100% = No change."
dialog = crankingIgnOptions, "Cranking Timing", yAxis
field = "Cranking advance Angle", CrankAng, { ignCranklock == 0 }
field = "Cranking bypass", ignBypassEnable
field = "Bypass output pin", ignBypassPin { ignBypassEnable }
field = "Fix cranking timing with trigger", ignCranklock, { TrigPattern == 1 || TrigPattern == 4 || TrigPattern == 10 || TrigPattern == 9 }
dialog = crankingOptions, "", yAxis
field = "Cranking RPM (Max)", crankRPM
field = "Flood Clear level", tpsflood
field = "Fuel pump prime duration", fpPrime
field = "Injectors priming delay", primingDelay
field = "Cranking enrichment taper time", crankingEnrichTaper
dialog = primePW, "Priming Pulsewidth"
panel = priming_pw_curve
dialog = crankPW, "Cranking Settings", yAxis
topicHelp = "https://wiki.speeduino.com/en/configuration/Cranking"
panel = crankingOptions, North
panel = crankingEnrichDialog, Center
panel = crankingIgnOptions, South
dialog = ASE_amount, "Enrichment amount (%)", yAxis
field = "Defines the fuel enrichment percentage after start."
field = "This is needed to keep engine running after start"
field = "Common values are 5% when engine is hot to 50% when engine is cold."
panel = afterstart_enrichment_curve
dialog = ASE_time, "Duration (s)", yAxis
field = "How long time the After Start Enrichment is applied in seconds."
field = "Usually this is varies from 1-2s when engine is hot up to 20s on a cold engine."
field = "Transition time to disable", aseTaperTime
panel = afterstart_enrichment_time
dialog = ASE, "Afterstart Enrichment(ASE)", yAxis
field = "#Time and duration curves share common coolant values"
panel = ASE_amount
panel = ASE_time
dialog = triggerSettings,"Trigger Settings",4
topicHelp = "https://wiki.speeduino.com/en/decoders"
field = "Trigger Pattern", TrigPattern
field = "Primary base teeth", numTeeth, { TrigPattern == 0 || TrigPattern == 2 || TrigPattern == 11 || TrigPattern == 18 || TrigPattern == 19 }
field = "Primary trigger speed", TrigSpeed, { TrigPattern == 0 }
field = "Missing teeth", missingTeeth, { TrigPattern == 0 }
field = "Trigger angle multiplier", TrigAngMul, { TrigPattern == 11 }
field = "Trigger Angle ", TrigAng
field = "This number represents the angle ATDC when "
field = "tooth #1 passes the primary sensor."
field = ""
field = "Skip Revolutions", SkipCycles
field = "Note: This is the number of revolutions that will be skipped during"
field = "cranking before the injectors and coils are fired"
field = "Trigger edge", TrigEdge { TrigPattern != 4 } ;4G63 uses both edges
field = "Secondary trigger edge", TrigEdgeSec, { (TrigPattern == 0 && TrigSpeed == 0 && trigPatternSec != 2) || TrigPattern == 2 || TrigPattern == 9 || TrigPattern == 12 || TrigPattern == 18 || TrigPattern == 19 || TrigPattern == 20 } ;Missing tooth, dual wheel and Miata 9905, weber-marelli, ST170
field = "Missing Tooth Secondary type" trigPatternSec, { (TrigPattern == 0&& TrigSpeed == 0) }
field = "Level for 1st phase" PollLevelPol, { (TrigPattern == 0 && TrigSpeed == 0 && trigPatternSec == 2) }
field = "Trigger Filter", TrigFilter, { TrigPattern != 13 }
field = "Re-sync every cycle", useResync, { TrigPattern == 2 || TrigPattern == 4 || TrigPattern == 7 || TrigPattern == 12 || TrigPattern == 9 || TrigPattern == 13 || TrigPattern == 18 || TrigPattern == 19 } ;Dual wheel, 4G63, Audi 135, Nissan 360, Miata 99-05, weber-marelli
dialog = lockSparkSettings, "Locked timing"
field = "Enabled Fixed/Locked timing", fixAngEnable
field = "Fixed Angle", FixAng, { fixAngEnable }
field = "#Note: During cranking the fixed/locked timing angle is overriden by the Cranking advance angle value above"
dialog = newIgnitionMode, "New Ignition Mode"
field = "This option will improve accuracy on most compatible triggers"
field = "However if timing issues are encountered, please disable this"
field = "Use new ignition mode", perToothIgn
dialog = sparkSettings,"Spark Settings",4
topicHelp = "https://wiki.speeduino.com/en/configuration/Spark_Settings"
field = "!Warning: The board you have selected may not have enough channels for sequential ignition!", {}, {}, { sparkMode == 3 && !sequentialIgnitionAvailable }
field = "Ignition load source", ignAlgorithm
field = "Spark output mode", sparkMode
field = "Cranking advance Angle", CrankAng
field = "Spark Outputs triggers", IgInv
panel = lockSparkSettings
panel = newIgnitionMode, {TrigPattern == 0 || TrigPattern == 1 || TrigPattern == 2 || TrigPattern == 3 || TrigPattern == 4 || TrigPattern == 9 || TrigPattern == 12 || TrigPattern == 13 || TrigPattern == 16 || TrigPattern == 18 || TrigPattern == 19} ;Only works for missing tooth, distributor, dual wheel, GM 7X, 4g63, Miata 99-05, nissan 360, Subaru 6/7, 420a, weber-marelli
dialog = dwellSettings, "Dwell Settings", 4
topicHelp = "https://wiki.speeduino.com/en/configuration/Dwell"
field = " Cranking dwell", dwellcrank
field = " Use dwell map", useDwellMap
field = " Running dwell", dwellrun, { useDwellMap == 0 }
field = " Spark duration", sparkDur
field = ""
field = "#Note"
field = "The above times are for 12V. Voltage correction"
field = "is applied. At higher voltages the time is reduced"
field = "and when low it is increased"
field = ""
field = "Overdwell protection"
field = "Use Overdwell protection", useDwellLim
field = "Max dwell time", dwellLim, { useDwellLim }
field = "Note: Set the maximum dwell time at least 3ms above"
field = "your desired dwell time (Including cranking)"
dialog = idleAdvanceSettings_east
field = "Idle advance mode", idleAdvEnabled
field = "Idle detect mode", idleAdvAlgorithm, { idleAdvEnabled >= 1 }
field = "Delay before idle control starts (s)",idleAdvDelay, { idleAdvEnabled >= 1 }
field = "Active Below RPM", idleAdvRPM, { idleAdvEnabled >= 1 }
field = "Active Below TPS", idleAdvTPS, { idleAdvEnabled >= 1 && idleAdvAlgorithm == 0 }
field = "Active Below VSS", idleAdvVss, { idleAdvEnabled >= 1 && vssMode > 0 }
field = "Closed Throttle Sensor Enabled", CTPSEnabled, { idleAdvEnabled >= 1 && idleAdvAlgorithm == 1 }
field = "Closed Throttle Sensor Pin", CTPSPin, { idleAdvEnabled >= 1 && idleAdvAlgorithm == 1 && CTPSEnabled == 1 }
field = "Closed Throttle Sensor Pin Polarity", CTPSPolarity, { idleAdvEnabled >= 1 && idleAdvAlgorithm == 1 && CTPSEnabled == 1 }
dialog = idleAdvanceSettings,"Idle Advance Settings", xAxis
topicHelp = "https://wiki.speeduino.com/en/configuration/IdleAdvance"
panel = idleAdvanceSettings_east
panel = idle_advance_curve, { idleAdvEnabled >= 1 }
panel = iacClosedLoop_curve, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || idleAdvEnabled >= 1 }
dialog = rotary_ignition, "Rotary Ignition", 4
field = "Ignition Configuration", rotaryType
panel = rotaryTrailing_curve
dialog = boostCut, "Boost Cut"
field = "Enable Boost limit", boostCutEnabled
field = "Boost Limit", boostLimit, { boostCutEnabled }
dialog = boostLoad, ""
field = "Mode", boostType
field = "In open loop mode, the values in this table are duty cycle %"
field = "In closed loop mode, the values are boost targets in kPa"
panel = boostTbl
dialog = revLimiterDialog, "Rev Limiter"
field = "Rev Limiter"
field = "!Soft limiter only available with ignition cut", {}, {}, { engineProtectType == 2 }
field = "Soft rev limit", SoftRevLim, { engineProtectType == 1 || engineProtectType == 3 } ;Only available for the protection modes that include ignition.
field = "Soft limiter mode", SoftLimitMode, { engineProtectType == 1 || engineProtectType == 3 } ;Only available for the protection modes that include ignition.
field = "Soft limit timing", SoftLimRetard, { engineProtectType == 1 || engineProtectType == 3 } ;Only available for the protection modes that include ignition.
field = "Soft limit max time", SoftLimMax, { engineProtectType == 1 || engineProtectType == 3 } ;Only available for the protection modes that include ignition.
field = "Hard Rev limit", HardRevLim
dialog = oilPressureProtection, "Oil Pressure"
field = "Oil Pressure Protection", oilPressureProtEnbl, { oilPressureEnable }
panel = oil_pressure_prot_curve, { oilPressureEnable && oilPressureProtEnbl }
indicatorPanel = protectIndicatorPanel, 1, { 1 }
indicator = { engineProtectStatus}, "Engine Protect OFF", "Engine Protect ON", green, black, red, black
indicator = { engineProtectRPM }, "Rev Limiter Off", "Rev Limiter ON", green, black, red, black
indicator = { engineProtectMAP }, "Boost Limit OFF", "Boost Limit ON", green, black, red, black
indicator = { engineProtectOil }, "Oil Pres. Protect OFF","Oil Pres. Protect ON",green, black, red, black
indicator = { engineProtectAFR }, "AFR Protect OFF", "AFR Protect ON", green, black, red, black
dialog = engineProtectionWest, ""
field = "Protection Cut", engineProtectType
field = "Engine Protection RPM min", engineProtectMaxRPM, { engineProtectType }
field = "Cut method", hardCutType, { engineProtectType == 1 || engineProtectType == 3 } ;Only available for the protection modes that include ignition.
panel = protectIndicatorPanel, { engineProtectType }
dialog = RevLimiterS, "Engine Protection and Limiters", xAxis
topicHelp = "https://wiki.speeduino.com/en/configuration/Rev_Limits"
panel = engineProtectionWest
panel = revLimiterDialog, { engineProtectType }
panel = boostCut, { engineProtectType }
panel = oilPressureProtection, { engineProtectType }
dialog = clutchInput, "Clutch input"
field = "Clutch Input Pin", launchPin, { launchEnable || flatSEnable }
field = "Clutch enabled when signal is",launchHiLo, { launchEnable || flatSEnable }
field = "Clutch Pullup Resistor", lnchPullRes, { launchEnable || flatSEnable }
field = "Launch / Flat Shift switch RPM",flatSArm, { launchEnable || flatSEnable }
dialog = LaunchControl, "Launch Control / Flat shift", 6
topicHelp = "https://wiki.speeduino.com/en/configuration/Launch_Flatshift"
panel = clutchInput
; Launch control
field = "Launch Control"
field = "Enable Launch", launchEnable
field = "TPS threshold", lnchCtrlTPS, { launchEnable }
field = "Soft rev limit", lnchSoftLim, { launchEnable }
field = "Soft limit absolute timing", lnchRetard, { launchEnable }
field = "Hard rev limit", lnchHardLim, { launchEnable }
field = "Fuel adder during launch", lnchFuelAdd, { launchEnable }
; Flat shift
field = "Flat Shift"
field = "Enable flat shift", flatSEnable
field = "Soft rev window", flatSSoftWin, { flatSEnable }
field = "Soft limit absolute timing", flatSRetard, { flatSEnable }
dialog = NitrousStage1, "Stage 1"
field = "Nitrous Output Pin", n2o_stage1_pin
field = "Minimum Engage RPM", n2o_stage1_minRPM
field = "Maximum Engage RPM", n2o_stage1_maxRPM
field = "Fuel adder @ Min RPM", n2o_stage1_adderMin
field = "Fuel adder @ Max RPM", n2o_stage1_adderMax
field = "Ignition retard when active", n2o_stage1_retard
dialog = NitrousStage2, "Stage 2"
field = "Nitrous Output Pin", n2o_stage2_pin
field = "Minimum Engage RPM", n2o_stage2_minRPM
field = "Maximum Engage RPM", n2o_stage2_maxRPM
field = "Fuel adder @ Min RPM", n2o_stage2_adderMin
field = "Fuel adder @ Max RPM", n2o_stage2_adderMax
field = "Ignition retard when active", n2o_stage2_retard
dialog = NitrousMain, "Settings"
field = "Nitrous Mode", n2o_enable
field = "Arming Pin", n2o_arming_pin, { n2o_enable > 0 }
field = "Nitrous is armed when pin is", n2o_pin_polarity,{ n2o_enable > 0 }
field = "Minimum CLT", n2o_minCLT, { n2o_enable > 0 }
field = "Minimum TPS", n2o_minTPS, { n2o_enable > 0 }
field = "Maximum MAP", n2o_maxMAP, { n2o_enable > 0 }
field = "Leanest AFR", n2o_maxAFR, { n2o_enable > 0 }
dialog = NitrousControl, "Nitrous"
topicHelp = "https://wiki.speeduino.com/en/configuration/Nitrous_Control"
panel = NitrousMain, North
panel = NitrousStage1, West, { n2o_enable > 0 }
panel = NitrousStage2, East, { n2o_enable > 1 }
dialog = OLED, "OLED Display", 2
field = "Display Type", display
field = "#Note"
field = "ECU must be rebooted after changing above value"
field = "Field 1", display1, { display }
field = "Field 2", display2, { display }
field = "Field 3", display3, { display }
field = "Field 4", display4, { display }
;field = "Bar 1", displayB1, { display }
;field = "Bar 2", displayB2, { display > 2 }
dialog = batCal, "Calibrate voltage reading"
topicHelp = "https://wiki.speeduino.com/en/configuration/Sensor_Calibration"
slider = "Battery Voltage reading offset", batVoltCorrect, horizontal
dialog = mapCal, "Calibrate MAP"
topicHelp = "https://wiki.speeduino.com/en/configuration/Sensor_Calibration"
field = "#MAP Sensor"
settingSelector = "Common Pressure Sensors"
settingOption = "MPX4115/MPXH6115/KP234", mapMin=10, mapMax=121 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf Vout = VCC * (0.009*P - 0.095)
settingOption = "MPX4250", mapMin=10, mapMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 0.04)
settingOption = "GM 1-BAR", mapMin=10, mapMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 2-BAR", mapMin=9, mapMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 3-BAR", mapMin=1, mapMax=315 ; VOUT = VS*(.00318*P-.00353)
settingOption = "MPXH6300", mapMin=1, mapMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
settingOption = "MPX5700", mapMin=-31, mapMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
settingOption = "MPX6400", mapMin=3, mapMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP0.00842)
settingOption = "Denso 079800", mapMin=0, mapMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
settingOption = "VW/Audi/Porsche 250kPa", mapMin=26, mapMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
settingOption = "Bosch 3 Bar TMAP", mapMin=-6, mapMax=323
field = "kPa At 0.0 Volts", mapMin
field = "kPa At 5.0 Volts", mapMax
field = "Use legacy MAP reading",legacyMAP
field = "#Baro Sensor"
field = "Use external Baro sensor", useExtBaro
field = "Analog pin to use for ext. Baro sensor", baroPin, { useExtBaro }
settingSelector = "Common Pressure Sensors", { useExtBaro }
settingOption = "MPX4115/MPXH6115/KP234", baroMin=10, baroMax=121 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf Vout = VCC * (0.009*P - 0.095)
settingOption = "MPX4250", baroMin=10, baroMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 0.04)
settingOption = "GM 1-BAR", baroMin=10, baroMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 2-BAR", baroMin=9, baroMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 3-BAR", baroMin=1, baroMax=315 ; VOUT = VS*(.00318*P-.00353)
settingOption = "MPXH6300", baroMin=1, baroMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
settingOption = "MPX5700", baroMin=-31, baroMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
settingOption = "MPX6400", baroMin=3, baroMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP0.00842)
settingOption = "Denso 079800", baroMin=0, baroMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
settingOption = "VW/Audi/Porsche 250kPa", baroMin=26, baroMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
settingOption = "Bosch 3 Bar TMAP", mapMin=-6, mapMax=323
field = "kPa At 0.0 Volts", baroMin, { useExtBaro }
field = "kPa At 5.0 Volts", baroMax, { useExtBaro }
field = "#EMAP Sensor"
field = "Use EMAP sensor", useEMAP
field = "Analog pin to use for ext. Baro sensor", EMAPPin, { useEMAP }
settingSelector = "Common Pressure Sensors", { useEMAP }
settingOption = "MPX4115", EMAPMin=10, EMAPMax=118 ; https://www.nxp.com/docs/en/data-sheet/MPX4115.pdf
settingOption = "MPX4250", EMAPMin=10, EMAPMax=260 ; https://www.nxp.com/docs/en/data-sheet/MPX4250A.pdf Vout = VCC x (P x 0.004 0.04)
settingOption = "GM 1-BAR", EMAPMin=10, EMAPMax=105 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 2-BAR", EMAPMin=9, EMAPMax=208 ; https://speeduino.com/wiki/index.php/File:GM_Table.gif
settingOption = "GM 3-BAR", EMAPMin=1, EMAPMax=315 ; VOUT = VS*(.00318*P-.00353)
settingOption = "MPXH6300", EMAPMin=1, EMAPMax=315 ; https://www.nxp.com/docs/en/data-sheet/MPXH6300A.pdf VOUT = VS*(.00318*P-.00353)
settingOption = "MPX5700", EMAPMin=-31, EMAPMax=746 ; https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf Vout = VS*(0.0012858*P+0.04)
settingOption = "MPX6400", EMAPMin=3, EMAPMax=416 ; https://www.nxp.com/docs/en/data-sheet/MPXH6400A.pdf VOUT = VS x (0.002421xP0.00842)
settingOption = "Denso 079800", EMAPMin=0, EMAPMax=173 ; http://speeduino.com/forum/viewtopic.php?f=18&t=510&p=7023#p7021
settingOption = "VW/Audi/Porsche 250kPa", EMAPMin=26, EMAPMax=250 ; http://speeduino.com/forum/viewtopic.php?p=17502#p17502
field = "kPa At 0.0 Volts", EMAPMin, { useEMAP }
field = "kPa At 5.0 Volts", EMAPMax, { useEMAP }
dialog = sensorFilters, "Analog sensor filters"
field = "The values here set the amount of filtering to apply to each analog input"
field = "Higher values result in stronger filtering, but slower response times for readings"
field = "#Most setups will NOT require changes to the default filter values"
field = ""
slider = "Throttle Position Sensor", ADCFILTER_TPS, horizontal
slider = "Coolant Sensor", ADCFILTER_CLT, horizontal
slider = "Inlet Air Temp sensor", ADCFILTER_IAT, horizontal
slider = "O2 sensor", ADCFILTER_O2, horizontal
slider = "Battery voltage", ADCFILTER_BAT, horizontal
slider = "MAP sensor", ADCFILTER_MAP, horizontal
slider = "Baro sensor", ADCFILTER_BARO, horizontal, { useExtBaro > 0 }
dialog = fuelPressureSettings
field = "Enabled", fuelPressureEnable
field = "Pin", fuelPressurePin, { fuelPressureEnable }
settingSelector = "Common Sensors", { fuelPressureEnable }
settingOption = "0-100 PSI", fuelPressureMin=-3, fuelPressureMax=103 ; Vout = VCC x (P x .97 / 200 + 0.5)
settingOption = "0-150 PSI", fuelPressureMin=-18, fuelPressureMax=168 ; Vout = VCC x (P x 0.8 / 150 + 0.1) https://aftermarketindustries.com.au/image/cache/data/aftermarket%20industries%20fuel%20pressure%20sensor%20data%202-500x500.png
field = "Pressure at 0v", fuelPressureMin, { fuelPressureEnable }
field = "Pressure at 5v", fuelPressureMax, { fuelPressureEnable }
dialog = fuelPressureDialog, "Fuel Pressure", xAxis
gauge = fuelPressureGauge
panel = fuelPressureSettings
dialog = oilPressureSettings
field = "Enabled", oilPressureEnable
field = "Pin", oilPressurePin, { oilPressureEnable }
settingSelector = "Common Sensors", { oilPressureEnable }
settingOption = "0-100 PSI", oilPressureMin=-3, oilPressureMax=103 ; Vout = VCC x (P x .97 / 200 + 0.5)
settingOption = "0-150 PSI", oilPressureMin=-18, oilPressureMax=168 ; Vout = VCC x (P x 0.8 / 150 + 0.1) https://aftermarketindustries.com.au/image/cache/data/aftermarket%20industries%20fuel%20pressure%20sensor%20data%202-500x500.png
field = "Pressure at 0v", oilPressureMin, { oilPressureEnable }
field = "Pressure at 5v", oilPressureMax, { oilPressureEnable }
dialog = oilPressureDialog, "Oil Pressure", xAxis
gauge = oilPressureGauge
panel = oilPressureSettings
dialog = pressureSensors, "Pressure Transducers"
topicHelp = "https://wiki.speeduino.com/en/configuration/Sensor_Calibration"
panel = fuelPressureDialog
panel = oilPressureDialog
dialog = boostSettings, "Boost Control"
topicHelp = "https://wiki.speeduino.com/en/configuration/Boost_Control"
field = "Boost Control Enabled", boostEnabled
field = "Boost control type", boostType, { boostEnabled }
field = "Boost output pin", boostPin, { boostEnabled }
field = "Boost solenoid freq.", boostFreq, { boostEnabled }
field = "Valve minimum duty cycle", boostMinDuty, { boostEnabled && boostType == 1 }
field = "Valve maximum duty cycle", boostMaxDuty, { boostEnabled && boostType == 1 }
panel = boostCut
field = "Closed Loop settings"
field = "Control mode", boostMode, { boostEnabled && boostType == 1 }
slider = "Sensitivity", boostSens, horizontal, { boostEnabled && boostType == 1 }
field = "Control interval", boostIntv, { boostEnabled && boostType == 1 }
field = "P", boostKP, { boostEnabled && boostMode && boostType == 1 }
field = "I", boostKI, { boostEnabled && boostMode && boostType == 1 }
field = "D", boostKD, { boostEnabled && boostMode && boostType == 1 }
dialog = vvtClosedLoop, "Closed loop"
field = "Hold duty used", vvtCLUseHold
field = "Hold duty", vvtCLholdDuty, { vvtCLUseHold }
field = "Adjust fuel timing", vvtCLAlterFuelTiming
field = "Cam angle @ 0% duty", vvtCLMinAng
field = ""
field = "Proportional Gain", vvtCLKP
field = "Integral Gain", vvtCLKI
field = "Differential Gain", vvtCLKD
field = "Minimum valve duty", vvtCLminDuty, { vvtEnabled && vvtMode == 2 }
field = "Maximum valve duty", vvtCLmaxDuty, { vvtEnabled && vvtMode == 2 }
dialog = vvtSettings, "VVT Control"
field = "VVT Control Enabled", vvtEnabled
field = "VVT Mode", vvtMode, { vvtEnabled }
field = "#Please note that close loop is currently experimental for Miata patterns ONLY"
field = "Load source", vvtLoadSource, { vvtEnabled }
field = "Use VVT map as On / Off only", VVTasOnOff, { vvtEnabled && vvtMode != 2 }
field = "VVT output pin", vvt1Pin, { vvtEnabled }
field = "VVT solenoid freq.", vvtFreq, { vvtEnabled }
field = "Increased duty direction", vvtPWMdir, { vvtEnabled }
panel = vvtClosedLoop, { vvtEnabled && vvtMode == 2 }
dialog = wmiSettings, "WMI Control"
field = "#Experimental!"
field = "WMI Control Enabled", wmiEnabled
field = "WMI Mode", wmiMode, { wmiEnabled }
field = "WMI min TPS", wmiTPS, { wmiEnabled }
field = "WMI min RPM", wmiRPM , { wmiEnabled }
field = "WMI min MAP", wmiMAP, { wmiEnabled }
field = "WMI max MAP", wmiMAP2, { wmiEnabled && wmiMode == 1}
field = "WMI min IAT", wmiIAT, { wmiEnabled }
field = "WMI offset", wmiOffset, { wmiEnabled && wmiMode == 3}
field = ""
field = "WMI PWM output pin", vvt1Pin, { wmiEnabled }
field = "WMI PWM freq.", vvtFreq, { wmiEnabled }
field = ""
field = "WMI enabled output pin", wmiEnabledPin, { wmiEnabled }
field = ""
field = "WMI tank empty input", wmiEmptyEnabled, { wmiEnabled }
field = "WMI tank empty pin", wmiEmptyPin, { wmiEnabled }
field = "WMI tank empty polarity", wmiEmptyPolarity, { wmiEnabled }
field = ""
field = "WMI tank indicator output", wmiIndicatorEnabled, { wmiEnabled }
field = "WMI tank indicator pin", wmiIndicatorPin, { wmiEnabled }
field = "WMI tank indicator polarity", wmiIndicatorPolarity, { wmiEnabled }
field = ""
field = "Iginition advance correction", wmiAdvEnabled, { wmiEnabled }
panel = wmi_adv_curve, { wmiEnabled && wmiAdvEnabled }
dialog = warmup, "Warmup Enrichment (WUE) - Percent Multiplier"
panel = warmup_curve
;Fuel trim composite dialog
dialog = inj_trim1TblTitle, "Channel #1"
panel = fuelTrimTable1Tbl, { fuelTrimEnabled }
dialog = inj_trim2TblTitle, "Channel #2"
panel = fuelTrimTable2Tbl, { fuelTrimEnabled }
dialog = inj_trim3TblTitle, "Channel #3"
panel = fuelTrimTable3Tbl, { fuelTrimEnabled }
dialog = inj_trim4TblTitle, "Channel #4"
panel = fuelTrimTable4Tbl, { fuelTrimEnabled }
dialog = inj_trim5TblTitle, "Channel #5"
panel = fuelTrimTable5Tbl, { fuelTrimEnabled }
dialog = inj_trim6TblTitle, "Channel #6"
panel = fuelTrimTable6Tbl, { fuelTrimEnabled }
dialog = inj_trim7TblTitle, "Channel #7"
panel = fuelTrimTable7Tbl, { fuelTrimEnabled }
dialog = inj_trim8TblTitle, "Channel #8"
panel = fuelTrimTable8Tbl, { fuelTrimEnabled }
dialog = inj_trimadt, "", xAxis
panel = inj_trim1TblTitle
panel = inj_trim2TblTitle
dialog = inj_trimadb, "", xAxis
panel = inj_trim3TblTitle
panel = inj_trim4TblTitle
dialog = inj_trimadt_B, "", xAxis
panel = inj_trim5TblTitle
panel = inj_trim6TblTitle
dialog = inj_trimadb_B, "", xAxis
panel = inj_trim7TblTitle
panel = inj_trim8TblTitle
dialog = inj_trim_enable, ""
field = "Individual fuel trim enabled", fuelTrimEnabled, { injLayout == 3 && nCylinders <= nFuelChannels }
dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis
panel = inj_trim_enable, North
panel = inj_trimadt, Center
panel = inj_trimadb, South
dialog = inj_trimad_B,"Injector Cyl 5-8 Trims", yAxis
panel = inj_trim_enable, North
panel = inj_trimadt_B, Center
panel = inj_trimadb_B, South
;;Injector staging
dialog = stagingTableDialog_north, ""
field = "Staging enabled", stagingEnabled
field = "Staging mode", stagingMode
field = "Size of primary injectors", stagedInjSizePri, { stagingEnabled }
field = "Size of secondary injectors", stagedInjSizeSec, { stagingEnabled }
dialog = stagingTableDialog_south, ""
panel = stagingTbl, { stagingMode == 0 }
dialog = stagingTableDialog, "Staged injection"
topicHelp = "https://wiki.speeduino.com/en/configuration/Staged_Injection"
panel = stagingTableDialog_north, North
panel = stagingTableDialog_south, South
dialog = outputtest_warningmessage, ""
field = "WARNING! USE AT YOUR OWN RISK. INCORRECT USE WILL DAMAGE YOUR HARDWARE!"
field = "Do not attempt to use this page whilst your engine is running!"
field = "Forcing the Injector or Spark outputs could cause flooding of your engine or permanent damage to ignition coils!"
dialog = enableoutputtestbuttons, "Enable Test Controls", xAxis
;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags
; The rem > 0 expression is just for testing.. It works when the arduino is on the Stim with rpm.
; a status bit there would be the expected real expression
commandButton = "Enable Test Mode", cmdEnableTestMode,{!testenabled && !testactive }
; 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 = "Stop Test Mode", cmdStopTestMode,{testactive}, clickOnCloseIfEnabled
dialog = outputtestinj1, "Injector CH1", yAxis
commandButton = "Off", cmdtestinj1off,{testactive}
commandButton = "50% DC", cmdtestinj150dc,{!testenabled && testactive}
commandButton = "On", cmdtestinj1on,{!testenabled & testactive}
dialog = outputtestinj2, "Injector CH2", yAxis
commandButton = "Off", cmdtestinj2off,{testactive && nFuelChannels >= 2 }
commandButton = "50% DC", cmdtestinj250dc,{!testenabled && testactive && nFuelChannels >= 2 }
commandButton = "On", cmdtestinj2on,{ !testenabled && testactive && nFuelChannels >= 2 }
dialog = outputtestinj3, "Injector CH3", yAxis
commandButton = "Off", cmdtestinj3off,{ testactive && nFuelChannels >= 3 }
commandButton = "50% DC", cmdtestinj350dc,{!testenabled && testactive && nFuelChannels >= 3 }
commandButton = "On", cmdtestinj3on,{ !testenabled && testactive && nFuelChannels >= 3 }
dialog = outputtestinj4, "Injector CH4", yAxis
commandButton = "Off", cmdtestinj4off,{ testactive && nFuelChannels >= 4 }
commandButton = "50% DC", cmdtestinj450dc,{!testenabled && testactive && nFuelChannels >= 4 }
commandButton = "On", cmdtestinj4on ,{ !testenabled && testactive && nFuelChannels >= 4 }
dialog = outputtestinj5, "Injector CH5", yAxis
commandButton = "Off", cmdtestinj5off,{ testactive && nFuelChannels >= 5 }
commandButton = "50% DC", cmdtestinj550dc,{!testenabled && testactive && nFuelChannels >= 5 }
commandButton = "On", cmdtestinj5on,{ !testenabled && testactive && nFuelChannels >= 5 }
dialog = outputtestinj6, "Injector CH6", yAxis
commandButton = "Off", cmdtestinj6off,{ testactive && nFuelChannels >= 6 }
commandButton = "50% DC", cmdtestinj650dc,{!testenabled && testactive && nFuelChannels >= 6 }
commandButton = "On", cmdtestinj6on ,{ !testenabled & testactive && nFuelChannels >= 6 }
dialog = outputtestinj7, "Injector CH7", yAxis
commandButton = "Off", cmdtestinj7off,{ testactive && nFuelChannels >= 7 }
commandButton = "50% DC", cmdtestinj750dc,{!testenabled && testactive && nFuelChannels >= 7 }
commandButton = "On", cmdtestinj7on,{ !testenabled && testactive && nFuelChannels >= 7 }
dialog = outputtestinj8, "Injector CH8", yAxis
commandButton = "Off", cmdtestinj8off,{ testactive && nFuelChannels >= 8 }
commandButton = "50% DC", cmdtestinj850dc,{!testenabled && testactive && nFuelChannels >= 8 }
commandButton = "On", cmdtestinj8on ,{ !testenabled & testactive && nFuelChannels >= 8 }
dialog = outputtest_injectors, "Injector Driver Output Test", xAxis
panel = outputtestinj1
panel = outputtestinj2
panel = outputtestinj3
panel = outputtestinj4
panel = outputtestinj5
panel = outputtestinj6
panel = outputtestinj7
panel = outputtestinj8
dialog = outputtestspk1, "Spark CH1 ", yAxis
commandButton = "Off", cmdtestspk1off,{testactive}
commandButton = "50% DC", cmdtestspk150dc,{!testenabled && testactive}
commandButton = "On", cmdtestspk1on,{!testenabled && testactive}
dialog = outputtestspk2, "Spark CH2", yAxis
commandButton = "Off", cmdtestspk2off,{testactive && nIgnChannels >= 2 }
commandButton = "50% DC", cmdtestspk250dc,{!testenabled && testactive && nIgnChannels >= 2 }
commandButton = "On", cmdtestspk2on,{ !testenabled && testactive && nIgnChannels >= 2 }
dialog = outputtestspk3, "Spark CH3", yAxis
commandButton = "Off", cmdtestspk3off,{testactive && nIgnChannels >= 3 }
commandButton = "50% DC", cmdtestspk350dc,{!testenabled && testactive && nIgnChannels >= 3 }
commandButton = "On", cmdtestspk3on,{ !testenabled && testactive && nIgnChannels >= 3 }
dialog = outputtestspk4, "Spark CH4", yAxis
commandButton = "Off", cmdtestspk4off,{testactive && nIgnChannels >= 4 }
commandButton = "50% DC", cmdtestspk450dc,{!testenabled && testactive && nIgnChannels >= 4}
commandButton = "On", cmdtestspk4on,{ !testenabled && testactive && nIgnChannels >= 4 }
dialog = outputtestspk5, "Spark CH5", yAxis
commandButton = "Off", cmdtestspk5off,{testactive && nIgnChannels >= 5 }
commandButton = "50% DC", cmdtestspk550dc,{!testenabled && testactive && nIgnChannels >= 5}
commandButton = "On", cmdtestspk5on,{ !testenabled && testactive && nIgnChannels >= 5 }
dialog = outputtestspk6, "Spark CH6", yAxis
commandButton = "Off", cmdtestspk6off,{testactive && nIgnChannels >= 6 }
commandButton = "50% DC", cmdtestspk650dc,{!testenabled && testactive && nIgnChannels >= 6}
commandButton = "On", cmdtestspk6on,{ !testenabled && testactive && nIgnChannels >= 6 }
dialog = outputtestspk7, "Spark CH7", yAxis
commandButton = "Off", cmdtestspk7off,{testactive && nIgnChannels >= 7 }
commandButton = "50% DC", cmdtestspk750dc,{!testenabled && testactive && nIgnChannels >= 7}
commandButton = "On", cmdtestspk7on,{ !testenabled && testactive && nIgnChannels >= 7 }
dialog = outputtestspk8, "Spark CH8", yAxis
commandButton = "Off", cmdtestspk8off,{testactive && nIgnChannels >= 8 }
commandButton = "50% DC", cmdtestspk850dc,{!testenabled && testactive && nIgnChannels >= 8}
commandButton = "On", cmdtestspk8on,{ !testenabled && testactive && nIgnChannels >= 8 }
dialog = outputtest_spark, "Spark Driver Output Test", xAxis
panel = outputtestspk1
panel = outputtestspk2
panel = outputtestspk3
panel = outputtestspk4
panel = outputtestspk5
panel = outputtestspk6
panel = outputtestspk7
panel = outputtestspk8
dialog = outputtest1,"Test Output Hardware"
topicHelp = "https://wiki.speeduino.com/en/Hardware_testing_page"
panel = enableoutputtestbuttons
panel = outputtest_injectors
panel = outputtest_spark
;panel = outputtest_io2
panel = outputtest_warningmessage
dialog = stm32cmd, "STM32 Commands", yAxis
commandButton = "Reboot to system", cmdstm32reboot
commandButton = "Reboot to bootloader", cmdstm32bootloader
dialog = Auxin_north
displayOnlyField = #"Secondary Serial ENABLED", blankfield, {enable_secondarySerial},{enable_secondarySerial}
displayOnlyField = !"Secondary Serial DISABLED", blankfield, {enable_secondarySerial == 0},{enable_secondarySerial == 0}
displayOnlyField = #"Internal CANBUS ENABLED", blankfield, {enable_intcan && intcan_available},{enable_intcan && intcan_available}
displayOnlyField = !"Internal CANBUS DISABLED", blankfield, {enable_intcan == 0 && intcan_available},{enable_intcan == 0 && intcan_available}
displayOnlyField = !"Internal CANBUS NOT AVAILABLE to MCU", blankfield, {enable_intcan == 1 && intcan_available == 0},{enable_intcan == 1 && intcan_available == 0}
displayOnlyField = !"Internal CANBUS NOT AVAILABLE to MCU", blankfield, {enable_intcan == 0 && intcan_available == 0},{enable_intcan == 0 && intcan_available == 0}
field = " If Secondary Serial or Internal CANBUS is DISABLED then any input channel assigned to that external source will NOT function"
dialog = canAuxinput_alias, "", yAxis
field = "Input Alias"
field = "", AUXin00Alias , {(caninput_sel0a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin01Alias , {(caninput_sel1a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin02Alias , {(caninput_sel2a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin03Alias , {(caninput_sel3a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin04Alias , {(caninput_sel4a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin05Alias , {(caninput_sel5a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin06Alias , {(caninput_sel6a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin07Alias , {(caninput_sel7a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin08Alias , {(caninput_sel8a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin09Alias , {(caninput_sel9a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin10Alias , {(caninput_sel10a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin11Alias , {(caninput_sel11a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin12Alias , {(caninput_sel12a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin13Alias , {(caninput_sel13a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin14Alias , {(caninput_sel14a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin15Alias , {(caninput_sel15a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
dialog = caninput_sel, ""
;CAN inputs
field = " CAN Input Channel on/off"
field = "CAN Input 0", caninput_sel0a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 0", caninput_sel0b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 1", caninput_sel1a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 1", caninput_sel1b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 2", caninput_sel2a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 2", caninput_sel2b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 3", caninput_sel3a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 3", caninput_sel3b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 4", caninput_sel4a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 4", caninput_sel4b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 5", caninput_sel5a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 5", caninput_sel5b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 6", caninput_sel6a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 6", caninput_sel6b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 7", caninput_sel7a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 7", caninput_sel7b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 8", caninput_sel8a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 8", caninput_sel8b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 9", caninput_sel9a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 9", caninput_sel9b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 10", caninput_sel10a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 10", caninput_sel10b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 11", caninput_sel11a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 11", caninput_sel11b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 12", caninput_sel12a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 12", caninput_sel12b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 13", caninput_sel13a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 13", caninput_sel13b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 14", caninput_sel14a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 14", caninput_sel14b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "CAN Input 15", caninput_sel15a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "CAN Input 15", caninput_sel15b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
dialog = caninput_parameter_group, "", yAxis
field = " Source CAN Address"
field = "", caninput_source_can_address0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_can_address15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
dialog = caninput_parameter_start_byte, "", yAxis
field = " source data start byte"
field = "", caninput_source_start_byte0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_start_byte15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
dialog = caninput_parameter_num_byte, "", yAxis
field = "Input Parameter Number of Bytes"
field = "", caninput_source_num_bytes0, { (caninput_sel0a == 1 || caninput_sel0b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes1, { (caninput_sel1a == 1 || caninput_sel1b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes2, { (caninput_sel2a == 1 || caninput_sel2b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes3, { (caninput_sel3a == 1 || caninput_sel3b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes4, { (caninput_sel4a == 1 || caninput_sel4b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes5, { (caninput_sel5a == 1 || caninput_sel5b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes6, { (caninput_sel6a == 1 || caninput_sel6b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes7, { (caninput_sel7a == 1 || caninput_sel7b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes8, { (caninput_sel8a == 1 || caninput_sel8b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes9, { (caninput_sel9a == 1 || caninput_sel9b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes10, { (caninput_sel10a == 1 || caninput_sel10b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes11, { (caninput_sel11a == 1 || caninput_sel11b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes12, { (caninput_sel12a == 1 || caninput_sel12b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes13, { (caninput_sel13a == 1 || caninput_sel13b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes14, { (caninput_sel14a == 1 || caninput_sel14b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
field = "", caninput_source_num_bytes15, { (caninput_sel15a == 1 || caninput_sel15b == 1) && (enable_secondarySerial || (enable_intcan && intcan_available)) }
dialog = caninput_serial_can, "", yAxis
field = "Serial/CAN"
field = "", caninput_sel0extsourcea, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel0extsourceb, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel0extsourcec, {(caninput_sel0a == 1 || caninput_sel0b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel1extsourcea, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel1extsourceb, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel1extsourcec, {(caninput_sel1a == 1 || caninput_sel1b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel2extsourcea, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel2extsourceb, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel2extsourcec, {(caninput_sel2a == 1 || caninput_sel2b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel3extsourcea, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel3extsourceb, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel3extsourcec, {(caninput_sel3a == 1 || caninput_sel3b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel4extsourcea, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel4extsourceb, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel4extsourcec, {(caninput_sel4a == 1 || caninput_sel4b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel5extsourcea, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel5extsourceb, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel5extsourcec, {(caninput_sel5a == 1 || caninput_sel5b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel6extsourcea, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel6extsourceb, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel6extsourcec, {(caninput_sel6a == 1 || caninput_sel6b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel7extsourcea, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel7extsourceb, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel7extsourcec, {(caninput_sel7a == 1 || caninput_sel7b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel8extsourcea, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel8extsourceb, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel8extsourcec, {(caninput_sel8a == 1 || caninput_sel8b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel9extsourcea, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel9extsourceb, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel9extsourcec, {(caninput_sel9a == 1 || caninput_sel9b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel10extsourcea, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel10extsourceb, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel10extsourcec, {(caninput_sel10a == 1 || caninput_sel10b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel11extsourcea, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}
field = "", caninput_sel11extsourceb, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel11extsourcec, {(caninput_sel11a == 1 || caninput_sel11b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel12extsourcea, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
field = "", caninput_sel12extsourceb, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel12extsourcec, {(caninput_sel12a == 1 || caninput_sel12b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel13extsourcea, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
field = "", caninput_sel13extsourceb, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel13extsourcec, {(caninput_sel13a == 1 || caninput_sel13b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel14extsourcea, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
field = "", caninput_sel14extsourceb, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel14extsourcec, {(caninput_sel14a == 1 || caninput_sel14b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel15extsourcea, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {enable_secondarySerial && (!enable_intcan || (enable_intcan && !intcan_available))}}
field = "", caninput_sel15extsourceb, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {enable_secondarySerial && (enable_intcan && intcan_available)}
field = "", caninput_sel15extsourcec, {(caninput_sel15a == 1 || caninput_sel15b == 1) }, {!enable_secondarySerial && (enable_intcan && intcan_available)}
dialog = caninconfig_blank1,""
field = ""
dialog = Canin_config1, "", xAxis
panel = canAuxinput_alias
panel = caninconfig_blank1
panel = caninput_sel
panel = caninconfig_blank1
panel = caninput_serial_can
panel = caninconfig_blank1
panel = caninput_parameter_group
panel = caninconfig_blank1
panel = caninput_parameter_start_byte
panel = caninconfig_blank1
panel = caninput_parameter_num_byte
;dialog = Canin_config2, "External Data Input"
; field = "Enable External data input", enable_intcandata_in
dialog = Canin_config, "",yAxis
topicHelp = "http://speeduino.com/wiki/index.php/Secondary_Serial_IO_interface#Read_external_analog_data"
panel = Auxin_north
panel = Canin_config1
dialog = canAuxoutput_alias, "", yAxis
field = "Input Alias"
field = "", AUXin00Alias , {canoutput_sel0}
field = "", AUXin01Alias , {canoutput_sel1}
field = "", AUXin02Alias , {canoutput_sel2}
field = "", AUXin03Alias , {canoutput_sel3}
field = "", AUXin04Alias , {canoutput_sel4}
field = "", AUXin05Alias , {canoutput_sel5}
field = "", AUXin06Alias , {canoutput_sel6}
field = "", AUXin07Alias , {canoutput_sel7}
;field = "", AUXin08Alias , {canoutput_sel8}
;field = "", AUXin09Alias , {canoutput_sel9}
;field = "", AUXin10Alias , {canoutput_sel10}
;field = "", AUXin11Alias , {canoutput_sel11}
;field = "", AUXin12Alias , {canoutput_sel12}
;field = "", AUXin13Alias , {canoutput_sel13}
;field = "", AUXin14Alias , {canoutput_sel14}
;field = "", AUXin15Alias , {canoutput_sel15}
dialog = canoutput_sel, "", yAxis
;CAN outputs
field = "CAN Output Channel on/off"
field = "CAN Output 0", canoutput_sel0, { enable_intcandata_out}
field = "CAN Output 1", canoutput_sel1, { enable_intcandata_out }
field = "CAN Output 2", canoutput_sel2, { enable_intcandata_out }
field = "CAN Output 3", canoutput_sel3, { enable_intcandata_out }
field = "CAN Output 4", canoutput_sel4, { enable_intcandata_out }
field = "CAN Output 5", canoutput_sel5, { enable_intcandata_out }
field = "CAN Output 6", canoutput_sel6, { enable_intcandata_out }
field = "CAN Output 7", canoutput_sel7, { enable_intcandata_out }
; field = "CAN Output 8", canoutput_sel8, { enable_intcandata_out}
; field = "CAN Output 9", canoutput_sel9, { enable_intcandata_out }
; field = "CAN Output 10", canoutput_sel10, { enable_intcandata_out }
; field = "CAN Output 11", canoutput_sel11, { enable_intcandata_out }
; field = "CAN Output 12", canoutput_sel12, { enable_intcandata_out }
; field = "CAN Output 13", canoutput_sel13, { enable_intcandata_out }
; field = "CAN Output 14", canoutput_sel14, { enable_intcandata_out }
; field = "CAN Output 15", canoutput_sel15, { enable_intcandata_out }
dialog = canoutput_parameter_group, "", yAxis
field = "Output Parameter Group"
field = "", canoutput_param_group[0], { canoutput_sel0 && enable_intcandata_out }
field = "", canoutput_param_group[1], { canoutput_sel1 && enable_intcandata_out }
field = "", canoutput_param_group[2], { canoutput_sel3 && enable_intcandata_out }
field = "", canoutput_param_group[3], { canoutput_sel3 && enable_intcandata_out }
field = "", canoutput_param_group[4], { canoutput_sel4 && enable_intcandata_out }
field = "", canoutput_param_group[5], { canoutput_sel5 && enable_intcandata_out }
field = "", canoutput_param_group[6], { canoutput_sel6 && enable_intcandata_out }
field = "", canoutput_param_group[7], { canoutput_sel7 && enable_intcandata_out }
; field = "", canoutput_param_group[8], { canoutput_sel9 && enable_intcandata_out }
; field = "", canoutput_param_group[9], { canoutput_sel10 && enable_intcandata_out }
; field = "", canoutput_param_group[10], { canoutput_sel1 && enable_intcandata_out }
; field = "", canoutput_param_group[11], { canoutput_sel2 && enable_intcandata_out }
; field = "", canoutput_param_group[12], { canoutput_sel3 && enable_intcandata_out }
; field = "", canoutput_param_group[13], { canoutput_sel4 && enable_intcandata_out }
; field = "", canoutput_param_group[14], { canoutput_sel5 && enable_intcandata_out }
; field = "", canoutput_param_group[15], { canoutput_sel6 && enable_intcandata_out }
dialog = canoutput_parameter_start_byte, "", yAxis
field = "Output Parameter Start Byte"
field = "", canoutput_param_start_byte0, { canoutput_sel0 && enable_intcandata_out }
field = "", canoutput_param_start_byte1, { canoutput_sel1 && enable_intcandata_out }
field = "", canoutput_param_start_byte2, { canoutput_sel2 && enable_intcandata_out }
field = "", canoutput_param_start_byte3, { canoutput_sel3 && enable_intcandata_out }
field = "", canoutput_param_start_byte4, { canoutput_sel4 && enable_intcandata_out }
field = "", canoutput_param_start_byte5, { canoutput_sel5 && enable_intcandata_out }
field = "", canoutput_param_start_byte6, { canoutput_sel6 && enable_intcandata_out }
field = "", canoutput_param_start_byte7, { canoutput_sel7 && enable_intcandata_out }
; field = "", canoutput_param_start_byte8, { canoutput_sel8 && enable_intcandata_out }
; field = "", canoutput_param_start_byte9, { canoutput_sel9 && enable_intcandata_out }
; field = "", canoutput_param_start_byte10, { canoutput_sel10 && enable_intcandata_out }
; field = "", canoutput_param_start_byte11, { canoutput_sel11 && enable_intcandata_out }
; field = "", canoutput_param_start_byte12, { canoutput_sel12 && enable_intcandata_out }
; field = "", canoutput_param_start_byte13, { canoutput_sel13 && enable_intcandata_out }
; field = "", canoutput_param_start_byte14, { canoutput_sel14 && enable_intcandata_out }
; field = "", canoutput_param_start_byte15, { canoutput_sel15 && enable_intcandata_out }
dialog = canoutput_parameter_num_byte, "", yAxis
field = "Output Parameter Number of Bytes"
field = "", canoutput_param_num_bytes0, { canoutput_sel0 && enable_intcandata_out }
field = "", canoutput_param_num_bytes1, { canoutput_sel1 && enable_intcandata_out }
field = "", canoutput_param_num_bytes2, { canoutput_sel2 && enable_intcandata_out }
field = "", canoutput_param_num_bytes3, { canoutput_sel3 && enable_intcandata_out }
field = "", canoutput_param_num_bytes4, { canoutput_sel4 && enable_intcandata_out }
field = "", canoutput_param_num_bytes5, { canoutput_sel5 && enable_intcandata_out }
field = "", canoutput_param_num_bytes6, { canoutput_sel6 && enable_intcandata_out }
field = "", canoutput_param_num_bytes7, { canoutput_sel7 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes8, { canoutput_sel8 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes9, { canoutput_sel9 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes10, { canoutput_sel10 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes11, { canoutput_sel11 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes12, { canoutput_sel12 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes13, { canoutput_sel13 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes14, { canoutput_sel14 && enable_intcandata_out }
; field = "", canoutput_param_num_bytes15, { canoutput_sel15 && enable_intcandata_out }
dialog = canoutconfig_blank1,""
field = ""
dialog = Canout_config1, "", xAxis
panel = canAuxoutput_alias
panel = canoutconfig_blank1
panel = canoutput_sel
panel = canoutconfig_blank1
panel = canoutput_parameter_group
panel = canoutconfig_blank1
panel = canoutput_parameter_start_byte
panel = canoutconfig_blank1
panel = canoutput_parameter_num_byte
dialog = Canout_config2, "CAN Data Out"
field = "Enable CanBus data Output", enable_intcandata_out
dialog = Canout_config, "", yAxis
topicHelp = ""
panel = Canout_config2
panel = Canout_config1
dialog = can_serial3IO, "CanBus/Secondary Serial IO interface"
topicHelp = "http://speeduino.com/wiki/index.php/Secondary_Serial_IO_interface"
field = "Enable Second Serial", enable_secondarySerial
field = "Enable Internal Canbus", enable_intcan
; field = "Speeduino TsCanId", speeduino_tsCanId
field = "True Canbus Address", true_address {enable_secondarySerial||enable_intcan}
field = "NOTE! Realtime Data Base Address MUST be at least 0x16 GREATER than the True Address as they are reserved for future expansion"
field = "Realtime Data Base Can Address", realtime_base_address {enable_secondarySerial||enable_intcan}
field = "Speeduino OBD address", obd_address
dialog = serial3IO, "Secondary Serial IO interface"
topicHelp = "http://speeduino.com/wiki/index.php/Serial3_IO_interface"
field = "Enable Second Serial", enable_secondarySerial
field = "Enable Internal Canbus", enable_intcan
; field = "Speeduino TsCanId", speeduino_tsCanId
field = "True Canbus Address", true_address {enable_secondarySerial||enable_intcan}
field = "NOTE! Realtime Data Base Address MUST be at least 0x16 GREATER than the True Address as they are reserved for future expansion"
field = "Realtime Data Base Can Address", realtime_base_address {enable_secondarySerial||enable_intcan}
field = "Speeduino OBD address", obd_address
dialog = reset_control, "Reset Control"
; Control type options for custom firmware
field = "Control Type", resetControl
field = "Control Pin", resetControlPin
dialog = Auxinput_pin_selection, "", yAxis
field = " Source"
displayOnlyField = "Off 0", blankfield, {},{(caninput_sel0a == 0 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel0b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel0b == 0 && (!enable_secondarySerial && (enable_intcan && intcan_available == 1)))}
displayOnlyField = "External Source 0 Via Secondary Serial", blankfield, {},{(caninput_sel0b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel0b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel0extsourceb == 0)}
displayOnlyField = "External Source 0 Via Internal CAN", blankfield, {},{(caninput_sel0b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel0extsourceb == 1) ||(caninput_sel0b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel0extsourcec == 1)}
field = "Local Analog Source 0 Pin No:", Auxin0pina , {}, {(caninput_sel0a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 0 Pin No:", Auxin0pinb , {}, {(caninput_sel0a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 1", blankfield, {},{(caninput_sel1a == 0 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 0 && ((enable_secondarySerial && enable_intcan) || (enable_secondarySerial && !enable_intcan) || (!enable_secondarySerial && enable_intcan)))}
displayOnlyField = "External Source 1 Via Secondary Serial", blankfield, {},{(caninput_sel1b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel1b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourceb == 0)}
displayOnlyField = "External Source 1 Via Internal CAN", blankfield, {},{(caninput_sel1b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourceb == 1) ||(caninput_sel1b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel1extsourcec == 1)}
field = "Local Analog Source 1 Pin No:", Auxin1pina , {}, {(caninput_sel1a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 1 Pin No:", Auxin1pinb , {}, {(caninput_sel1a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 2", blankfield, {},{(caninput_sel2a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel2b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel2b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel2b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 2 Via Secondary Serial", blankfield, {},{(caninput_sel2b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel2b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel2extsourceb == 0)}
displayOnlyField = "External Source 2 Via Internal CAN", blankfield, {},{(caninput_sel2b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel2extsourceb == 1) ||(caninput_sel2b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel2extsourcec == 1)}
field = "Local Analog Source 2 Pin No:", Auxin2pina , {}, {(caninput_sel2a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 2 Pin No:", Auxin2pinb , {}, {(caninput_sel2a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 3", blankfield, {},{(caninput_sel3a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel3b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel3b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel3b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 3 Via Secondary Serial", blankfield, {},{(caninput_sel3b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel3b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel3extsourceb == 0)}
displayOnlyField = "External Source 3 Via Internal CAN", blankfield, {},{(caninput_sel3b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel3extsourceb == 1) ||(caninput_sel3b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel3extsourcec == 1)}
field = "Local Analog Source 3 Pin No:", Auxin3pina , {}, {(caninput_sel3a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 3 Pin No:", Auxin3pinb , {}, {(caninput_sel3a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 4", blankfield, {},{(caninput_sel4a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel4b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel4b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel4b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 4 Via Secondary Serial", blankfield, {},{(caninput_sel4b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel4b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel4extsourceb == 0)}
displayOnlyField = "External Source 4 Via Internal CAN", blankfield, {},{(caninput_sel4b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel4extsourceb == 1) ||(caninput_sel4b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel4extsourcec == 1)}
field = "Local Analog Source 4 Pin No:", Auxin4pina , {}, {(caninput_sel4a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 4 Pin No:", Auxin4pinb , {}, {(caninput_sel4a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 5", blankfield, {},{(caninput_sel5a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel5b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel5b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel5b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 5 Via Secondary Serial", blankfield, {},{(caninput_sel5b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel5b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel5extsourceb == 0)}
displayOnlyField = "External Source 5 Via Internal CAN", blankfield, {},{(caninput_sel5b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel5extsourceb == 1) ||(caninput_sel5b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel5extsourcec == 1)}
field = "Local Analog Source 5 Pin No:", Auxin5pina , {}, {(caninput_sel5a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 5 Pin No:", Auxin5pinb , {}, {(caninput_sel5a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 6", blankfield, {},{(caninput_sel6a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel6b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel6b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel6b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 6 Via Secondary Serial", blankfield, {},{(caninput_sel6b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel6b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel6extsourceb == 0)}
displayOnlyField = "External Source 6 Via Internal CAN", blankfield, {},{(caninput_sel6b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel6extsourceb == 1) ||(caninput_sel6b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel6extsourcec == 1)}
field = "Local Analog Source 6 Pin No:", Auxin6pina , {}, {(caninput_sel6a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 6 Pin No:", Auxin6pinb , {}, {(caninput_sel6a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 7", blankfield, {},{(caninput_sel7a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel7b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel7b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel7b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 7 Via Secondary Serial", blankfield, {},{(caninput_sel7b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel7b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel7extsourceb == 0)}
displayOnlyField = "External Source 7 Via Internal CAN", blankfield, {},{(caninput_sel7b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel7extsourceb == 1) ||(caninput_sel7b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel7extsourcec == 1)}
field = "Local Analog Source 7 Pin No:", Auxin7pina , {}, {(caninput_sel7a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 7 Pin No:", Auxin7pinb , {}, {(caninput_sel7a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 8", blankfield, {},{(caninput_sel8a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel8b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel8b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel8b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 8 Via Secondary Serial", blankfield, {},{(caninput_sel8b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel8b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel8extsourceb == 0)}
displayOnlyField = "External Source 8 Via Internal CAN", blankfield, {},{(caninput_sel8b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel8extsourceb == 1) ||(caninput_sel8b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel8extsourcec == 1)}
field = "Local Analog Source 8 Pin No:", Auxin8pina , {}, {(caninput_sel8a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 8 Pin No:", Auxin8pinb , {}, {(caninput_sel8a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 9", blankfield, {},{(caninput_sel9a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel9b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel9b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel9b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 9 Via Secondary Serial", blankfield, {},{(caninput_sel9b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel9b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel9extsourceb == 0)}
displayOnlyField = "External Source 9 Via Internal CAN", blankfield, {},{(caninput_sel9b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel9extsourceb == 1) ||(caninput_sel9b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel9extsourcec == 1)}
field = "Local Analog Source 9 Pin No:", Auxin9pina , {}, {(caninput_sel9a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 9 Pin No:", Auxin9pinb , {}, {(caninput_sel9a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 10", blankfield, {},{(caninput_sel10a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel10b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel10b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel10b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 10 Via Secondary Serial", blankfield, {},{(caninput_sel10b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel10b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel10extsourceb == 0)}
displayOnlyField = "External Source 10 Via Internal CAN", blankfield, {},{(caninput_sel10b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel10extsourceb == 1) ||(caninput_sel10b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel10extsourcec == 1)}
field = "Local Analog Source 10 Pin No:", Auxin10pina , {}, {(caninput_sel10a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 10 Pin No:", Auxin10pinb , {}, {(caninput_sel10a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 11", blankfield, {},{(caninput_sel11a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel11b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel11b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel11b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 11 Via Secondary Serial", blankfield, {},{(caninput_sel11b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel11b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel11extsourceb == 0)}
displayOnlyField = "External Source 11 Via Internal CAN", blankfield, {},{(caninput_sel11b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel11extsourceb == 1) ||(caninput_sel11b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel11extsourcec == 1)}
field = "Local Analog Source 11 Pin No:", Auxin11pina , {}, {(caninput_sel11a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 11 Pin No:", Auxin11pinb , {}, {(caninput_sel11a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 12", blankfield, {},{(caninput_sel12a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel12b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel12b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel12b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 12 Via Secondary Serial", blankfield, {},{(caninput_sel12b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel12b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel12extsourceb == 0)}
displayOnlyField = "External Source 12 Via Internal CAN", blankfield, {},{(caninput_sel12b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel12extsourceb == 1) ||(caninput_sel12b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel12extsourcec == 1)}
field = "Local Analog Source 12 Pin No:", Auxin12pina , {}, {(caninput_sel12a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 12 Pin No:", Auxin12pinb , {}, {(caninput_sel12a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 13", blankfield, {},{(caninput_sel13a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel13b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel13b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel13b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 13 Via Secondary Serial", blankfield, {},{(caninput_sel13b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel13b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel13extsourceb == 0)}
displayOnlyField = "External Source 13 Via Internal CAN", blankfield, {},{(caninput_sel13b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel13extsourceb == 1) ||(caninput_sel13b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel13extsourcec == 1)}
field = "Local Analog Source 13 Pin No:", Auxin13pina , {}, {(caninput_sel13a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 13 Pin No:", Auxin13pinb , {}, {(caninput_sel13a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 14", blankfield, {},{(caninput_sel14a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel14b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel14b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel14b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 14 Via Secondary Serial", blankfield, {},{(caninput_sel14b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel14b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel14extsourceb == 0)}
displayOnlyField = "External Source 14 Via Internal CAN", blankfield, {},{(caninput_sel14b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel14extsourceb == 1) ||(caninput_sel14b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel14extsourcec == 1)}
field = "Local Analog Source 14 Pin No:", Auxin14pina , {}, {(caninput_sel14a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 14 Pin No:", Auxin14pinb , {}, {(caninput_sel14a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
displayOnlyField = "Off 15", blankfield, {},{(caninput_sel15a == 0 && (!enable_secondarySerial && !enable_intcan)) || (caninput_sel15b == 0 && (enable_secondarySerial && enable_intcan)) || (caninput_sel15b == 0 && (enable_secondarySerial && !enable_intcan)) || (caninput_sel15b == 0 && (!enable_secondarySerial && enable_intcan))}
displayOnlyField = "External Source 15 Via Secondary Serial", blankfield, {},{(caninput_sel15b == 1 && enable_secondarySerial && ((enable_intcan && intcan_available == 0) || !enable_intcan)) || (caninput_sel15b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel15extsourceb == 0)}
displayOnlyField = "External Source 15 Via Internal CAN", blankfield, {},{(caninput_sel15b == 1 && enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel15extsourceb == 1) ||(caninput_sel15b == 1 && !enable_secondarySerial && (enable_intcan && intcan_available) && caninput_sel15extsourcec == 1)}
field = "Local Analog Source 15 Pin No:", Auxin15pina , {}, {(caninput_sel15a == 2 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b == 2 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
field = "Local Digital Source 15 Pin No:", Auxin15pinb , {}, {(caninput_sel15a == 3 && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b == 3 && (enable_secondarySerial || (enable_intcan && intcan_available == 1 )))}
dialog = Auxinput_alias, "", yAxis
field = "Input Alias"
field = "", AUXin00Alias , {(caninput_sel0a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel0b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin01Alias , {(caninput_sel1a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel1b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin02Alias , {(caninput_sel2a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel2b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin03Alias , {(caninput_sel3a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel3b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin04Alias , {(caninput_sel4a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel4b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin05Alias , {(caninput_sel5a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel5b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin06Alias , {(caninput_sel6a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel6b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin07Alias , {(caninput_sel7a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel7b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin08Alias , {(caninput_sel8a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel8b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin09Alias , {(caninput_sel9a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel9b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin10Alias , {(caninput_sel10a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel10b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin11Alias , {(caninput_sel11a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel11b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin12Alias , {(caninput_sel12a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel12b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin13Alias , {(caninput_sel13a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel13b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin14Alias , {(caninput_sel14a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel14b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
field = "", AUXin15Alias , {(caninput_sel15a && (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0)))) || (caninput_sel15b && (enable_secondarySerial || (enable_intcan && intcan_available)))}
dialog = Auxinput_channelenable, "", yAxis
field = " Aux Input Channel Enable"
field = "AUX Input 0", caninput_sel0a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 0", caninput_sel0b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 1", caninput_sel1a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 1", caninput_sel1b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 2", caninput_sel2a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 2", caninput_sel2b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 3", caninput_sel3a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 3", caninput_sel3b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 4", caninput_sel4a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 4", caninput_sel4b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 5", caninput_sel5a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 5", caninput_sel5b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 6", caninput_sel6a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 6", caninput_sel6b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 7", caninput_sel7a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 7", caninput_sel7b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 8", caninput_sel8a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 8", caninput_sel8b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 9", caninput_sel9a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 9", caninput_sel9b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 10", caninput_sel10a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 10", caninput_sel10b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 11", caninput_sel11a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 11", caninput_sel11b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 12", caninput_sel12a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 12", caninput_sel12b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 13", caninput_sel13a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 13", caninput_sel13b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 14", caninput_sel14a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 14", caninput_sel14b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
field = "AUX Input 15", caninput_sel15a, {}, { (!enable_secondarySerial && (!enable_intcan || (enable_intcan && intcan_available == 0))) }
field = "AUX Input 15", caninput_sel15b, {}, { (enable_secondarySerial && enable_intcan) || (!enable_secondarySerial && (enable_intcan && intcan_available)) || (enable_secondarySerial && !enable_intcan) }
dialog = Auxin_south, "Auxillary Input Configuration",xAxis
panel = Auxinput_alias
panel = Auxinput_channelenable
panel = Auxinput_pin_selection
dialog = Auxin_config, "",yAxis
panel = Auxin_north
panel = Auxin_south
dialog = gaugeLimits, "Gauge Limits"
field = "#RPM"
field = "Warning", rpmwarn
field = "Danger", rpmdang
field = "High", rpmhigh
field = "#MAP"
field = "Warning", mapwarn
field = "Danger", mapdang
field = "High", maphigh
field = !"Reload project to update gauges"
dialog = io_summary, "I/O Summary"
displayOnlyField = "fuelPumpPin", fuelPumpPin, {fpPrime}
displayOnlyField = "fanPin", fanPin, {fanEnable}
displayOnlyField = "tachoPin", tachoPin, {tachoDuration}
displayOnlyField = "idleUpPin", idleUpPin, {idleUpEnabled}
displayOnlyField = "idleUpOutputPin", idleUpOutputPin, {idleUpEnabled && idleUpOutputEnabled}
displayOnlyField = "launchPin", launchPin, {launchEnable}
displayOnlyField = "vvt1Pin", vvt1Pin, {vvtEnabled}
displayOnlyField = "vssPin", vssPin, {vssMode > 1}
displayOnlyField = "boostPin", boostPin, {boostEnabled}
displayOnlyField = "baroPin", baroPin,{useExtBaro}
displayOnlyField = "EMAPPin", EMAPPin, {useEMAP}
displayOnlyField = "n2o_arming_pin", n2o_arming_pin, {n2o_enable}
displayOnlyField = "n2o_stage1_pin", n2o_stage1_pin, {n2o_enable}
displayOnlyField = "n2o_stage2_pin", n2o_stage2_pin, {n2o_enable}
;displayOnlyField = "knock_pin", knock_pin, {knock_mode}
displayOnlyField = "fuel2InputPin", fuel2InputPin, {fuel2Mode}
displayOnlyField = "resetControlPin", resetControlPin, {resetControl}
displayOnlyField = "ignBypassPin", ignBypassPin, {ignBypassEnable}
displayOnlyField = "Programmable out 1", outputPin0, {outputPin[0]}
displayOnlyField = "Programmable out 2", outputPin1, {outputPin[1]}
displayOnlyField = "Programmable out 3", outputPin2, {outputPin[2]}
displayOnlyField = "Programmable out 4", outputPin3, {outputPin[3]}
displayOnlyField = "Programmable out 5", outputPin4, {outputPin[4]}
displayOnlyField = "Programmable out 6", outputPin5, {outputPin[5]}
displayOnlyField = "Programmable out 7", outputPin6, {outputPin[6]}
displayOnlyField = "Programmable out 8", outputPin7, {outputPin[7]}
dialog = prgm_out_pin_selection_1, "", yAxis
field = ""
field = "", outputInverted0, {outputPin[0]}
field = "", outputInverted1, {outputPin[1]}
field = "", outputInverted2, {outputPin[2]}
field = "", outputInverted3, {outputPin[3]}
field = "", outputInverted4, {outputPin[4]}
field = "", outputInverted5, {outputPin[5]}
field = "", outputInverted6, {outputPin[6]}
field = "", outputInverted7, {outputPin[7]}
dialog = prgm_out_pin_selection_2, "", yAxis
field = ""
field = "if(", firstDataIn0, {outputPin[0]}
field = "if(", firstDataIn1, {outputPin[1]}
field = "if(", firstDataIn2, {outputPin[2]}
field = "if(", firstDataIn3, {outputPin[3]}
field = "if(", firstDataIn4, {outputPin[4]}
field = "if(", firstDataIn5, {outputPin[5]}
field = "if(", firstDataIn6, {outputPin[6]}
field = "if(", firstDataIn7, {outputPin[7]}
dialog = prgm_out_pin_selection_3, "", yAxis
field = ""
field = "", firstCompType0, {outputPin[0]}
field = "", firstCompType1, {outputPin[1]}
field = "", firstCompType2, {outputPin[2]}
field = "", firstCompType3, {outputPin[3]}
field = "", firstCompType4, {outputPin[4]}
field = "", firstCompType5, {outputPin[5]}
field = "", firstCompType6, {outputPin[6]}
field = "", firstCompType7, {outputPin[7]}
dialog = prgm_out_pin_selection_4, "", yAxis
field = ""
field = "", firstTarget[0], {outputPin[0]}
field = "", firstTarget[1], {outputPin[1]}
field = "", firstTarget[2], {outputPin[2]}
field = "", firstTarget[3], {outputPin[3]}
field = "", firstTarget[4], {outputPin[4]}
field = "", firstTarget[5], {outputPin[5]}
field = "", firstTarget[6], {outputPin[6]}
field = "", firstTarget[7], {outputPin[7]}
dialog = prgm_out_pin_selection_5, "", yAxis
field = ""
field = "if(", firstDataIn[0], {outputPin[0]}
field = "if(", firstDataIn[1], {outputPin[1]}
field = "if(", firstDataIn[2], {outputPin[2]}
field = "if(", firstDataIn[3], {outputPin[3]}
field = "if(", firstDataIn[4], {outputPin[4]}
field = "if(", firstDataIn[5], {outputPin[5]}
field = "if(", firstDataIn[6], {outputPin[6]}
field = "if(", firstDataIn[7], {outputPin[7]}
dialog = prgm_out_pin_selection_6, "", yAxis
field = ""
field = "", firstCompType0, {outputPin[0]}
field = "", firstCompType1, {outputPin[1]}
field = "", firstCompType2, {outputPin[2]}
field = "", firstCompType3, {outputPin[3]}
field = "", firstCompType4, {outputPin[4]}
field = "", firstCompType5, {outputPin[5]}
field = "", firstCompType6, {outputPin[6]}
field = "", firstCompType7, {outputPin[7]}
dialog = prgm_out_pin_selection_, "", yAxis
field = ""
field = "", firstTarget[0], {outputPin[0]}
field = "", firstTarget[1], {outputPin[1]}
field = "", firstTarget[2], {outputPin[2]}
field = "", firstTarget[3], {outputPin[3]}
field = "", firstTarget[4], {outputPin[4]}
field = "", firstTarget[5], {outputPin[5]}
field = "", firstTarget[6], {outputPin[6]}
field = "", firstTarget[7], {outputPin[7]}
dialog = prgm_out_pin_selection_5, "", yAxis
field = ""
field = ")", bitwise0, {outputPin[0]}
field = ")", bitwise1, {outputPin[1]}
field = ")", bitwise2, {outputPin[2]}
field = ")", bitwise3, {outputPin[3]}
field = ")", bitwise4, {outputPin[4]}
field = ")", bitwise5, {outputPin[6]}
field = ")", bitwise6, {outputPin[6]}
field = ")", bitwise7, {outputPin[7]}
dialog = prgm_out_pin_selection_6, "", yAxis
field = ""
field = "", secondDataIn0, {outputPin[0] && bitwise0}
field = "", secondDataIn1, {outputPin[1] && bitwise1}
field = "", secondDataIn2, {outputPin[2] && bitwise2}
field = "", secondDataIn3, {outputPin[3] && bitwise3}
field = "", secondDataIn4, {outputPin[4] && bitwise4}
field = "", secondDataIn5, {outputPin[5] && bitwise5}
field = "", secondDataIn6, {outputPin[6] && bitwise6}
field = "", secondDataIn7, {outputPin[7] && bitwise7}
dialog = prgm_out_pin_selection_7, "", yAxis
field = ""
field = "", secondCompType0, {outputPin[0] && bitwise0}
field = "", secondCompType1, {outputPin[1] && bitwise1}
field = "", secondCompType2, {outputPin[2] && bitwise2}
field = "", secondCompType3, {outputPin[3] && bitwise3}
field = "", secondCompType4, {outputPin[4] && bitwise4}
field = "", secondCompType5, {outputPin[5] && bitwise5}
field = "", secondCompType6, {outputPin[6] && bitwise6}
field = "", secondCompType6, {outputPin[7] && bitwise7}
dialog = prgm_out_pin_selection_8, "", yAxis
field = ""
field = "", secondTarget[0], {outputPin[0] && bitwise0}
field = "", secondTarget[1], {outputPin[1] && bitwise1}
field = "", secondTarget[2], {outputPin[2] && bitwise2}
field = "", secondTarget[3], {outputPin[3] && bitwise3}
field = "", secondTarget[4], {outputPin[4] && bitwise4}
field = "", secondTarget[5], {outputPin[5] && bitwise5}
field = "", secondTarget[6], {outputPin[6] && bitwise6}
field = "", secondTarget[7], {outputPin[7] && bitwise7}
dialog = prgm_out_pin_selection_9, "", yAxis
field = ""
field = "during", outputDelay[0], {outputPin[0]}
field = "during", outputDelay[1], {outputPin[1]}
field = "during", outputDelay[2], {outputPin[2]}
field = "during", outputDelay[3], {outputPin[3]}
field = "during", outputDelay[4], {outputPin[4]}
field = "during", outputDelay[5], {outputPin[5]}
field = "during", outputDelay[6], {outputPin[6]}
field = "during", outputDelay[7], {outputPin[7]}
dialog = prgm_out_alias, "", yAxis
field = " Input Alias"
field = "", prgm_out00Alias, {outputPin[0]}
field = "", prgm_out01Alias, {outputPin[1]}
field = "", prgm_out02Alias, {outputPin[2]}
field = "", prgm_out03Alias, {outputPin[3]}
field = "", prgm_out04Alias, {outputPin[4]}
field = "", prgm_out05Alias, {outputPin[5]}
field = "", prgm_out06Alias, {outputPin[6]}
field = "", prgm_out07Alias, {outputPin[7]}
dialog = prgm_out_channelenable, "", yAxis
field = "Pin No:"
field = "", outputPin0
field = "", outputPin1
field = "", outputPin2
field = "", outputPin3
field = "", outputPin4
field = "", outputPin5
field = "", outputPin6
field = "", outputPin7
dialog = prgm_out_unique, "",xAxis
panel = prgm_out_channelenable
panel = prgm_out_alias
panel = prgm_out_pin_selection_1
panel = prgm_out_pin_selection_2
panel = prgm_out_pin_selection_3
panel = prgm_out_pin_selection_4
panel = prgm_out_pin_selection_5
panel = prgm_out_pin_selection_6
panel = prgm_out_pin_selection_7
panel = prgm_out_pin_selection_8
panel = prgm_out_pin_selection_9
;Rule 1
dialog = prgm_out_rules_1_condition_1, "Condition 1", xAxis
field = "", firstDataIn0, {outputPin[0]}
field = "", firstCompType0, {outputPin[0]}
field = "", firstTarget[0], {outputPin[0]}
dialog = prgm_out_rules_1_condition_2, "Condition 2", xAxis
field = "", secondDataIn0, {outputPin[0] && bitwise0}
field = "", secondCompType0, {outputPin[0] && bitwise0}
field = "", secondTarget[0], {outputPin[0] && bitwise0}
;Rule 2
dialog = prgm_out_rules_2_condition_1, "Condition 1", xAxis
field = "", firstDataIn1, {outputPin[1]}
field = "", firstCompType1, {outputPin[1]}
field = "", firstTarget[1], {outputPin[1]}
dialog = prgm_out_rules_2_condition_2, "Condition 2", xAxis
field = "", secondDataIn1, {outputPin[1] && bitwise1}
field = "", secondCompType1, {outputPin[1] && bitwise1}
field = "", secondTarget[1], {outputPin[1] && bitwise1}
;Rule 3
dialog = prgm_out_rules_3_condition_1, "Condition 1", xAxis
field = "", firstDataIn2, {outputPin[2]}
field = "", firstCompType2, {outputPin[2]}
field = "", firstTarget[2], {outputPin[2]}
dialog = prgm_out_rules_3_condition_2, "Condition 2", xAxis
field = "", secondDataIn2, {outputPin[2] && bitwise2}
field = "", secondCompType2, {outputPin[2] && bitwise2}
field = "", secondTarget[2], {outputPin[2] && bitwise2}
;Rule 4
dialog = prgm_out_rules_4_condition_1, "Condition 1", xAxis
field = "", firstDataIn3, {outputPin[3]}
field = "", firstCompType3, {outputPin[3]}
field = "", firstTarget[3], {outputPin[3]}
dialog = prgm_out_rules_4_condition_2, "Condition 2", xAxis
field = "", secondDataIn3, {outputPin[3] && bitwise3}
field = "", secondCompType3, {outputPin[3] && bitwise3}
field = "", secondTarget[3], {outputPin[3] && bitwise3}
;Rule 5
dialog = prgm_out_rules_5_condition_1, "Condition 1", xAxis
field = "", firstDataIn4, {outputPin[4]}
field = "", firstCompType4, {outputPin[4]}
field = "", firstTarget[4], {outputPin[4]}
dialog = prgm_out_rules_5_condition_2, "Condition 2", xAxis
field = "", secondDataIn4, {outputPin[4] && bitwise4}
field = "", secondCompType4, {outputPin[4] && bitwise4}
field = "", secondTarget[4], {outputPin[4] && bitwise4}
;Rule 6
dialog = prgm_out_rules_6_condition_1, "Condition 1", xAxis
field = "", firstDataIn5, {outputPin[5]}
field = "", firstCompType5, {outputPin[5]}
field = "", firstTarget[5], {outputPin[5]}
dialog = prgm_out_rules_6_condition_2, "Condition 2", xAxis
field = "", secondDataIn5, {outputPin[5] && bitwise5}
field = "", secondCompType5, {outputPin[5] && bitwise5}
field = "", secondTarget[5], {outputPin[5] && bitwise5}
;Rule 7
dialog = prgm_out_rules_7_condition_1, "Condition 1", xAxis
field = "", firstDataIn6, {outputPin[6]}
field = "", firstCompType6, {outputPin[6]}
field = "", firstTarget[6], {outputPin[6]}
dialog = prgm_out_rules_7_condition_2, "Condition 2", xAxis
field = "", secondDataIn6, {outputPin[6] && bitwise6}
field = "", secondCompType6, {outputPin[6] && bitwise6}
field = "", secondTarget[6], {outputPin[6] && bitwise6}
;Rule 8
dialog = prgm_out_rules_8_condition_1, "Condition 1", xAxis
field = "", firstDataIn7, {outputPin[7]}
field = "", firstCompType7, {outputPin[7]}
field = "", firstTarget[7], {outputPin[7]}
dialog = prgm_out_rules_8_condition_2, "Condition 2", xAxis
field = "", secondDataIn7, {outputPin[7] && bitwise7}
field = "", secondCompType7, {outputPin[7] && bitwise7}
field = "", secondTarget[7], {outputPin[7] && bitwise7}
dialog = prgm_out_rules_1, "Rule 1", yAxis
field = "Output Pin Num", outputPin0
field = "Rule Alias", prgm_out00Alias, {outputPin[0]}
field = "Output Polarity", outputInverted0, {outputPin[0]}
field = "Activation Delay", outputDelay[0], {outputPin[0]}
field = "2nd Condition", bitwise0, {outputPin[0]}
panel = prgm_out_rules_1_condition_1
panel = prgm_out_rules_1_condition_2
dialog = prgm_out_rules_2, "Rule 2", yAxis
field = "Output Pin Num", outputPin1
field = "Rule Alias", prgm_out01Alias, {outputPin[1]}
field = "Output Polarity", outputInverted1, {outputPin[1]}
field = "Activation Delay", outputDelay[1], {outputPin[1]}
field = "2nd Condition", bitwise1, {outputPin[1]}
panel = prgm_out_rules_2_condition_1
panel = prgm_out_rules_2_condition_2
dialog = prgm_out_rules_3, "Rule 3", yAxis
field = "Output Pin Num", outputPin2
field = "Rule Alias", prgm_out02Alias, {outputPin[2]}
field = "Output Polarity", outputInverted2, {outputPin[2]}
field = "Activation Delay", outputDelay[2], {outputPin[2]}
field = "2nd Condition", bitwise2, {outputPin[2]}
panel = prgm_out_rules_3_condition_1
panel = prgm_out_rules_3_condition_2
dialog = prgm_out_rules_4, "Rule 4", yAxis
field = "Output Pin Num", outputPin3
field = "Rule Alias", prgm_out03Alias, {outputPin[3]}
field = "Output Polarity", outputInverted3, {outputPin[3]}
field = "Activation Delay", outputDelay[3], {outputPin[3]}
field = "2nd Condition", bitwise3, {outputPin[3]}
panel = prgm_out_rules_4_condition_1
panel = prgm_out_rules_4_condition_2
dialog = prgm_out_rules_5, "Rule 5", yAxis
field = "Output Pin Num", outputPin4
field = "Rule Alias", prgm_out04Alias, {outputPin[4]}
field = "Output Polarity", outputInverted4, {outputPin[4]}
field = "Activation Delay", outputDelay[4], {outputPin[4]}
field = "2nd Condition", bitwise4, {outputPin[4]}
panel = prgm_out_rules_5_condition_1
panel = prgm_out_rules_5_condition_2
dialog = prgm_out_rules_6, "Rule 6", yAxis
field = "Output Pin Num", outputPin5
field = "Rule Alias", prgm_out05Alias, {outputPin[5]}
field = "Output Polarity", outputInverted5, {outputPin[5]}
field = "Activation Delay", outputDelay[5], {outputPin[5]}
field = "2nd Condition", bitwise5, {outputPin[5]}
panel = prgm_out_rules_6_condition_1
panel = prgm_out_rules_6_condition_2
dialog = prgm_out_rules_7, "Rule 7", yAxis
field = "Output Pin Num", outputPin6
field = "Rule Alias", prgm_out06Alias, {outputPin[6]}
field = "Output Polarity", outputInverted6, {outputPin[6]}
field = "Activation Delay", outputDelay[6], {outputPin[6]}
field = "2nd Condition", bitwise6, {outputPin[6]}
panel = prgm_out_rules_7_condition_1
panel = prgm_out_rules_7_condition_2
dialog = prgm_out_rules_8, "Rule 8", yAxis
field = "Output Pin Num", outputPin7
field = "Rule Alias", prgm_out07Alias, {outputPin[7]}
field = "Output Polarity", outputInverted7, {outputPin[7]}
field = "Activation Delay", outputDelay[7], {outputPin[7]}
field = "2nd Condition", bitwise7, {outputPin[7]}
panel = prgm_out_rules_8_condition_1
panel = prgm_out_rules_8_condition_2
dialog = prgm_out_rules_master, "", card
panel = prgm_out_rules_1, Center, { prgm_out_selection == 0 }
panel = prgm_out_rules_2, Center, { prgm_out_selection == 1 }
panel = prgm_out_rules_3, Center, { prgm_out_selection == 2 }
panel = prgm_out_rules_4, Center, { prgm_out_selection == 3 }
panel = prgm_out_rules_5, Center, { prgm_out_selection == 4 }
panel = prgm_out_rules_6, Center, { prgm_out_selection == 5 }
panel = prgm_out_rules_7, Center, { prgm_out_selection == 6 }
panel = prgm_out_rules_8, Center, { prgm_out_selection == 7 }
dialog = prgm_out_config, "",yAxis
;panel = prgm_out_unique
field = "Select Rule Number", prgm_out_selection
panel = prgm_out_rules_master
dialog = rtc_setup, "Real Time Clock"
field = "Real Time Clock mode", rtc_mode
field = "Real Time Clock Trim +/-", rtc_trim, {rtc_mode}
dialog = rtc_settings, "Real Time Clock"
panel = rtc_setup
panel = std_ms3Rtc
;-------------------------------------------------------------------------------
; General help text
help = helpGeneral, "Speeduino Online Manual"
webHelp = "https://wiki.speeduino.com/"
text = "For current WIKI documentation, click the Web Help button,"
text = "or visit http://www.speeduino.com/."
text = "<br>"
text = "<br>why not visit our forum http://speeduino.com/forum/"
;------------------------------------------------------------------------------
[ControllerCommands]
; commandName = command1, command2, commandn...
; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order.
; This does not include any resultant protocol envelope data, only the response data itself.
; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands
; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition
; and may create error messages.
; It is expected that these commands would not typically alter any ram mapped to a Constant.
cmdStopTestMode = "E\x01\x00"
cmdEnableTestMode = "E\x01\x01"
cmdtestinj1on = "E\x02\x01"
cmdtestinj1off = "E\x02\x02"
cmdtestinj150dc = "E\x02\x03"
cmdtestinj2on = "E\x02\x04"
cmdtestinj2off = "E\x02\x05"
cmdtestinj250dc = "E\x02\x06"
cmdtestinj3on = "E\x02\x07"
cmdtestinj3off = "E\x02\x08"
cmdtestinj350dc = "E\x02\x09"
cmdtestinj4on = "E\x02\x0A"
cmdtestinj4off = "E\x02\x0B"
cmdtestinj450dc = "E\x02\x0C"
cmdtestinj5on = "E\x02\x0D"
cmdtestinj5off = "E\x02\x0E"
cmdtestinj550dc = "E\x02\x0F"
cmdtestinj6on = "E\x02\x10"
cmdtestinj6off = "E\x02\x11"
cmdtestinj650dc = "E\x02\x12"
cmdtestinj7on = "E\x02\x13"
cmdtestinj7off = "E\x02\x14"
cmdtestinj750dc = "E\x02\x15"
cmdtestinj8on = "E\x02\x16"
cmdtestinj8off = "E\x02\x17"
cmdtestinj850dc = "E\x02\x18"
cmdtestspk1on = "E\x03\x01"
cmdtestspk1off = "E\x03\x02"
cmdtestspk150dc = "E\x03\x03"
cmdtestspk2on = "E\x03\x04"
cmdtestspk2off = "E\x03\x05"
cmdtestspk250dc = "E\x03\x06"
cmdtestspk3on = "E\x03\x07"
cmdtestspk3off = "E\x03\x08"
cmdtestspk350dc = "E\x03\x09"
cmdtestspk4on = "E\x03\x0A"
cmdtestspk4off = "E\x03\x0B"
cmdtestspk450dc = "E\x03\x0C"
cmdtestspk5on = "E\x03\x0D"
cmdtestspk5off = "E\x03\x0E"
cmdtestspk550dc = "E\x03\x0F"
cmdtestspk6on = "E\x03\x10"
cmdtestspk6off = "E\x03\x11"
cmdtestspk650dc = "E\x03\x12"
cmdtestspk7on = "E\x03\x13"
cmdtestspk7off = "E\x03\x14"
cmdtestspk750dc = "E\x03\x15"
cmdtestspk8on = "E\x03\x16"
cmdtestspk8off = "E\x03\x17"
cmdtestspk850dc = "E\x03\x18"
cmdstm32reboot = "E\x32\x00"
cmdstm32bootloader ="E\x32\x01"
cmdVSS60kmh = "E\x99\x00"
cmdVSSratio1 = "E\x99\x01"
cmdVSSratio2 = "E\x99\x02"
cmdVSSratio3 = "E\x99\x03"
cmdVSSratio4 = "E\x99\x04"
cmdVSSratio5 = "E\x99\x05"
cmdVSSratio6 = "E\x99\x06"
; -------------------------------------------------------------
; Help down here
[SettingContextHelp]
[CurveEditor]
;tps-based accel enrichment
curve = time_accel_tpsdot_curve, "TPS based AE"
columnLabel = "TPSdot", "Added"
xAxis = 0, 1200, 6
yAxis = 0, 250, 4
xBins = taeBins, TPSdot
yBins = taeRates
;map-based accel enrichment
curve = time_accel_mapdot_curve, "MAP based AE"
columnLabel = "MAPdot", "Added"
xAxis = 0, 1200, 6
yAxis = 0, 250, 4
xBins = maeBins, MAPdot
yBins = maeRates
; Correction curve for dwell vs battery voltage
curve = dwell_correction_curve, "Dwell voltage correction"
columnLabel = "Voltage", "Dwell"
xAxis = 6, 22, 6
yAxis = 0, 255, 6
xBins = brvBins, batteryVoltage
yBins = dwellRates
; Correction curve for injectors vs battery voltage
curve = injector_voltage_curve, "Injector voltage correction"
columnLabel = "Voltage", "Injector"
xAxis = 6, 22, 6
yAxis = 0, 255, 6
xBins = brvBins, batteryVoltage
yBins = injBatRates
; Curve for injector timign vs RPM
curve = injector_timing_curve, "Injector timing"
columnLabel = "RPM", "Injector"
xAxis = 0, 7000, 6
yAxis = 0, 720, 5
xBins = injAngRPM, rpm
yBins = injAng
; Correction curve for Air Density vs temperature
curve = airdensity_curve, "IAT density correction"
columnLabel = "Air Temperature", "Fuel Amount"
xAxis = -40, 160, 6
yAxis = 0, 255, 6
xBins = airDenBins, iat
yBins = airDenRates
; Correction curve for Barometric pressure fuel adjustment
curve = baroFuel_curve, "Baro fuel correction"
columnLabel = "Baro Pressure", "Fuel Amount"
xAxis = 75, 112, 6
yAxis = 0, 255, 6
xBins = baroFuelBins, baro
yBins = baroFuelValues
; Correction curve for fuel temperature fuel adjustment
curve = fuelTemp_curve, "Fuel temp correction"
columnLabel = "Fuel Temperature", "Fuel Amount"
xAxis = -40, 125, 6
yAxis = 0, 255, 6
xBins = fuelTempBins, fuelTemp
yBins = fuelTempValues
; IAT based ignition timing retard
curve = iat_retard_curve, "IAT timing retard"
columnLabel = "Inlet Air Temp", "Retard"
xAxis = -40, 200, 5
yAxis = 0, 30, 5
xBins = iatRetBins, iat
yBins = iatRetRates
; CLT based ignition timing retard
curve = clt_advance_curve, "Cold Advance"
columnLabel = "Coolant Temp", "Advance"
xAxis = -40, 200, 5
yAxis = -12.7, 12.7, 5
xBins = cltAdvBins, coolant
yBins = cltAdvValues
; Idle RPM target based ignition timing
curve = idle_advance_curve, "Idle Advance"
columnLabel = "RPM Delta", "Advance"
xAxis = -500, 500, 5
yAxis = -15, 50, 5
xBins = idleAdvBins, CLIdleDelta
yBins = idleAdvValues
size = 450, 200
; Curves for idle control
; Standard duty table for PWM valves
curve = iacPwm_curve, "IAC PWM Duty"
columnLabel = "Coolant Temperature", "Valve"
#if CELSIUS
xAxis = -40, 215, 6
#else
xAxis = -40, 315, 6
#endif
yAxis = 0, 100, 4
xBins = iacBins, coolant
yBins = iacOLPWMVal
; Cranking duty table for PWM valves
curve = iacPwmCrank_curve, "IAC PWM Cranking Duty"
columnLabel = "Coolant Temperature", "Valve"
xAxis = -40, 215, 6
yAxis = 0, 100, 4
xBins = iacCrankBins, coolant
yBins = iacCrankDuty
curve = iacStep_curve, "IAC Stepper Motor"
columnLabel = "Coolant Temperature", "Motor"
#if CELSIUS
xAxis = -40, 215, 6
#else
xAxis = -40, 315, 6
#endif
yAxis = 0, 850, 4
xBins = iacBins, coolant
yBins = iacOLStepVal
curve = iacStepCrank_curve, "IAC Stepper Motor Cranking"
columnLabel = "Coolant Temperature", "Motor"
xAxis = -40, 120, 6
yAxis = 0, 850, 4
xBins = iacCrankBins, coolant
yBins = iacCrankSteps
curve = iacClosedLoop_curve, "Idle RPM Targets"
columnLabel = "Coolant Temperature", "Motor"
xAxis = -40, 120, 6
yAxis = 0, 2000, 4
xBins = iacBins, coolant
yBins = iacCLValues
size = 450, 200
curve = rotaryTrailing_curve, "Rotary Trailing Split"
columnLabel = "Engine load", "Split"
yAxis = 0, 40, 4
xBins = rotarySplitBins, fuelLoad
xAxis = 0, { fuelLoadMax }, 5
yBins = rotarySplitValues
; Warmup enrichment curve
curve = warmup_curve, "Warmup Enrichment (WUE) Curve"
columnLabel = "Coolant", "WUE %"
xAxis = -40, 210, 9
yAxis = 0, 240, 6
xBins = wueBins, coolant
yBins = wueRates
gauge = cltGauge
; Cranking enrichment curve
curve = cranking_enrich_curve, "Cranking Enrichment Curve"
columnLabel = "Coolant", "Fuel Modifier"
xAxis = -40, 110, 9
yAxis = 0, 400, 6
xBins = crankingEnrichBins, coolant
yBins = crankingEnrichValues
;gauge = cltGau25
; Priming Pulsewidth curve
curve = priming_pw_curve, "Priming Pulsewidth"
columnLabel = "Coolant", "PW"
xAxis = -40, 110, 4
yAxis = 0, 10, 4
xBins = primeBins, coolant
yBins = primePulse
gauge = cltGauge
; Afterstart Enrichment curve
curve = afterstart_enrichment_curve, "ASE - Enrichment %"
columnLabel = "Coolant", "Enrichment"
xAxis = -40, 110, 4
yAxis = 0, 200, 4
xBins = aseBins, coolant
yBins = asePct
gauge = cltGauge
size = 50, 250
; Afterstart Enrichment time
curve = afterstart_enrichment_time, "ASE - Duration"
columnLabel = "Coolant", "Time"
xAxis = -40, 110, 4
yAxis = 0, 20, 4
xBins = aseBins, coolant
yBins = aseCount
gauge = cltGauge
size = 50, 250
; Flex fuel correction curves
curve = flex_fuel_curve, "Flex Fuel Adjustments"
columnLabel = "Ethanol", "Fuel"
xAxis = 0, 100, 10
yAxis = 50, 250, 5
xBins = flexFuelBins, flex
yBins = flexFuelAdj
size = 400, 200
curve = flex_adv_curve, "Flex Timing Advance"
columnLabel = "Ethanol", "Advance"
xAxis = 0, 100, 10
yAxis = 0, 50, 5
xBins = flexAdvBins, flex
yBins = flexAdvAdj
size = 400, 200
curve = flex_boost_curve, "Flex Boost Adjustments"
columnLabel = "Ethanol", "Boost"
xAxis = 0, 100, 10
yAxis = -100, 200, 5
xBins = flexBoostBins, flex
yBins = flexBoostAdj
size = 400, 200
;Knock sensor windows
curve = knock_window_angle_curve, "Knock Window"
columnLabel = "RPM", "Window Start"
xAxis = 0, 8000, 9
yAxis = -100, 100, 11
xBins = knock_window_rpms, rpm
yBins = knock_window_angle
size = 400, 200
curve = knock_window_duration_curve, "Knock Window Duration"
columnLabel = "RPM", "Window Duration"
xAxis = 0, 8000, 9
yAxis = 0, 100, 10
xBins = knock_window_rpms, rpm
yBins = knock_window_dur
size = 400, 200
; Oil Pressure protection curve
curve = oil_pressure_prot_curve, "Oil Pressure Protection"
columnLabel = "RPM", "Minimum PSI"
xAxis = 0, 8000, 9
yAxis = 0, 150, 3
xBins = oilPressureProtRPM, rpm
yBins = oilPressureProtMins
size = 400, 200
; Warmup enrichment VEAL AFR adjustment curves
curve = warmup_afr_curve, "Target Adjustment"
columnLabel = "Coolant", "Offset"
xAxis = -40, 210, 9
#if LAMBDA
yAxis = -0.3, 0.1, 5
#else
yAxis = -4, 1, 5
#endif
xBins = wueBins, coolant
yBins = wueAFR
curve = warmup_analyzer_curve, "Warmup Enrichment"
columnLabel = "Coolant", "Current WUE", "Coolant", "Recommended WUE"
xAxis = -40, 210, 9
yAxis = 100, 255, 6
xBins = wueBins, coolant
yBins = wueRates
yBins = wueRecommended
lineLabel = "Current WUE"
lineLabel = "Recommended WUE"
curve = wmi_adv_curve, "WMI Timing Advance"
columnLabel = "kPa", "Advance"
xAxis = 0, 511, 20
yAxis = 0, 50, 5
xBins = wmiAdvBins, map
yBins = wmiAdvAdj
size = 400, 200
[TableEditor]
; table_id, map3d_id, "title", page
table = veTable1Tbl, veTable1Map, "VE Table", 2
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
; constant, variable
xBins = rpmBins, rpm
yBins = fuelLoadBins, fuelLoad
xyLabels = "RPM", "Fuel Load: "
zBins = veTable
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTable2Tbl, fuel2Map, "Fuel Table 2", 11
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelRPM2Bins, rpm
yBins = fuelLoad2Bins, fuelLoad2
xyLabels = "RPM", "Fuel Load: "
zBins = veTable2
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = sparkTbl, sparkMap, "Ignition Advance Table", 3
xBins = rpmBins2, rpm
;yBins = ignLoadBins, ignLoad
yBins = mapBins1, ignLoad
xyLabels = "RPM", "Ignition Load: "
zBins = advTable1
gridHeight = 3.0
upDownLabel = "ADVANCING", "RETARDING"
table = spark2Tbl, spark2Map, "Second Ignition Advance Table", 14
xBins = rpmBins3, rpm
;yBins = ignLoadBins, ignLoad
yBins = mapBins2, ignLoad
xyLabels = "RPM", "Ignition Load: "
zBins = advTable2
gridHeight = 3.0
upDownLabel = "ADVANCING", "RETARDING"
;table = afrTbl, afrTableMap, "AFR Table", 5
table = afrTable1Tbl, afrTable1Map, "AFR Table", 5
xBins = rpmBinsAFR, rpm
yBins = loadBinsAFR, fuelLoad
zBins = afrTable
gridHeight = 1.0
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340
;#if BOOSTPSI
;table = boostTbl, boostMap, "Boost targets (PSI)", 8
;#else
;table = boostTbl, boostMap, "Boost targets (Absolute kPa)", 8
;#endif
table = boostTbl, boostMap, "Boost Duty / Target", 8
xBins = rpmBinsBoost, rpm
yBins = tpsBinsBoost, throttle
zBins = boostTable
gridHeight = 3.0
upDownLabel = "HIGHER", "LOWER"
table = vvtTbl, vvtMap, "VVT control Table", 8
xBins = rpmBinsVVT, rpm
;yBins = tpsBinsVVT, throttle
yBins = loadBinsVVT, vvtLoad
zBins = vvtTable
xyLabels = "RPM", "VVT Load: "
gridHeight = 3.0
upDownLabel = "HIGHER", "LOWER"
table = wmiTbl, wmiMapMap, "WMI control Table", 8
xBins = rpmBinsWMI, rpm
yBins = mapBinsWMI, map
zBins = wmiTable
xyLabels = "RPM", "WMI Load: "
gridHeight = 3.0
upDownLabel = "HIGHER", "LOWER"
table = stagingTbl, stagingMap, "Fuel Staging Table", 10
xBins = rpmBinsStaging, rpm
yBins = loadBinsStaging, fuelLoad
zBins = stagingTable
gridHeight = 3.0
upDownLabel = "HIGHER", "LOWER"
;--------- Sequential fuel trim maps -----------
table = fuelTrimTable1Tbl, fuelTrimTable1Map, "Fuel trim Table 1", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim1rpmBins, rpm
yBins = fuelTrim1loadBins, fuelLoad
zBins = fuelTrim1Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable2Tbl, fuelTrimTable2Map, "Fuel trim Table 2", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim2rpmBins, rpm
yBins = fuelTrim2loadBins, fuelLoad
zBins = fuelTrim2Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable3Tbl, fuelTrimTable3Map, "Fuel trim Table 3", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim3rpmBins, rpm
yBins = fuelTrim3loadBins, fuelLoad
zBins = fuelTrim3Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable4Tbl, fuelTrimTable4Map, "Fuel trim Table 4", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim4rpmBins, rpm
yBins = fuelTrim4loadBins, fuelLoad
zBins = fuelTrim4Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable5Tbl, fuelTrimTable5Map, "Fuel trim Table 5", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim5rpmBins, rpm
yBins = fuelTrim5loadBins, fuelLoad
zBins = fuelTrim5Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable6Tbl, fuelTrimTable6Map, "Fuel trim Table 6", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim6rpmBins, rpm
yBins = fuelTrim6loadBins, fuelLoad
zBins = fuelTrim6Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable7Tbl, fuelTrimTable7Map, "Fuel trim Table 7", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim7rpmBins, rpm
yBins = fuelTrim7loadBins, fuelLoad
zBins = fuelTrim7Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = fuelTrimTable8Tbl, fuelTrimTable8Map, "Fuel trim Table 8", 9
topicHelp = "http://speeduino.com/wiki/index.php/Tuning"
xBins = fuelTrim8rpmBins, rpm
yBins = fuelTrim8loadBins, fuelLoad
zBins = fuelTrim8Table
gridHeight = 2.0
gridOrient = 250, 0, 340
upDownLabel = "(RICHER)", "(LEANER)"
table = dwell_map, dwell_tblMap, "Dwell map", 4
xBins = rpmBinsDwell, rpm
yBins = mapBinsDwell, map
zBins = dwellTable
xyLabels = "RPM", "Load: "
gridHeight = 3.0
upDownLabel = "HIGHER", "LOWER"
;-------------------------------------------------------------------------------
[GaugeConfigurations]
;-------------------------------------------------------------------------------
; Define a gauge's characteristics here, then go to a specific layout
; block (Tuning or FrontPage) and use the name you've defined here to
; display that gauge in a particular position.
;
; Name = Case-sensitive, user-defined name for this gauge configuration.
; Var = Case-sensitive name of variable to be displayed, see the
; OutputChannels block in this file for possible values.
; Title = Title displayed at the top of the gauge.
; Units = Units displayed below value on gauge.
; Lo = Lower scale limit of gauge.
; Hi = Upper scale limit of gauge.
; LoD = Lower limit at which danger color is used for gauge background.
; LoW = Lower limit at which warning color is used.
; HiW = Upper limit at which warning color is used.
; HiD = Upper limit at which danger color is used.
; vd = Decimal places in displayed value
; ld = Label decimal places for display of Lo and Hi, above.
gaugeCategory = "Main"
;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
accelEnrichGauge = accelEnrich, "Accel Enrich", "%", 50, 150, -1, -1, 999, 999, 0, 0
injOpenGauge = inj_open, "Injector Open Time", "mSec", 0.0, 3.0, 0.0, 0.0, 3.0, 3.0, 3, 3
dutyCycleGauge = dutyCycle, "Duty Cycle", "%", 0, 100, -1, -1, 70, 80, 1, 1
stgDutyCycleGauge = stgDutyCycle, "Staging Duty Cycle", "%", 0, 100, -1, -1, 70, 80, 1, 1
egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 0, 0
gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 250, -1, -1, 151, 151, 0, 0
pulseWidthGauge = pulseWidth, "Pulse Width", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
pulseWidthGauge2 = pulseWidth2, "Pulse Width 2", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
pulseWidthGauge3 = pulseWidth3, "Pulse Width 3", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
pulseWidthGauge4 = pulseWidth4, "Pulse Width 4", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
veGauge = veCurr, "Current VE", "%", 0, 120, -1, -1, 999, 999, 0, 0
ve1Gauge = VE1, "VE1 (Fuel Table 1)", "%", 0, 120, -1, -1, 999, 999, 0, 0
ve2Gauge = VE2, "VE2 (Fuel Table 2)", "%", 0, 120, -1, -1, 999, 999, 0, 0
warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 200, 130, 140, 140, 150, 0, 0
aseEnrichGauge = ase_enrich, "Afterstart Enrichment","%", 0, 200, 130, 140, 140, 150, 0, 0
batCorrectGauge = bat_correction,"Voltage Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
iatCorrectGauge = airCorrection, "IAT Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
baroCorrectGauge = baroCorrection,"Baro Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
flexEnrich = flexFuelCor, "Flex Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
fuelTempCorGauge = fuelTempCor, "Fuel Temp Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
advanceGauge = advance, "Current Advance", "deg", 50, -10, 0, 0, 35, 45, 0, 0
advance1Gauge = advance1, "Advance1 (Spark Table 1)", "deg",50, -10, 0, 0, 35, 45, 0, 0
advance2Gauge = advance2, "Advance2 (Spark Table 2)", "deg",50, -10, 0, 0, 35, 45, 0, 0
dwellGauge = dwell, "Ign Dwell", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
boostTargetGauge = boostTarget, "Target Boost", "kPa", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0
boostDutyGauge = boostDuty, "Boost Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1
afrTargetGauge = afrTarget, "Target AFR", "", 7, 25, 12, 13, 15, 16, 2, 2
lambdaTargetGauge = lambdaTarget, "Target Lambda", "", 0.5, 1.5, 0.82, 0.89, 1.02, 1.09, 3, 3
IdleTargetGauge = CLIdleTarget, "Idle Target RPM", "RPM", 0, 2000, 300, 600, 1500, 1700, 0, 0
idleLoadGauge = idleLoad, "IAC Value", "%/Steps", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0
vvt1DutyCycleGauge= vvt1Duty, "VVT Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1
vvt1TargetGauge = vvt1Target, "VVT Target Angle", "deg", 0, 100, 15, 25, 65, 75, 0, 0
vvt1AngleGauge = vvt1Angle, "VVT Angle", "deg", -20, 100, 0, -5, 70, 90, 0, 0
vvt2DutyCycleGauge= vvt2Duty, "VVT Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1
vvt2TargetGauge = vvt2Target, "VVT Target Angle", "deg", 0, 100, 15, 25, 65, 75, 0, 0
vvt2AngleGauge = vvt2Angle, "VVT Angle", "deg", -20, 100, 0, -5, 70, 90, 0, 0
WMIdutyCycleGauge = wmiPW, "WMI Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1
gaugeCategory = "Sensor inputs"
mapGauge = map, "Engine MAP", "kPa", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0
mapGauge_psi = map_psi, "Engine MAP (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0
mapGauge_bar = map_bar, "Engine MAP (BAR)", "Bar", -1, 3, -1, -1, 5, 5, 2, 2
mapGauge_vacBoost = map_vacboost, "Engine MAP (in-Hg/PSI)", "in-Hg/PSI", -30, 30, -30, -30, 30, 30, 1, 1
baroGauge = baro, "Baro Pressure", "kPa", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0
batteryVoltage = batteryVoltage,"Battery Voltage", "volts", 0, 25, 8, 9, 15, 16, 2, 2
vssGauge = vss, "Vehicle Speed (kph)", "km/h", 0, 250, 5, 10, 180, 200, 0, 0
vssGaugeMPH = vssMPH, "Vehicle Speed (mph)", "mph", 0, 250, 5, 10, 180, 200, 0, 0
tpsADCGauge = tpsADC, "TPS ADC", "", 0, 255, -1, -1, 256, 256, 0, 0
throttleGauge = throttle, "Throttle Position", "%TPS", 0, 100, -1, 1, 90, 100, 0, 0
afrGauge = afr, "Air:Fuel Ratio", "", 7, 25, 12, 13, 15, 16, 2, 2
afrGauge2 = afr2, "Air:Fuel Ratio 2", "", 7, 25, 12, 13, 15, 16, 2, 2
lambdaGauge = lambda, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
#if CELSIUS
cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, -15, 0, 95, 105, 0, 0
iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, -15, 0, 95, 100, 0, 0
fuelTempGauge = fuelTemp, "Fuel Temp", "TEMP", -40, 215, -15, 0, 95, 100, 0, 0
#else
cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, 0, 30, 200, 220, 0, 0
iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, 0, 30, 200, 210, 0, 0
fuelTempGauge = fuelTemp, "Fuel Temp", "TEMP", -40, 215, 0, 30, 200, 210, 0, 0
#endif
flexGauge = flex, "Flex sensor", "%", 0, 100, -1, -1, 999, 999, 0, 0
fuelPressureGauge = fuelPressure, "Fuel Pressure", "PSI", -15, 100, 0, 20, 200, 245, 0, 0
oilPressureGauge = oilPressure, "Oil Pressure", "PSI", -15, 100, 0, 20, 200, 245, 0, 0
gaugeCategory = "Auxillary Input Channels"
AuxInGauge0 = auxin_gauge0, { stringValue(AUXin00Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge1 = auxin_gauge1, { stringValue(AUXin01Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge2 = auxin_gauge2, { stringValue(AUXin02Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge3 = auxin_gauge3, { stringValue(AUXin03Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge4 = auxin_gauge4, { stringValue(AUXin04Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge5 = auxin_gauge5, { stringValue(AUXin05Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge6 = auxin_gauge6, { stringValue(AUXin06Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge7 = auxin_gauge7, { stringValue(AUXin07Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge8 = auxin_gauge8, { stringValue(AUXin08Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge9 = auxin_gauge9, { stringValue(AUXin09Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge10 = auxin_gauge10, { stringValue(AUXin10Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge11 = auxin_gauge11, { stringValue(AUXin11Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge12 = auxin_gauge12, { stringValue(AUXin12Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge13 = auxin_gauge13, { stringValue(AUXin13Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge14 = auxin_gauge14, { stringValue(AUXin14Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
AuxInGauge15 = auxin_gauge15, { stringValue(AUXin15Alias) }, "", 0, 1024, -1, -1, 1025, 1025, 0, 0
gaugeCategory = "System Data"
clockGauge = secl, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
loopGauge = loopsPerSecond,"Main loop speed", "Loops/S" , 0, 70000, -1, 500,1800, 4000, 0, 0
memoryGauge = freeRAM, "Free memory", "bytes" , 0, 8000, -1, 1000,8000, 1000, 0, 0
reqFuelGauge = req_fuel, "Req. Fuel", "ms", 0, 35.0, 1.0, 1.2, 20, 25, 2, 2
mapMultiplyGauge = map_multiply_amt, "MAP Multiply", "%", 0, 200, 130, 140, 140, 150, 0, 0
nSquirtsGauge = nSquirts, "# Squirts", "", 0, 10, 130, 140, 140, 150, 0, 0
syncLossGauge = syncLossCounter, "# Sync Losses" "", 0, 255, -1, -1, 10, 50, 0, 0
;-------------------------------------------------------------------------------
[FrontPage]
; Gauges are numbered left to right, top to bottom.
;
; 1 2 3 4
; 5 6 7 8
gauge1 = tachometer
gauge2 = throttleGauge
gauge3 = pulseWidthGauge
gauge4 = dutyCycleGauge
gauge5 = mapGauge
gauge6 = iatGauge
gauge7 = cltGauge
gauge8 = gammaEnrichGauge
;----------------------------------------------------------------------------
; Indicators
; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
indicator = { running }, "Not Running", "Running" white, black, green, black
indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black
indicator = { ase }, "ASE OFF", "ASE ON", white, black, green, black
indicator = { warmup }, "WUE OFF", "WUE ON", white, black, green, black
indicator = { tpsaccaen }, "Accel", "Accel", white, black, green, black
indicator = { tpsaccden }, "Decel", "Decel", white, black, green, black
indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black
indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black
indicator = { error }, "No Errors", "ERROR", white, black, green, black
indicator = { (tps > tpsflood) && (rpm < crankRPM) }, "FLOOD OFF", "FLOOD CLEAR", white, black, red, black
indicator = { DFCOOn }, "DFCO OFF", "DFCO On", white, black, red, black
indicator = { launchHard }, "Launch Hard", "Launch Hard", white, black, green, black
indicator = { launchSoft }, "Launch Soft", "Launch Soft", white, black, green, black
indicator = { softlimitOn }, "Soft Limit OFF","Soft Limiter", white, black, red, black
indicator = { hardLimitOn }, "Hard Limit OFF","Hard Limiter", white, black, red, black
indicator = { boostCutOut }, "Ign Cut OFF", "Ign Cut (Boost)", white, black, red, black
indicator = { sync }, "No Sync", "Full Sync", white, black, green, black
indicator = { halfSync }, "No or Full Sync", "Half Sync", white, black, yellow, black
indicator = { resetLockOn }, "Reset Lock OFF","Reset Lock ON", red, black, green, black
indicator = { bootloaderCaps > 0 }, "Std. Boot", "Custom Boot", white, black, white, black
indicator = { nitrousOn }, "Nitrous Off", "Nitrous On", white, black, red, black
indicator = { IOError }, "I/O Ok", "I/O Error!", white, black, red, black
;Engine Protection status indicators
indicator = { engineProtectStatus}, "Engine Protect OFF", "Engine Protect ON", white, black, red, black
indicator = { engineProtectRPM }, "Rev Limiter Off", "Rev Limiter ON", white, black, red, black
indicator = { engineProtectMAP }, "Boost Limit OFF", "Boost Limit ON", white, black, red, black
indicator = { engineProtectOil }, "Oil Pres. Protect OFF","Oil Pres. Protect ON",white, black, red, black
indicator = { engineProtectAFR }, "AFR Protect OFF", "AFR Protect ON", white, black, red, black
indicator = { wmiEmptyBit }, "WMI Tank NOT Empty", "WMI Tank Empty", white, black, red, black
indicator = { outputsStatus0 }, "Programmable out 1 Off", "Programmable out 1 ON", white, black, green, black
indicator = { outputsStatus1 }, "Programmable out 2 Off", "Programmable out 2 ON", white, black, green, black
indicator = { outputsStatus2 }, "Programmable out 3 Off", "Programmable out 3 ON", white, black, green, black
indicator = { outputsStatus3 }, "Programmable out 4 Off", "Programmable out 4 ON", white, black, green, black
indicator = { outputsStatus4 }, "Programmable out 5 Off", "Programmable out 5 ON", white, black, green, black
indicator = { outputsStatus5 }, "Programmable out 6 Off", "Programmable out 6 ON", white, black, green, black
indicator = { outputsStatus6 }, "Programmable out 7 Off", "Programmable out 7 ON", white, black, green, black
indicator = { outputsStatus7 }, "Programmable out 8 Off", "Programmable out 8 ON", white, black, green, black
;-------------------------------------------------------------------------------
[OutputChannels]
; The number of bytes MegaTune or TunerStudio should expect as a result
; of sending the "A" command to Speeduino is determined
; by the value of ochBlockSize, so be very careful when
; you change it.
ochGetCommand = "r\$tsCanId\x30%2o%2c"
ochBlockSize = 117
secl = scalar, U08, 0, "sec", 1.000, 0.000
status1 = scalar, U08, 1, "bits", 1.000, 0.000
inj1Status = bits, U08, 1, [0:0]
inj2Status = bits, U08, 1, [1:1]
inj3Status = bits, U08, 1, [2:2]
inj4Status = bits, U08, 1, [3:3]
DFCOOn = bits, U08, 1, [4:4]
boostCutFuel = bits, U08, 1, [5:5]
toothLog1Ready = bits, U08, 1, [6:6]
toothLog2Ready = bits, U08, 1, [7:7]
engine = scalar, U08, 2, "bits", 1.000, 0.000
running = bits, U08, 2, [0:0]
crank = bits, U08, 2, [1:1]
ase = bits, U08, 2, [2:2]
warmup = bits, U08, 2, [3:3]
tpsaccaen = bits, U08, 2, [4:4]
tpsaccden = bits, U08, 2, [5:5]
mapaccaen = bits, U08, 2, [6:6]
mapaccden = bits, U08, 2, [7:7]
syncLossCounter = scalar, U08, 3, "", 1.000, 0.000
map = scalar, U16, 4, "kpa", 1.000, 0.000
iatRaw = scalar, U08, 6, "°C", 1.000, 0.000
coolantRaw = scalar, U08, 7, "°C", 1.000, 0.000
batCorrection = scalar, U08, 8, "%", 1.000, 0.000
batteryVoltage = scalar, U08, 9, "V", 0.100, 0.000
afr = scalar, U08, 10, "O2", 0.100, 0.000
egoCorrection = scalar, U08, 11, "%", 1.000, 0.000
airCorrection = scalar, U08, 12, "%", 1.000, 0.000
warmupEnrich = scalar, U08, 13, "%", 1.000, 0.000
rpm = scalar, U16, 14, "rpm", 1.000, 0.000
accelEnrich = scalar, U08, 16, "%", 2.000, 0.000
gammaEnrich = scalar, U16, 17, "%", 1.000, 0.000
VE1 = scalar, U08, 19, "%", 1.000, 0.000
VE2 = scalar, U08, 20, "%", 1.000, 0.000
afrTarget = scalar, U08, 21, "O2", 0.100, 0.000
TPSdot = scalar, U08, 22, "%/s", 10.00, 0.000
advance = scalar, S08, 23, "deg", 1.000, 0.000
tps = scalar, U08, 24, "%", 1.000, 0.000
loopsPerSecond = scalar, U16, 25, "loops", 1.000, 0.000
freeRAM = scalar, U16, 27, "bytes", 1.000, 0.000
boostTarget = scalar, U08, 29, "kPa", 2.000, 0.000
boostDuty = scalar, U08, 30, "%", 1.000, 0.000
status2 = scalar, U08, 31, "bits", 1.000, 0.000
launchHard = bits, U08, 31, [0:0]
launchSoft = bits, U08, 31, [1:1]
hardLimitOn = bits, U08, 31, [2:2]
softlimitOn = bits, U08, 31, [3:3]
boostCutSpark = bits, U08, 31, [4:4]
error = bits, U08, 31, [5:5]
idleControlOn = bits, U08, 31, [6:6]
sync = bits, U08, 31, [7:7]
rpmDOT = scalar, S16, 32, "rpm/s", 1.000, 0.000
flex = scalar, U08, 34, "%", 1.000, 0.000
flexFuelCor = scalar, U08, 35, "%", 1.000, 0.000
flexIgnCor = scalar, S08, 36, "deg", 1.000, 0.000
idleLoad = scalar, U08, 37, { bitStringValue( idleUnits , iacAlgorithm ) }, { (iacAlgorithm == 2 || iacAlgorithm == 3 || iacAlgorithm == 6 || iacMaxSteps <= 255) ? 1.000 : 2.000 }, 0.000 ; This is a combined variable covering both PWM and stepper IACs. The units and precision used depend on which idle algorithm is chosen
testoutputs = scalar, U08, 38, "bits", 1.000, 0.000
testenabled = bits, U08, 38, [0:0]
testactive = bits, U08, 38, [1:1]
afr2 = scalar, U08, 39, "O2", 0.100, 0.000
baro = scalar, U08, 40, "kpa", 1.000, 0.000
auxin_gauge0 = scalar, U16, 41, "", 1.000, 0.000
auxin_gauge1 = scalar, U16, 43, "", 1.000, 0.000
auxin_gauge2 = scalar, U16, 45, "", 1.000, 0.000
auxin_gauge3 = scalar, U16, 47, "", 1.000, 0.000
auxin_gauge4 = scalar, U16, 49, "", 1.000, 0.000
auxin_gauge5 = scalar, U16, 51, "", 1.000, 0.000
auxin_gauge6 = scalar, U16, 53, "", 1.000, 0.000
auxin_gauge7 = scalar, U16, 55, "", 1.000, 0.000
auxin_gauge8 = scalar, U16, 57, "", 1.000, 0.000
auxin_gauge9 = scalar, U16, 59, "", 1.000, 0.000
auxin_gauge10 = scalar, U16, 61, "", 1.000, 0.000
auxin_gauge11 = scalar, U16, 63, "", 1.000, 0.000
auxin_gauge12 = scalar, U16, 65, "", 1.000, 0.000
auxin_gauge13 = scalar, U16, 67, "", 1.000, 0.000
auxin_gauge14 = scalar, U16, 69, "", 1.000, 0.000
auxin_gauge15 = scalar, U16, 71, "", 1.000, 0.000
tpsADC = scalar, U08, 73, "ADC", 1.000, 0.000
errors = scalar, U08, 74, "bits", 1.000, 0.000
errorNum = bits, U08, 74, [0:1]
currentError = bits, U08, 74, [2:7]
pulseWidth = scalar, U16, 75, "ms", 0.001, 0.000
pulseWidth2 = scalar, U16, 77, "ms", 0.001, 0.000
pulseWidth3 = scalar, U16, 79, "ms", 0.001, 0.000
pulseWidth4 = scalar, U16, 81, "ms", 0.001, 0.000
status3 = scalar, U08, 83, "bits", 1.000, 0.000
resetLockOn = bits, U08, 83, [0:0]
nitrousOn = bits, U08, 83, [1:1]
fuel2Active = bits, U08, 83, [2:2]
vssRefresh = bits, U08, 83, [3:3]
halfSync = bits, U08, 83, [4:4]
nSquirts = bits, U08, 83, [5:7]
engineProtectStatus = scalar, U08, 84, "bits", 1.000, 0.000
engineProtectRPM = bits, U08, 84, [0:0]
engineProtectMAP = bits, U08, 84, [1:1]
engineProtectOil = bits, U08, 84, [2:2]
engineProtectAFR = bits, U08, 84, [3:3]
engineProtectOth = bits, U08, 84, [4:6] ; Unused for now
IOError = bits, U08, 84, [7:7]
unused1 = scalar, U08, 84, "ADC",1.000, 0.000
fuelLoad = scalar, S16, 85, { bitStringValue( algorithmUnits , algorithm ) }, 1.000, 0.000
ignLoad = scalar, S16, 87, { bitStringValue( algorithmUnits , ignAlgorithm ) }, 1.000, 0.000
dwell = scalar, U16, 89, "ms", 0.001, 0.000
CLIdleTarget = scalar, U08, 91, "RPM", 10.00, 0.000
MAPdot = scalar, U08, 92, "kPa/s", 10.00, 0.000
vvt1Angle = scalar, S08, 93, "deg", 1.00, 0.000
vvt1Target = scalar, U08, 94, "deg", 1.00, 0.000
vvt1Duty = scalar, U08, 95, "%", 1.00, 0.000
flexBoostCor = scalar, S16, 96, "kPa", 1.000, 0.000
baroCorrection = scalar, U08, 98, "%", 1.000, 0.000
veCurr = scalar, U08, 99, "%", 1.000, 0.000
ASECurr = scalar, U08, 100, "%", 1.000, 0.000
vss = scalar, U16, 101, "km/h", 1.000, 0.000
gear = scalar, U08, 103, "", 1.000, 0.000
fuelPressure = scalar, U08, 104, "PSI", 1.000, 0.000
oilPressure = scalar, U08, 105, "PSI", 1.000, 0.000
wmiPW = scalar, U08, 106, "%", 1.000, 0.000
wmiEmpty = scalar, U08, 107, "bits", 1.000, 0.000
wmiEmptyBit = bits, U08, 107, [0:0]
vvt2Angle = scalar, S08, 108, "deg", 1.00, 0.000
vvt2Target = scalar, U08, 109, "deg", 1.00, 0.000
vvt2Duty = scalar, U08, 110, "%", 1.00, 0.000
outputsStatus0 = bits, U08, 111, [0:0]
outputsStatus1 = bits, U08, 111, [1:1]
outputsStatus2 = bits, U08, 111, [2:2]
outputsStatus3 = bits, U08, 111, [3:3]
outputsStatus4 = bits, U08, 111, [4:4]
outputsStatus5 = bits, U08, 111, [5:5]
outputsStatus6 = bits, U08, 111, [6:6]
outputsStatus7 = bits, U08, 111, [7:7]
fuelTempRaw = scalar, U08, 112, "°C", 1.000, 0.000
fuelTempCor = scalar, U08, 113, "%", 1.000, 0.000
advance1 = scalar, S08, 114, "deg", 1.000, 0.000
advance2 = scalar, S08, 115, "deg", 1.000, 0.000
sd_status = scalar, U08, 116, "", 1.0, 0.0
;sd_filenum = scalar, U16, 117, "", 1, 0
;sd_error = scalar, U08, 119, "", 1, 0
;sd_phase = scalar, U08, 120, "", 1, 0
#if CELSIUS
coolant = { coolantRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
iat = { iatRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
fuelTemp = { fuelTempRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
#else
coolant = { (coolantRaw - 40) * 1.8 + 32 } ;Convert C to F (Offset by 40)
iat = { (iatRaw - 40) * 1.8 + 32 } ;Convert C to F (Offset by 40)
fuelTemp = { (fuelTempRaw - 40) * 1.8 + 32 } ;Convert C to F (Offset by 40)
#endif
time = { timeNow }
seconds = { secl }
throttle = { tps }, "%"
revolutionTime = { rpm ? ( 60000.0 / rpm) : 0 }
strokeMultipler = { twoStroke == 1 ? 1 : 2 }
cycleTime = { revolutionTime * strokeMultipler }
pulseLimit = { cycleTime / nSquirts }
nFuelChannels = { arrayValue( array.boardFuelOutputs, pinLayout ) }
nIgnChannels = { arrayValue( array.boardIgnOutputs, pinLayout ) }
sequentialFuelAvailable = { nCylinders <= nFuelChannels }
sequentialIgnitionAvailable = { nCylinders <= nIgnChannels }
dutyCycle = { rpm ? ( 100.0*pulseWidth/pulseLimit ) : 0 }
stgDutyCycle = { rpm && stagingEnabled ? ( 100.0*pulseWidth3/pulseLimit ) : 0 }
boostCutOut = { boostCutFuel || boostCutSpark }
lambda = { afr / stoich }
lambdaTarget = { afrTarget / stoich }
MAPxRPM = { rpm * map }
loopsPerRev = { loopsPerSecond / (rpm / 60) }
req_fuel = { reqFuel }
bat_correction = { battVCorMode ? 100 : batCorrection } ; If battery voltage correction mode is Whole PW, use the battery correction, otherwise 100%
inj_open = { battVCorMode ? ((injOpen * batCorrection) / 100) : injOpen } ; If battery voltage correction mode is Open Time Only, calculate the corrected open time
ase_enrich = { ASECurr } ; If ASE is active then equal the ASE + 100
map_multiply_amt = { multiplyMAP ? map : 100 } ; If multiply MAP is enabled, use the current MAP value, otherwise 100%
;nSquirts = { nCylinders / divider }
;Manifold pressure in weirdo units
map_bar = { (map - baro) / 101.33 }
map_psi = { (map - baro) * 0.145038 }
map_inhg = { (baro - map) * 0.2953007 } ;in-Hg
map_vacboost = { map < baro ? -map_inhg : map_psi }
vssMPH = { vss / 1.60934 }
;fuelLoadMax = { arrayValue(algorithmLimits , algorithm) } ;Doesn't work, no idea why.
fuelLoadMax = { (algorithm == 0 || algorithm == 2) ? 511 : 100 }
ignLoadMax = { (ignAlgorithm == 0 || ignAlgorithm == 2) ? 511 : 100 }
fuel2LoadMax = { (fuel2Algorithm == 0 || fuel2Algorithm == 2) ? 511 : 100 }
ign2LoadMax = { (spark2Algorithm == 0 || spark2Algorithm == 2) ? 511 : 100 }
fuelLoad2 = { fuel2Algorithm == 0 ? map : fuel2Algorithm == 1 ? tps : fuel2Algorithm == 2 ? 0 : 0 }
vvtLoad = { (vvtLoadSource == 0) ? map : tps }
boostTableLimit = { boostType == 0 ? 100 : 511 } ;The maximum value allowed in the boost table. 100 is used for duty cycle, 511 for kpa
CLIdleDelta = { CLIdleTarget - rpm }
;-------------------------------------------------------------------------------
[Datalog]
; Full datalog.
;
; Default user-defined log emulates the full datalog.
;
; 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.
;
; Channel Label Type Format
; -------------- ---------- ----- ------
entry = time, "Time", float, "%.3f"
entry = secl, "SecL", int, "%d"
entry = rpm, "RPM", int, "%d"
entry = map, "MAP", int, "%d"
entry = MAPxRPM, "MAPxRPM", int, "%d"
entry = tps, "TPS", int, "%d"
entry = afr, "AFR", float, "%.3f"
entry = lambda, "Lambda", float, "%.3f"
entry = iat, "IAT", int, "%d"
entry = coolant, "CLT", int, "%d"
entry = engine, "Engine", int, "%d"
entry = DFCOOn, "DFCO", int, "%d"
entry = egoCorrection, "Gego", int, "%d"
entry = airCorrection, "Gair", int, "%d"
entry = bat_correction, "Gbattery", int, "%d"
entry = warmupEnrich, "Gwarm", int, "%d"
entry = baroCorrection, "Gbaro", int, "%d"
entry = gammaEnrich, "Gammae", int, "%d"
entry = accelEnrich, "Accel Enrich", int, "%d"
entry = veCurr, "Current VE", int, "%d"
entry = VE1, "VE1", int, "%d"
entry = VE2, "VE2", int, "%d"
entry = pulseWidth, "PW", float, "%.3f"
entry = afrTarget, "AFR Target", float, "%.3f"
entry = lambdaTarget, "Lambda Target", float, "%.3f"
entry = pulseWidth, "PW2", float, "%.3f"
entry = dutyCycle, "DutyCycle1", float, "%.1f"
entry = dutyCycle, "DutyCycle2", float, "%.1f"
entry = TPSdot, "TPS DOT", int, "%d"
entry = advance, "Advance", int, "%d"
entry = dwell, "Dwell", float, "%.1f"
entry = batteryVoltage, "Battery V", float, "%.1f"
entry = rpmDOT, "rpm/s", int, "%d"
entry = flex, "Eth %", int, "%d", { flexEnabled }
entry = flexFuelCor, "GflexFuel", int, "%d", { flexEnabled }
entry = fuelTemp, "Fuel Temp", int, "%d", { flexEnabled }
entry = fuelTempCor, "GfuelTemp", int, "%d", { flexEnabled }
entry = errorNum, "Error #", int, "%d", { errorNum }
entry = currentError, "Error ID", int, "%d", { errorNum }
entry = map_psi, "Boost PSI", float, "%.1f"
entry = boostTarget, "Boost Target", int, "%d", { boostEnabled }
entry = boostDuty, "Boost Duty", int, "%d", { boostEnabled }
entry = boostCutOut , "Boost cut", int, "%d"
entry = launchHard , "Hard Launch", int, "%d"
entry = hardLimitOn , "Hard Limiter", int, "%d"
entry = idleControlOn, "Idle Control", int, "%d"
entry = idleLoad, "IAC value", int, "%d"
entry = CLIdleTarget, "Idle Target RPM", int, "%%d", { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || idleAdvEnabled >= 1 } ;Only show for closed loop idle modes and if idle advance is enabled
entry = CLIdleDelta, "Idle RPM Delta", int, "%d", { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || idleAdvEnabled >= 1 } ;Only show for closed loop idle modes and if idle advance is enabled
entry = baro, "Baro Pressure", int, "%d"
entry = nitrousOn, "Nitrous", int, "%d", { n2o_enable > 0 }
entry = syncLossCounter, "Sync Loss #", int, "%d"
entry = vvt1Angle, "VVT Angle", int, "%d", { vvtMode == 2 } ;;Only show when using close loop vvt
entry = vvt1Target, "VVT Target Angle", int, "%d", { vvtMode == 2 } ;;Only show when using close loop vvt
entry = vvt1Duty, "VVT Duty", int, "%d", { vvtEnabled > 0 }
entry = vss, "Wheel Speed (kph)",int, "%d", { vssMode > 1 }
entry = vssMPH, "Wheel Speed (mph)",int, "%d", { vssMode > 1 }
entry = gear, "Gear", int, "%d", { vssMode > 1 }
entry = fuelPressure, "Fuel Pressure", int, "%d", { fuelPressureEnable > 0 }
entry = oilPressure, "Oil Pressure", int, "%d", { oilPressureEnable > 0 }
entry = vvt2Angle, "VVT Angle", int, "%d", { vvtMode == 2 } ;;Only show when using close loop vvt
entry = vvt2Target, "VVT Target Angle",int, "%d", { vvtMode == 2 } ;;Only show when using close loop vvt
entry = vvt2Duty, "VVT Duty", int, "%d", { vvtEnabled > 0 }
entry = auxin_gauge0, { stringValue(AUXin00Alias) }, int, "%d", {(caninput_sel0b != 0)}
entry = auxin_gauge1, { stringValue(AUXin01Alias) }, int, "%d", { (caninput_sel1b != 0)}
entry = auxin_gauge2, { stringValue(AUXin02Alias) }, int, "%d", { (caninput_sel2b != 0)}
entry = auxin_gauge3, { stringValue(AUXin03Alias) }, int, "%d", { (caninput_sel3b != 0)}
entry = auxin_gauge4, { stringValue(AUXin04Alias) }, int, "%d", { (caninput_sel4b != 0)}
entry = auxin_gauge5, { stringValue(AUXin05Alias) }, int, "%d", { (caninput_sel5b != 0)}
entry = auxin_gauge6, { stringValue(AUXin06Alias) }, int, "%d", { (caninput_sel6b != 0)}
entry = auxin_gauge7, { stringValue(AUXin07Alias) }, int, "%d", { (caninput_sel7b != 0)}
entry = auxin_gauge8, { stringValue(AUXin08Alias) }, int, "%d", { (caninput_sel8b != 0)}
entry = auxin_gauge9, { stringValue(AUXin09Alias) }, int, "%d", { (caninput_sel9b != 0)}
entry = auxin_gauge10, { stringValue(AUXin10Alias) }, int, "%d", { (caninput_sel10b != 0)}
entry = auxin_gauge11, { stringValue(AUXin11Alias) }, int, "%d", { (caninput_sel11b != 0)}
entry = auxin_gauge12, { stringValue(AUXin12Alias) }, int, "%d", { (caninput_sel12b != 0)}
entry = auxin_gauge13, { stringValue(AUXin13Alias) }, int, "%d", { (caninput_sel13b != 0)}
entry = auxin_gauge14, { stringValue(AUXin14Alias) }, int, "%d", { (caninput_sel14b != 0)}
entry = auxin_gauge15, { stringValue(AUXin15Alias) }, int, "%d", { (caninput_sel15b != 0)}
entry = outputsStatus0, { stringValue(prgm_out00Alias)}, int, "%d", { (outputPin[0] != 0)}
entry = outputsStatus1, { stringValue(prgm_out01Alias)}, int, "%d", { (outputPin[1] != 0)}
entry = outputsStatus2, { stringValue(prgm_out02Alias)}, int, "%d", { (outputPin[2] != 0)}
entry = outputsStatus3, { stringValue(prgm_out03Alias)}, int, "%d", { (outputPin[3] != 0)}
entry = outputsStatus4, { stringValue(prgm_out04Alias)}, int, "%d", { (outputPin[4] != 0)}
entry = outputsStatus5, { stringValue(prgm_out05Alias)}, int, "%d", { (outputPin[5] != 0)}
entry = outputsStatus6, { stringValue(prgm_out06Alias)}, int, "%d", { (outputPin[6] != 0)}
entry = outputsStatus7, { stringValue(prgm_out07Alias)}, int, "%d", { (outputPin[7] != 0)}
entry = advance1, "Advance 1", int, "%d"
entry = advance2, "Advance 2", int, "%d"
[LoggerDefinition]
; valid logger types: composite, tooth, trigger, csv
;loggerDef = uniqueName, Display Name, type
loggerDef = tooth, "Tooth Logger", tooth
;dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format
startCommand = "H"
stopCommand = "h"
;dataReadCommand = "T" ; Basic TS command format
dataReadCommand = "T\$tsCanId\x01\xFC\x00\x01\xFC" ; Basic TS command format. Note that this is shared with the composite logger. Firmware detects which log is currently running
dataReadTimeout = 5000 ; time in ms
continuousRead = true
dataReadyCondition = { toothLog1Ready == 1 }
dataLength = 508; in bytes, including headers, footers and data (not used). 4 bytes * 127 entries
;dataLength = 128 ; in bytes, including headers, footers and data (not used)
;recordDef = headerLen. footerLen, recordLen
recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes
;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
recordField = toothTime, "ToothTime", 0, 32, 1.0, "uS"
loggerDef = compositeLogger, "Composite Logger", composite
startCommand = "J"
stopCommand = "j"
;dataReadCommand = "T" ; Basic TS command format. Note that this is shared with the composite logger. Firmware detects which log is currently running
dataReadCommand = "T\$tsCanId\x00\x00\x00\x02\x7B" ; Basic TS command format. Note that this is shared with the composite logger. Firmware detects which log is currently running
dataReadTimeout = 50000 ; time in ms
dataReadyCondition = { toothLog1Ready == 1 }
continuousRead = true
dataLength = 635 ; in bytes, including headers, footers and data (not used). 5 bytes * 127 fields
;recordDef = headerLen. footerLen, recordLen
recordDef = 0, 0, 5; in bytes, the recordLen is for each record, currently limited to 4 bytes
;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
recordField = priLevel, "PriLevel", 0, 1, 1.0, "Flag"
recordField = secLevel, "SecLevel", 1, 1, 1.0, "Flag"
recordField = trigger, "Trigger", 2, 1, 1.0, "Flag"
recordField = sync, "Sync", 3, 1, 1.0, "Flag"
recordField = refTime, "RefTime", 8, 32, 0.001, "ms"
; hidden calcField serves as intermediate variable
calcField = maxTime, "MaxTime", "ms", { maxValue(refTime) }
calcField = toothTime, "ToothTime", "ms", { refTime - pastValue(refTime, 1) }
;recordField = time, "Time", 24, 16, 1.0, "ms"
calcField = time, "Time", "ms", { refTime }
[ReferenceTables]
referenceTable = std_ms2gentherm, "Calibrate Thermistor Tables."
topicHelp = "https://wiki.speeduino.com/en/configuration/Sensor_Calibration"
tableIdentifier = 000, "Coolant Temperature Sensor", 001, "Air Temperature Sensor", 003, "Custom#1 Temperature Sensor"
; tableLimits (optional) = intentifier, min, max, defaultVal
; will set the default value if value is outside the min and max limits.
tableLimits = 000, -40, 350, 180 ;Coolant
tableLimits = 001, -40, 350, 70 ;IAT
;Table 002 is AFR
tableLimits = 003, -40, 400, 70 ; Not currently used
adcCount = 32 ; length of the table
bytesPerAdc = 2 ; using shorts
scale = 10 ; scale by 10 before sending to controller
;tableGenerator = Generator type, Label
tableGenerator = thermGenerator, "Thermistor Measurements"
tableGenerator = fileBrowseGenerator, "Browse for Inc File"
; thermOption = name, resistor bias, tempPoint1(C), resPoint1, tempPoint2, resPoint2, tempPoint3, resPoint3
thermOption = "GM", 2490, -40, 100700, 30, 2238, 99, 177
thermOption = "Chrysler 85 up", 2490, 5.5, 24500, 30.5, 8100, 88.3, 850
thermOption = "Ford", 2490, 0, 94000, 50, 11000, 98, 2370
thermOption = "Saab (Bosch)", 2490, 0, 5800, 80, 320, 100, 180
thermOption = "Mazda", 50000, -40, 2022088, 21, 68273, 99, 3715
thermOption = "Mitsu", 2490, -40, 100490, 30, 1875, 99, 125
thermOption = "Toyota", 2490, -40, 101890, 30, 2268, 99, 156
thermOption = "RX-7_CLT(S4 & S5)", 2490, -20, 16200, 20, 2500, 80, 300
thermOption = "RX-7_MAT", 42200, 20, 41500, 50, 11850, 85, 3500
thermOption = "VW L-Jet Cylinder Head Temp Sensor II", 1100, -13.888, 11600,53.888, 703, 95.555, 207
thermOption = "RX-7_AFM(S5 in AFM)", 2490, -20, 16200, 20, 2500, 80, 300
thermOption = "BMW E30 325i", 2490, -10, 9300, 20, 2500, 80, 335
solution = "3 Point Therm Generator", thermGenerator
solution = "Custom inc File", fileBrowseGenerator
referenceTable = std_ms2geno2, "Calibrate AFR Table..."
topicHelp = "https://wiki.speeduino.com/en/configuration/Sensor_Calibration"
tableIdentifier = 002, "AFR Table"
adcCount = 1024 ; length of the table
bytesPerAdc = 1 ; using bytes
scale = 10 ; scale by 10 before sending to controller
;tableGenerator = Generator Type, Label, xUnits, yUnits, xLow, xHi, yLow, yHi
tableGenerator = linearGenerator, "Custom Linear WB", "Volts","AFR", 1, 4, 9.7, 18.7
tableGenerator = fileBrowseGenerator, "Browse for Inc File"
solutionsLabel = "EGO Sensor"
solution = " ", { } ; blank row in case no match found. Must reman at top.
solution = "Narrowband", { table(adcValue*5/1023 , "nb.inc") } ;
solution = "14Point7", { 10.0001 + ( adcValue * 0.0097752 )} ; 10.0001 causes 1 adc to round different for unique match.
solution = "AEM Linear AEM-30-42xx", { 9.72 + (adcValue * 0.0096665) } ; 9.72:1 - 19.60:1
solution = "AEM Linear (30-2310 & 30-4900)", { 7.3125 + (adcValue * 0.0116080) } ; 7.31:1 - 19.18:1
solution = "Autometer 0V=10:1, 4V=16:1", { 10 + (adcValue * 0.0073313783) }
solution = "Ballenger AFR500 0V=9:1, 5V=16:1", { 9 + (adcValue * 0.00684262) }
solution = "Ballenger AFR500 0V=6:1, 5V=20:1", { 6 + (adcValue * 0.01368524) }
solution = "Daytona TwinTec", { 10.01 + (adcValue * 0.0097752) }
solution = "DIY-EFI TinyWB", { 10.0001 + ( adcValue * 0.0097752 )} ; Same as 14point7 units
solution = "DynoJet Wideband Commander", { adcValue * 0.00784325 + 10 }
solution = "F.A.S.T. Wideband", { adcValue * 0.01357317 + 9.6 } ; 838.8608
solution = "FJO WB", { table(adcValue*5/1023 , "fjoWB.inc" ) }
solution = "Fueltech WB-02 Nano Anhydr. Eth.", { 5.11043 + (adcValue * 0.997826) }
solution = "Fueltech WB-02 Nano Hydr. Ethan.", { 4.74685 + (adcValue * 0.927739) }
solution = "Fueltech WB-02 Nano Gasoline", { 8.37391 + (adcValue * 0.00796111) }
solution = "Fueltech WB-02 Nano Methanol", { 3.65652 + (adcValue * 0.00350289) }
solution = "Innovate LC-1 / LC-2 Default", { 7.35 + (adcValue * 0.01470186 )}
solution = "Innovate / PLX 0.0-5.0 10:1-20:1", { 10 + (adcValue * 0.0097752)}
solution = "Innovate 1.0-2.0", { adcValue * 0.049025}
solution = "LambdaBoy", { table(adcValue*5/1023 , "lambdaBoy.inc" ) }
solution = "NGK Powerdex", { 9 + ( adcValue * 0.0068359375 ) }
solution = "ODG Wideband - Faixa 1", { 8.3470 + (adcValue * 0.00795792) }
solution = "ODG Wideband - Faixa 2", { 9.1447 + (adcValue * 0.01013714) }
solution = "TechEdge DIY Non-Linear", { table(adcValue*5/1023 , "TechEdge_DIYwbo2.inc") }
solution = "TechEdge Linear", { adcValue * 0.0097752 + 9 }
solution = "Zeitronix - Non Linear", { table(adcValue*5/1023 , "zeitronix.inc") }
solution = "Zeitronix - Linear Default", { 9.6 + (adcValue * 0.0097752) }
solution = "Custom Linear WB", linearGenerator
solution = "Custom inc File", fileBrowseGenerator
[Tools]
;addTool = toolName, PanelName
addTool = veTableGenerator, "VE Table Generator", veTable1Tbl
addTool = afrTableGenerator, "AFR Table Generator", afrTable1Tbl
[VeAnalyze]
; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
#if LAMBDA
veAnalyzeMap = veTable1Tbl, afrTable1Tbl, lambda, egoCorrection
#else
veAnalyzeMap = veTable1Tbl, afrTable1Tbl, afr, egoCorrection
#endif
lambdaTargetTables = afrTable1Tbl, afrTSCustom
filter = std_xAxisMin ; Auto build with appropriate axis channels
;filter = minRPMFilter, "Minimum RPM", rpm, < , 500, , true
filter = std_xAxisMax ; Auto build with appropriate axis channels
filter = std_yAxisMin ; Auto build with appropriate axis channels
filter = std_yAxisMax ; Auto build with appropriate axis channels
filter = std_DeadLambda ; Auto build
#if CELSIUS
filter = minCltFilter, "Minimum CLT", coolant, < , 71, , true
#else
filter = minCltFilter, "Minimum CLT", coolant, < , 160, , true
#endif
filter = accelFilter, "Accel Flag" , engine, & , 16, , false
filter = aseFilter, "ASE Flag" , engine, & , 4, , false
filter = overrunFilter, "Overrun" , pulseWidth, = , 0, , false
filter = std_Custom ; Standard Custom Expression Filter.
[WueAnalyze]
; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, wueChannel, egoCorrectionChannel, activeCondition
#if LAMBDA
wueAnalyzeMap = warmup_analyzer_curve, warmup_afr_curve, afrTable1Tbl, lambda, coolant, warmupEnrich, egoCorrection
#else
wueAnalyzeMap = warmup_analyzer_curve, warmup_afr_curve, afrTable1Tbl, afr, coolant, warmupEnrich, egoCorrection
#endif
lambdaTargetTables = afrTable1Tbl, afrTSCustom
filter = std_DeadLambda ; Auto build
filter = accelFilter, "Accel Flag", engine, &, 16, false
filter = aseFilter, "ASE Flag", engine, &, 4, false
filter = overrunFilter, "Overrun", pulseWidth, =, 0, false
filter = maxTPS, "Max TPS", throttle, >, 15, true
filter = minRPM, "Min RPM", rpm, <, 300, true
filter = std_Custom ; Standard Custom Expression Filter.